Exemple #1
0
    def init_exec_status(self):
        # 初始化缓存的任务信息
        task_info = {
            'task_id': self._task_id,
            'start_time': SysUtils.get_now_time_str(),
            'task_status': TaskStatus.RUNNING,
            'percentage': 0.0,
            'progress_history': [],
            'result': {}
        }
        task_info = dict(task_info, **self._extra_info)
        # 缓存该任务信息
        MyRedis.set(self._task_id, task_info, category=task_cat)

        # 在数据库中保存任务记录
        TasksDAO.save(task_info)

        # 保存任务详情日志
        LogRecords.save(task_info,
                        category='task',
                        action='任务启动',
                        desc='记录任务启动时状态及任务信息')

        # 返回该任务信息
        return task_info
Exemple #2
0
 def save_exec_info_pack_id(task_id, pack_id=None):
     # 从缓存或数据库中读取该任务的记录
     task_info = MyTask.fetch_exec_info(task_id)
     # 没有该任务信息记录时,返回失败
     if task_info is None:
         return False
     if pack_id is not None:
         task_info['pack_id'] = pack_id
         TasksDAO.save(task_info)
Exemple #3
0
 def save_exec_info_name(task_id, process_file_name=None):
     # 从缓存或数据库中读取该任务的记录
     task_info = MyTask.fetch_exec_info(task_id)
     # 没有该任务信息记录时,返回失败
     if task_info is None:
         return False
     # 增加当前任务处理的文件名(考虑任务出发点是文件)
     if process_file_name is not None:
         task_info['process_file_name'] = process_file_name
         TasksDAO.save(task_info)
Exemple #4
0
 def stop_running_tasks_of_pack(pack_id):
     tasks_list = TasksDAO.search_by_pack(pack_id)
     for task_info in tasks_list:
         task_status = task_info['task_status']
         # 没有执行完成的任务状态,用缓存中任务信息代替
         if task_status == TaskStatus.START or task_status == TaskStatus.RUNNING:
             MyTask.stop_task(task_info['task_id'])
Exemple #5
0
    def save_exec_info(task_id, percent, result=None, notify=True):
        # 从缓存或数据库中读取该任务的记录
        task_info = MyTask.fetch_exec_info(task_id)

        # 没有该任务信息记录时,返回失败
        if task_info is None:
            return False

        # 设置百分比和运行状态
        task_info['percentage'] = percent

        # 结果集不为空时,用新的结果集替换
        if result is not None:
            task_info['result'] = result

        # 计算并记录执行时间(预计剩余时间)
        task_info['remain_time'] = MyTask._calc_exec_time(task_info)
        # 设置当前记录时间
        task_info['record_time'] = SysUtils.get_now_time_str()

        # 保存处理进程的历史记录
        MyTask._save_progress_history(task_info)

        # 调用 websocket task_feedback
        task_feedback(task_id, task_info)

        # 运行100%时,设置任务完成状态,并更新数据库,清理缓存
        if percent == 100.0:
            task_info['task_status'] = TaskStatus.COMPLETE
            TasksDAO.save(task_info)
            MyRedis.delete(task_id, category=task_cat)

            # 保存任务详情日志
            LogRecords.save(task_info,
                            category='task',
                            action='任务完成',
                            desc='任务执行100%,记录任务执行结果信息')
        else:
            # 缓存该任务的记录
            MyRedis.set(task_id, task_info, category=task_cat)

        # 发送执行状态的更新消息
        if notify:
            MyTask.notify_task_exec_info(task_info)

        return True
def query_component(request):
    # path('task/query_component', task_view.query_component, name='task_query_component'),
    # 读取数据库任务集合
    task_id_list = TasksDAO.all_component()

    # 保存操作日志
    LogRecords.save(task_id_list, category='query', action='查询组件任务状态')

    return sys_app_ok_p(task_id_list)
def search_tasks_by_file(request):
    # 从请求中取参数:文件 ID
    file_id = req_get_param(request, 'file_id')
    if file_id is None:
        return sys_app_ok_p([])

    tasks_list = TasksDAO.search_by_file(file_id)

    # 保存查询日志
    LogRecords.save(tasks_list, category='query_task', action='查询文件任务',
                    desc='查询指定的文件(ID=%s)所有的任务信息' % file_id)

    return sys_app_ok_p(tasks_list)
Exemple #8
0
    def stop_task(task_id):
        # 从缓存中取出任务信息,同时删除这条缓存
        task_info = MyTask.fetch_exec_info(task_id, remove=True)

        # 只允许终止正在运行的任务
        if task_info['task_status'] != TaskStatus.RUNNING:
            return task_info

        # 设置停止状态和 stop_time
        task_info['task_status'] = TaskStatus.STOPPED
        task_info['stop_time'] = SysUtils.get_now_time_str()

        # 在数据库中保存任务信息
        TasksDAO.save(task_info)

        # 保存任务详情日志
        LogRecords.save(task_info,
                        category='task',
                        action='任务终止',
                        desc='任务被终止')

        return task_info
Exemple #9
0
    def fetch_exec_info(task_id, remove=False):
        # 从缓存中读取该任务的记录
        task_info = MyRedis.get(task_id, category=task_cat)

        # 如设置移除参数,删除该记录
        if remove and task_info is not None:
            MyRedis.delete(task_id, category=task_cat)

        # 缓存中没有任务信息,则从数据库中读取
        if task_info is None:
            task_info = TasksDAO.find(task_id)

        return task_info
def get_all_task_result(request):
    # 读取数据库任务集合
    task_id_list = TasksDAO.all_tasks()
    # task_info_list = []
    # # 从缓存中读取任务执行信息
    # for task in task_id_list:
    #     print(task['task_id'])
    #     task_info = MyTask.fetch_exec_info(task['task_id'])
    #     task_id_list.append(task_info)

    # 保存操作日志
    LogRecords.save(task_id_list, category='query', action='查询全部任务状态')

    return sys_app_ok_p(task_id_list)
def search_tasks_by_pack(request):
    # 从请求中取参数:包 ID
    pack_id = req_get_param(request, 'pack_id')
    if pack_id is None:
        return sys_app_ok_p([])

    tasks_list = TasksDAO.search_by_pack(pack_id)
    task_info_list = []
    for task_info in tasks_list:
        # 没有执行完成的任务状态,用缓存中任务信息代替
        if task_info['task_status'] != TaskStatus.COMPLETE:
            task_info = MyTask.fetch_exec_info(task_info['task_id'])
        task_info_list.append(task_info)

    # 保存查询日志
    LogRecords.save(task_info_list, category='query_task', action='查询固件包任务',
                    desc='查询指定的固件包(ID=%s)所有的任务信息' % pack_id)

    return sys_app_ok_p(task_info_list)