diff --git a/Basis/Manager.py b/Utils/Manager.py similarity index 67% rename from Basis/Manager.py rename to Utils/Manager.py index 5ed3502..528bcc7 100644 --- a/Basis/Manager.py +++ b/Utils/Manager.py @@ -2,21 +2,26 @@ # -*- coding: utf-8 -*- import copy -from Basis.Logger import logging -from Basis.Functions import genFlag -from Basis.Exception import managerException +from enum import Enum +from Utils.Logger import logger +from Utils.Common import genFlag +from Utils.Exception import managerException + + +class TASK(Enum): # task status + LOADED = -1 + RUNNING = 0 + FINISH = 1 + class Task(object): """ Manage global check task. """ __tasks = {} # task status -> loaded / running / complete __unions = {} # one union include multi tasks - __TASK_LOADED = -1 - __TASK_RUNNING = 0 - __TASK_FINISH = 1 def __init__(self): - logging.info('Manager start') + logger.info('Manager start') def listUnion(self) -> list: # get all union ids return [x for x in self.__unions] @@ -28,26 +33,26 @@ class Task(object): tasks = {} # temporary task storage taskIds = [] # task id list for manage union unionId = genFlag(length = 12) # generate union id (12 bytes) - logging.debug('Manager start to load union [%s]' % unionId) + logger.debug('Manager start to load union [%s]' % unionId) for task in union: taskId = genFlag(length = 16) # generate task id (16 bytes) taskIds.append(taskId) tasks[taskId] = { - 'status': self.__TASK_LOADED, # task status -> loaded + 'status': TASK.LOADED, # task status -> loaded 'data': copy.deepcopy(task) # save task info } - logging.info('Manager add task [%s] -> %s' % (taskId, task)) + logger.info('Manager add task [%s] -> %s' % (taskId, task)) self.__tasks.update(tasks) # load into task list self.__unions[unionId] = { 'finish': False, 'items': taskIds # record task items } - logging.info('Manager add union [%s] -> %s' % (unionId, taskIds)) + logger.info('Manager add union [%s] -> %s' % (unionId, taskIds)) return unionId def delUnion(self, unionId) -> None: # remove union if unionId not in self.__unions: - logging.error('Manager union [%s] not found' % unionId) + logger.error('Manager union [%s] not found' % unionId) raise managerException('Union id not found') if not self.__unions[unionId]['finish']: # some tasks are still running raise managerException('Couldn\'t remove working union') @@ -55,18 +60,18 @@ class Task(object): def getUnion(self, unionId: str) -> dict: # get union status (remove tasks when all completed) if unionId not in self.__unions: - logging.error('Manager union [%s] not found' % unionId) + logger.error('Manager union [%s] not found' % unionId) raise managerException('Union id not found') if self.__unions[unionId]['finish']: # all tasks are finished return self.__unions[unionId] tasks = self.__unions[unionId]['items'] finishNum = 0 for taskId in tasks: - if self.__tasks[taskId]['status'] == self.__TASK_FINISH: # get number of completed task + if self.__tasks[taskId]['status'] == TASK.FINISH: # get number of completed task finishNum += 1 - logging.info('Manager statistics union [%s] -> %i/%i' % (unionId, finishNum, len(tasks))) + logger.info('Manager statistics union [%s] -> %i/%i' % (unionId, finishNum, len(tasks))) if finishNum < len(tasks): # some tasks are not yet completed - logging.debug('Manager union [%s] still working' % unionId) + logger.debug('Manager union [%s] still working' % unionId) return { 'finish': False, 'percent': round(finishNum / len(tasks), 2) @@ -78,24 +83,24 @@ class Task(object): self.__unions[unionId]['result'].append(task['data']) self.__unions[unionId]['finish'] = True self.__unions[unionId].pop('items') - logging.info('Manager release union [%s] -> %s' % (unionId, self.__unions[unionId]['result'])) + logger.info('Manager release union [%s] -> %s' % (unionId, self.__unions[unionId]['result'])) return self.__unions[unionId] def popTask(self) -> tuple[str or None, any]: # fetch a loaded task for taskId, task in self.__tasks.items(): - if task['status'] != self.__TASK_LOADED: continue # only get loaded task - task['status'] = self.__TASK_RUNNING # set task status as running - logging.info('Manager pop task [%s] -> %s' % (taskId, task['data'])) + if task['status'] != TASK.LOADED: continue # only get loaded task + task['status'] = TASK.RUNNING # set task status as running + logger.info('Manager pop task [%s] -> %s' % (taskId, task['data'])) return taskId, copy.deepcopy(task['data']) - logging.debug('Manager has no more task') + logger.debug('Manager has no more task') raise managerException('No more tasks') def finishTask(self, taskId: str, taskData: dict) -> None: # update task data when completed if taskId not in self.__tasks: - logging.error('Manager task [%s] not found' % taskId) + logger.error('Manager task [%s] not found' % taskId) raise managerException('Task id not found') self.__tasks[taskId]['data'] = copy.deepcopy(taskData) - self.__tasks[taskId]['status'] = self.__TASK_FINISH # set task status as completed + self.__tasks[taskId]['status'] = TASK.FINISH # set task status as completed Manager = Task() # global task manager