def test(self, request): """测试 celery 任务能否提交""" from ..tasks import test_live try: s: AsyncResult = test_live.delay() return JsonResponse(msg='ok', data=True) except Task.OperationalError as e: return JsonResponse(code=1, msg=str(e), data=False)
def query(self, request: Request): """ 查询 Celery 任务结果 """ params = self.CeleryTaskQueryParams(request.query_params).params_data task_result = TaskResult.objects.filter(task_id__in=params.task_id) serializer = CeleryTaskSerializer(task_result, many=True) return JsonResponse(serializer, request=request)
def svn_project_dir(self, request: Request): """ svn 项目目录 :param request: :return: """ params = self.ReqSVNProjectDirSer(request.query_params) params.o.project_name result = SvnPath.get_tree_list(params.o.project_name, params.o.path) return JsonResponse(result)
def interface(self, request: Request, *args, **kwargs): '''获取字典的接口 ''' key = request.query_params.get('key') _r = {} if key: o = DictDefine.objects.filter(key=key).first() if o: _r = o.get_dict() return JsonResponse(_r)
def revoke_task(self, request: Request): """ 撤销 Celery 任务 """ from celery_app import app params = self.CeleryTaskQueryParams(request.data).params_data for t_id in params.task_id: app.control.revoke(t_id, terminate=True) TaskResult.objects.filter(task_id__in=params.task_id).update( status=states.REVOKED) return JsonResponse(params, request=request)
def svn_project_list(self, request): """ 获取 svn 项目 :param request: :return: """ project_list = SvnPath.get_svn_project_list() data = ObjectDict() data.results = [] for project_name in project_list: data.results.append(dict(id=project_name, alias=project_name)) return JsonResponse(data)
def resource_members(self, request): """ 获取 角色下的成员 :param request: :return: """ parmas = self.RoleResourceMembersSer(request.query_params).params_data if parmas.id: role_model = self.get_queryset().filter(id=parmas.id).first() if role_model: parmas.members = role_model.resource_map_ids return JsonResponse(parmas)
def tasks(self, request: Request): """ 查询 Celery 注册的任务 """ from celery import current_app data = ObjectDict() tasks = [ dict(id=name, alias=(task.__doc__ or name).strip().split()[0]) for name, task in current_app.tasks.items() if not name.startswith('celery.') ] data.results = tasks return JsonResponse(data, request=request)
def query_progress(self, request: Request): """ 返回关联任务结果 """ params = self.AssociatedTaskResultQueryParmas( request.query_params).params_data if params.a_id: filter_condition = Q(a_id__in=params.a_id) if params.a_type_name: filter_condition = filter_condition & Q( a_type_name=params.a_type_name) if params.is_done: query = AssociatedTaskResult.filter_done_task() else: query = AssociatedTaskResult.filter_progress_task() a_task_results = query.filter(filter_condition) serializer = AssociatedTaskResultSer(a_task_results, many=True) return JsonResponse(serializer, request=request)
def statistic_execute(request, statistic_id=0, server_id=0): '''执行接口 ''' _r = {"code": -1, "msg": ""} server_id = int(request.REQUEST.get('server_id', '') or 0) statistic_id = int(request.REQUEST.get('statistic_id', '') or 0) sdate = request.REQUEST.get('sdate', '') edate = request.REQUEST.get('edate', '') try: assert sdate and edate and statistic_id, '时间或者统计ID为空!' sdate = convert_to_datetime(sdate) edate = convert_to_datetime(edate) server_ids = [server_id] statistic_ids = [statistic_id] sm = StatisticManager(sdate, edate, statistic_ids, server_ids) err_msgs = sm.start_update()[0] if not err_msgs: _r["code"] = 0 _r["msg"] = '\n'.join(err_msgs) except: _r["msg"] = trace_msg() return JsonResponse(_r)