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)
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