diff --git a/apps/ecm/tasks.py b/apps/ecm/tasks.py index 478299b2..900b98b1 100644 --- a/apps/ecm/tasks.py +++ b/apps/ecm/tasks.py @@ -70,7 +70,7 @@ def check_event_timeout(): """ for i in Event.objects.filter(handle_user=None, is_timeout=False): cate = i.cates.all().order_by('priority', 'create_time').first() - if cate.handle_minute > 0 and (timezone.now()-i.create_time).seconds > cate.handle_minute * 60: + if cate and cate.handle_minute > 0 and (timezone.now()-i.create_time).seconds > cate.handle_minute * 60: i.is_timeout = True i.save() @@ -85,7 +85,9 @@ def opl_task(vc_codes: list, opl_id: str): algo_codes = list(EventCate.objects.filter(opl_cates=opl_cate).values_list('code', flat=True)) vchannels = TDevice.objects.filter(code__in=vc_codes) opl = Opl.objects.get(id=opl_id) - while time.time()-start_time < 14400 and algo_codes: # 一次任务不手动关闭最多持续4小时 + while time.time()-start_time < 14400: # 一次任务不手动关闭最多持续4小时 for i in vchannels: Thread(target=snap_and_analyse, args=(i, algo_codes, opl)).start() time.sleep(10) + opl.mtask_uid = None + opl.save() diff --git a/apps/monitor/filters.py b/apps/monitor/filters.py index 1f1756d9..0754bc12 100644 --- a/apps/monitor/filters.py +++ b/apps/monitor/filters.py @@ -1,7 +1,12 @@ from django_filters import rest_framework as filters +from apps.monitor.models import DrfRequestLog + class DrfLogFilterSet(filters.FilterSet): start_request = filters.DateTimeFilter(field_name="requested_at", lookup_expr='gte') end_request = filters.DateTimeFilter(field_name="requested_at", lookup_expr='lte') - id = filters.CharFilter() + + class Meta: + model = DrfRequestLog + fields = ['id', 'start_request', 'end_request', 'status_code'] diff --git a/apps/monitor/views.py b/apps/monitor/views.py index fd7c6204..09238566 100755 --- a/apps/monitor/views.py +++ b/apps/monitor/views.py @@ -143,3 +143,4 @@ class DrfRequestLogViewSet(ListModelMixin, CustomGenericViewSet): list_serializer_class = DrfRequestLogSerializer ordering = ['-requested_at'] filterset_class = DrfLogFilterSet + search_fields = ['path', 'view'] diff --git a/apps/opm/migrations/0007_auto_20221015_2353.py b/apps/opm/migrations/0007_auto_20221015_2353.py new file mode 100644 index 00000000..8f4c4512 --- /dev/null +++ b/apps/opm/migrations/0007_auto_20221015_2353.py @@ -0,0 +1,22 @@ +# Generated by Django 3.2.12 on 2022-10-15 15:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('opm', '0006_opl_work_scope'), + ] + + operations = [ + migrations.RemoveField( + model_name='opl', + name='mtask', + ), + migrations.AddField( + model_name='opl', + name='mtask_uid', + field=models.CharField(blank=True, max_length=100, null=True, verbose_name='监控任务ID'), + ), + ] diff --git a/apps/opm/models.py b/apps/opm/models.py index 11aa9710..67e0f807 100644 --- a/apps/opm/models.py +++ b/apps/opm/models.py @@ -118,7 +118,7 @@ class Opl(CommonBDModel): ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单', on_delete=models.SET_NULL, null=True, blank=True) - mtask = models.ForeignKey('django_celery_results.taskresult', on_delete=models.SET_NULL, null=True, blank=True) + mtask_uid = models.CharField('监控任务ID', max_length=100, null=True, blank=True) class OplWorker(BaseModel): diff --git a/apps/opm/serializers.py b/apps/opm/serializers.py index 1d2604a5..21c0db7d 100644 --- a/apps/opm/serializers.py +++ b/apps/opm/serializers.py @@ -214,7 +214,6 @@ class OplListSerializer(CustomModelSerializer): charger_ = UserSimpleSerializer(source='charger', read_only=True) monitor_ = UserSimpleSerializer(source='monitor', read_only=True) ticket_ = TicketSerializer(source='ticket', read_only=True) - mtask_status = serializers.CharField(source='mtask.status', read_only=True) class Meta: model = Opl @@ -237,7 +236,6 @@ class OplDetailSerializer(CustomModelSerializer): close_dos_ = serializers.SerializerMethodField() create_imgs_ = FileSerializer(source='create_imgs', many=True) close_imgs_ = FileSerializer(source='close_imgs', many=True) - mtask_status = serializers.CharField(source='mtask.status', read_only=True) class Meta: model = Opl diff --git a/apps/opm/services.py b/apps/opm/services.py index 55123507..352584e8 100644 --- a/apps/opm/services.py +++ b/apps/opm/services.py @@ -64,12 +64,9 @@ def bind_opl(ticket: Ticket, transition: Transition, new_ticket_data: dict): def t_submit_close_mtask(ticket: Ticket, transition: Transition, new_ticket_data: dict): # 提交作业关闭时关闭作业监控 opl = Opl.objects.filter(ticket=ticket).first() - mtask = opl.mtask - if opl and mtask: - close_mtask(mtask.task_id) + if opl and opl.mtask_uid: + close_mtask(opl.mtask_uid) # 防止没变化,手动处理一下 - mtask.status = 'REVOKED' - mtask.save() def opl_audit_end(ticket: Ticket): @@ -107,18 +104,17 @@ def opl_start(ticket: Ticket): def start_mtask(opl: Opl): op = opl.operation - mtask_id = None + mtask_uid = None vc_codes = [] # 找到作业点的摄像头, 如果指定摄像头就用指定的摄像头 if op.vchannels: vc_codes = list(op.vchannels.all().values_list('code', flat=True)) opl_id = opl.id task = opl_task.delay(vc_codes, opl_id) - time.sleep(3) - mtask_id = task.id - opl.mtask = TaskResult.objects.get(task_id=mtask_id) + mtask_uid = task.id + opl.mtask_uid = mtask_uid opl.save() - return dict(vc_codes=vc_codes, mtask_id=mtask_id) + return dict(vc_codes=vc_codes, mtask_uid=mtask_uid) def close_mtask(task_id: str): @@ -135,9 +131,9 @@ def opl_end(ticket: Ticket): 作业许可证关闭时执行 """ opl = ticket.opl - if opl.mtask: + if opl.mtask_uid: # 关闭作业视频监控任务 - close_mtask(opl.mtask.task_id) + close_mtask(opl.mtask_uid) operation = opl.operation opls = Opl.objects.filter(operation=operation) opls.filter(ticket=None).delete() # 删除无用许可证 diff --git a/apps/opm/views.py b/apps/opm/views.py index 4dbe4524..f438b8e9 100644 --- a/apps/opm/views.py +++ b/apps/opm/views.py @@ -105,9 +105,9 @@ class OplViewSet(CustomModelViewSet): 开启作业监控 """ obj = self.get_object() - if obj.mtask: + if obj.mtask_uid: # 先关闭 - close_mtask(obj.mtask.task_id) + close_mtask(obj.mtask_uid) res = start_mtask(obj) return Response(res) @@ -120,12 +120,9 @@ class OplViewSet(CustomModelViewSet): 停止作业监控 """ obj = self.get_object() - mtask = obj.mtask - if obj.mtask: - close_mtask(mtask.task_id) + if obj.mtask_uid: + close_mtask(obj.mtask_uid) # 防止没变化,手动处理一下 - mtask.status = 'REVOKED' - mtask.save() return Response()