示例#1
0
class SingleTask:

    def __init__(self, single_task: dict):
        self.locator = single_task['locator']
        self.name = single_task['name']
        self.metadata = single_task['metadata']
        self.method = single_task['method']
        self.params = single_task['params']
        transaction = Transaction(meta=self.metadata)
        self._locator = Locator(transaction)

    def execute(self):
        """ Run method
        """
        print('run single task')
        try:
            if self.locator == 'SERVICE':
                caller = self._locator.get_service(self.name, self.metadata)
            elif self.locator == 'MANAGER':
                caller = self._locator.get_manager(self.name)

        except Exception as e:
            _LOGGER.debug(f'[SingleTask] fail at locator {e}')
            raise ERROR_TASK_LOCATOR(locator=self.locator, name=self.name)

        try:
            print(f'[SingleTask] request: {self.name}.{self.method} {self.params}')
            _LOGGER.debug(f'[SingleTask] request: {self.name}.{self.method} {self.params}')
            method = getattr(caller, self.method)
            resp = method(**self.params)
            _LOGGER.debug(f'[SingleTask] response: {resp}')
            return resp
        except Exception as e:
            _LOGGER.error(f'[SingleTask] fail to execute method: {self.method}, params: {self.params}, {e}')
            raise ERROR_TASK_METHOD(name=self.name, method=self.method, params=self.params)
示例#2
0
class InventoryDBUpdater(BaseWorker):
    def __init__(self, queue, **kwargs):
        BaseWorker.__init__(self, queue, **kwargs)
        self.locator = Locator()

    def run(self):
        """ Infinite Loop
        """
        # Create Manager
        collecting_mgr = self.locator.get_manager('CollectingManager')

        while True:
            # Read from Queue
            try:
                binary_resource_info = queue.get(self.queue)
                resource_info = json.loads(binary_resource_info.decode())
                # Create Transaction
                collecting_mgr.transaction = Transaction(resource_info['meta'])
                # processing
                method = resource_info['method']
                if method == '_process_single_result':
                    collecting_mgr._process_single_result(
                        resource_info['res'], resource_info['param'])
                elif method == '_watchdog_job_task_stat':
                    collecting_mgr._watchdog_job_task_stat(
                        resource_info['param'])
                else:
                    _LOGGER.error(f'Unknown request: {resource_info}')

            except Exception as e:
                _LOGGER.error(f'[{self._name_}] failed to processing: {e}')
                continue