コード例 #1
0
ファイル: master_product.py プロジェクト: perldev/zoo
    def create_upgrade_task(self, requested_products: list, products: ProductCollection):
        """
        фабричный метод: создать такс с переданными параметрами, с типом COMMAND_UPGRADE
        сохранить в базе данных
        зхапустить воркер

        :param requested_products:
        :param products:
        :param parameter_manager:
        :return:
        """
        title = 'Upgrading products: {0}'.format(', '.join([product_name for product_name in requested_products]))
        state = {
            'requested_products': requested_products,
            'products': products.get_names_list(),
            'parameters': {}
        }
        settings = Core.get_instance().settings.get_state()

        logging.debug('state: {0}'.format(state))

        task = Task(
            command=Task.COMMAND_UPGRADE,
            title=title,
            params=json.dumps(state, sort_keys=True, indent=1),
            settings=json.dumps(settings, sort_keys=True, indent=1)
        )
        task.save()

        # production

        # For debug worker uncomment this
        #self.task.execute()

        return task.id
コード例 #2
0
ファイル: tornado_worker.py プロジェクト: perldev/zoo
 def task2fail(task_id):
     try:
         obj = Task.get(Task.id == task_id)
         obj.status = Task.STATUS_FAILED
         obj.save()
     except Task.DoesNotExist:
         return True
コード例 #3
0
ファイル: master_product.py プロジェクト: perldev/zoo
    def create_install_task(self, requested_products: list, products: ProductCollection, parameter_manager: ParametersManager):
        """
        фабричный метод: создать такс с переданными параметрами, с типом COMMAND_INSTALL
        сохранить в базе данных
        зхапустить воркер

        :param requested_products:  те продукты которые выбрал пользователь
        :param products:  продукты для установки (продукты которые выбрал пользователь + зависимости)
        :param parameter_manager:
        :return: номер таска
        """
        title = 'Installing products: {0}'.format(', '.join([product_name for product_name in requested_products]))
        state = {
            'requested_products': requested_products,
            'products': products.to_json_list(),
            'parameters': parameter_manager.get_state()
        }
        settings = Core.get_instance().settings.get_state()

        for product in products.to_json_list():

            state = {
                'requested_products': requested_products,
                'products': product,
                'parameters': parameter_manager.get_state()
            }
            state2save = json.dumps(state, sort_keys=True, indent=1)

            task = Task(
                command=Task.COMMAND_INSTALL,
                title=title,
                params=state2save,
                settings=json.dumps(settings, sort_keys=True, indent=1)
            )
            task.save()
        # production
        # For debug worker uncomment this
        # self.task.execute()
        return task.id
コード例 #4
0
ファイル: master_product.py プロジェクト: perldev/zoo
    def create_uninstall_task(self, products: ProductCollection):
        """
        фабричный метод: создать такс с переданными параметрами, с типом COMMAND_UNINSTALL
        сохранить в базе данных
        зхапустить воркер

        :param requested_products:
        :param products:
        :param parameter_manager:
        :return:
        """

        title = 'Uninstalling products: {0}'.format(', '.join([product.title for product in products]))
        state = {
            'products': products.get_names_list(),
        }
        settings = Core.get_instance().settings.get_state()
        task = Task(
            command=Task.COMMAND_UNINSTALL,
            title=title,
            params=json.dumps(state, sort_keys=True, indent=1),
            settings=json.dumps(settings, sort_keys=True, indent=1))
        task.save()
        return task.id
コード例 #5
0
ファイル: tornado_worker.py プロジェクト: perldev/zoo
    def is_alive_task(task_id, core):
        try:
            obj = Task.get(Task.id == task_id)
            # may be wrong
            if obj.status == Task.STATUS_EXCEPTION:
                return False
            if obj.status == Task.STATUS_FAILED:
                return False
            if obj.status == Task.STATUS_DONE:
                return False

            print("find possible alive task %i pid is %i" % (task_id, obj.pid) )
            pid = obj.pid
            return core.api.os.shell.is_alive(pid)
        except Task.DoesNotExist:
            return False
コード例 #6
0
ファイル: tornado_worker.py プロジェクト: perldev/zoo
    def process_check_new_tasks(self):
        # User.select().where(User.active == True).order_by(User.username)
        print("i'm checking a new tasks")
        query = Task.select().where(Task.status == Task.STATUS_PENDING).order_by(Task.id)

        if not self.check_free4run():
            print("lock is busy")
            return False
        # race condition ?????
        for task in query:
            print("i have found a new task %s" % str(task))
            if TornadoWorker.lock_obj(Task.LOCK, str(task.id)):
                # if it failed ?
                self.start_task(task)
                return True
            else:
                return False
コード例 #7
0
ファイル: run_install_worker.py プロジェクト: perldev/zoo
    def run(self):
        """
        Run task
        """
        # set django env to load django settings.py and get database config
        # os.environ.setdefault("DJANGO_SETTINGS_MODULE", "web.settings")
        # from django.core import management
        # append web module ti python path
        sys.path.append(os.path.join(self.core.settings.root, 'src', 'web'))
        from web.taskqueue.models_peewee import TaskPeewee as Task
        print("start working on  task %s" % self.task_id)
        task = Task.get(Task.id == self.task_id)

        if task.status != Task.STATUS_PENDING:
            raise Exception("Incorrect status: " + task.status)

        # create core with settings for current task
        settings = None
        if task.settings:
            settings = json.loads(task.settings)

        start(settings)

        # configure logger

        logger = logging.getLogger()

        # remove all handlers
        logger.handlers = []
        # all to output, tornado will write to db from output of this process
        ch = logging.StreamHandler(sys.stdout)
        ch.setLevel(logging.DEBUG)
        formatter = logging.Formatter('%(asctime)s [%(levelname)s] %(module)s.%(funcName)s: %(message)s')
        logger.addHandler(ch)
        ch.setLevel(logging.INFO)
        logger.addHandler(ch)
        self.do_task(task, Task.LOCK)
        sys.exit(0)
コード例 #8
0
ファイル: tornado_worker.py プロジェクト: perldev/zoo
 def get_object_or_404(id):
     try:
         obj = Task.get(Task.id == id)
         return obj
     except Task.DoesNotExist:
         return []