Пример #1
0
def status():
    for process in constants.APP_PROCESSES:
        pids = find_pid(process.get('token'))
        if not pids:
            ApiLogging.error([process.get('name'), pids], True)
        else:
            ApiLogging.info([process.get('name'), pids], True)
Пример #2
0
    def __load_module(self):
        """
        load module if not loaded

        :return: module instance
        :rtype: BaseModule
        """
        module_path = "modules." + self.task_model.route + '.' + self.task_model.module_version + ".module"
        try:
            ApiLogging.info("import")
            app_module = importlib.import_module(module_path)
            return app_module.Module(self.task_model)
        except Exception as e:
            # TODO: save exception same as run method exception part
            ApiLogging.error("import exception " + str(e))
            return None
Пример #3
0
    def run(self):
        while 1:
            # sleep for decrease cpu usage
            sleep(0.01)
            QCoreApplication.processEvents()
            from_db = False
            if self.running_tasks.__len__() >= self.limit():
                continue
            try:
                if self.items:
                    from_db = True
                    item = self.items.pop()
                else:
                    item = self.queue.get()  # type: RequestObject
                if item:
                    if not from_db:
                        task_model = TaskModel()
                        task_model.route = item.route
                        task_model.process_id = item.process_id
                        task_model.status = constants.STATUS_RUNNING
                        task_model.data = item.data
                        task_model.call_back = item.call_back
                        task_model.token = item.token
                        task_model.module_version = item.module_version
                        task_model.queue_name = self.queue_name
                        task_model.save()
                    else:
                        task_model = item

                    task = Task(task_model)
                    if task.instance_module:
                        task.instance_module.task_finished.connect(self.__task_finished)
                        task.setAutoDelete(True)
                        self.running_tasks.update({item.process_id: task})
                        # check cancel or pause request before start
                        self.apply_action_by_pid(task, item.process_id)
                        self.pool.start(task)
                    else:
                        # TODO: set error alarm
                        ApiLogging.error('problem running task')
            except Exception as e:
                ApiLogging.error('process exception' + str(e))
                # TODO: set error alarm
                continue
Пример #4
0
    def run(self):
        try:
            """ run module and save result in database """
            ApiLogging.info("module " + str(self.task_model.route))
            self.instance_module.prepare()
            self.instance_module.run()
            self.task_model.status = constants.STATUS_SUCCESS
            if not self.instance_module.result:
                error = {'code': ResultNotSetError.get_code(), 'message': 'module not set any result before return!'}
                self.task_model.response_data = {
                    'data': to_json(self.instance_module.result),
                    'error': to_json(error),
                    'status': constants.STATUS_ERROR,
                    'token': self.task_model.token,
                    'process_id': self.task_model.process_id
                }
        except Exception as e:
            LogHandler.save(sys.exc_info(), process_id=self.task_model.process_id)
            ApiLogging.error('result exception ' + str(e))
            self.task_model.status = constants.STATUS_FAILED
            old_exception = e.__str__()
            try:
                error = {'code': e.get_code(), 'message': e.args[0]}
            except Exception as e:
                error = {'code': 0, 'message': old_exception}

            self.task_model.response_data = {
                'data': to_json(self.instance_module.result),
                'error': to_json(error),
                'status': constants.STATUS_ERROR,
                'token': self.task_model.token,
                'process_id': self.task_model.process_id
            }

        finally:
            self.task_model.save()
            ApiLogging.info('emit finish signal')
            self.instance_module.task_finished.emit(self.task_model.process_id)
Пример #5
0
    current_version = 'v_' + str(database_version).replace('.', '_')
    for dirc in os.listdir(update_path):
        if dirc > current_version:
            updates.append(dirc)
    updates = sorted(updates)
    for update in updates:
        # create object from Update class and run upgrade
        import_file = importlib.import_module('updates.' + update + '.update')
        up = import_file.Update()
        temp_version = update.replace('v_', '')
        # convert dir name format to database record format
        database_new_version = temp_version.replace('_', '.')
        up.upgrade()
        Setting.put('api_version', database_new_version, force=True)

elif float(database_version) > float(current_version):
    # Todo: downgrade
    pass

else:  # database version is equal to system current version
    ApiLogging.info('system is updated', True)

if patch:
    try:
        import_file = importlib.import_module('updates.patch.patch_' + num)
        up = import_file.Update()
        up.upgrade()
        ApiLogging.info('patch ' + str(num) + ' applied!', True)
    except Exception as e:
        ApiLogging.error("patch exception: " + str(e), True)