opl mtask_uid

This commit is contained in:
曹前明 2022-10-15 23:53:45 +08:00
parent b129355aec
commit 831167f1f9
8 changed files with 46 additions and 25 deletions

View File

@ -70,7 +70,7 @@ def check_event_timeout():
""" """
for i in Event.objects.filter(handle_user=None, is_timeout=False): for i in Event.objects.filter(handle_user=None, is_timeout=False):
cate = i.cates.all().order_by('priority', 'create_time').first() 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.is_timeout = True
i.save() 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)) algo_codes = list(EventCate.objects.filter(opl_cates=opl_cate).values_list('code', flat=True))
vchannels = TDevice.objects.filter(code__in=vc_codes) vchannels = TDevice.objects.filter(code__in=vc_codes)
opl = Opl.objects.get(id=opl_id) 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: for i in vchannels:
Thread(target=snap_and_analyse, args=(i, algo_codes, opl)).start() Thread(target=snap_and_analyse, args=(i, algo_codes, opl)).start()
time.sleep(10) time.sleep(10)
opl.mtask_uid = None
opl.save()

View File

@ -1,7 +1,12 @@
from django_filters import rest_framework as filters from django_filters import rest_framework as filters
from apps.monitor.models import DrfRequestLog
class DrfLogFilterSet(filters.FilterSet): class DrfLogFilterSet(filters.FilterSet):
start_request = filters.DateTimeFilter(field_name="requested_at", lookup_expr='gte') start_request = filters.DateTimeFilter(field_name="requested_at", lookup_expr='gte')
end_request = filters.DateTimeFilter(field_name="requested_at", lookup_expr='lte') 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']

View File

@ -143,3 +143,4 @@ class DrfRequestLogViewSet(ListModelMixin, CustomGenericViewSet):
list_serializer_class = DrfRequestLogSerializer list_serializer_class = DrfRequestLogSerializer
ordering = ['-requested_at'] ordering = ['-requested_at']
filterset_class = DrfLogFilterSet filterset_class = DrfLogFilterSet
search_fields = ['path', 'view']

View File

@ -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'),
),
]

View File

@ -118,7 +118,7 @@ class Opl(CommonBDModel):
ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单', ticket = models.OneToOneField('wf.ticket', verbose_name='关联工单',
on_delete=models.SET_NULL, on_delete=models.SET_NULL,
null=True, blank=True) 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): class OplWorker(BaseModel):

View File

@ -214,7 +214,6 @@ class OplListSerializer(CustomModelSerializer):
charger_ = UserSimpleSerializer(source='charger', read_only=True) charger_ = UserSimpleSerializer(source='charger', read_only=True)
monitor_ = UserSimpleSerializer(source='monitor', read_only=True) monitor_ = UserSimpleSerializer(source='monitor', read_only=True)
ticket_ = TicketSerializer(source='ticket', read_only=True) ticket_ = TicketSerializer(source='ticket', read_only=True)
mtask_status = serializers.CharField(source='mtask.status', read_only=True)
class Meta: class Meta:
model = Opl model = Opl
@ -237,7 +236,6 @@ class OplDetailSerializer(CustomModelSerializer):
close_dos_ = serializers.SerializerMethodField() close_dos_ = serializers.SerializerMethodField()
create_imgs_ = FileSerializer(source='create_imgs', many=True) create_imgs_ = FileSerializer(source='create_imgs', many=True)
close_imgs_ = FileSerializer(source='close_imgs', many=True) close_imgs_ = FileSerializer(source='close_imgs', many=True)
mtask_status = serializers.CharField(source='mtask.status', read_only=True)
class Meta: class Meta:
model = Opl model = Opl

View File

@ -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): def t_submit_close_mtask(ticket: Ticket, transition: Transition, new_ticket_data: dict):
# 提交作业关闭时关闭作业监控 # 提交作业关闭时关闭作业监控
opl = Opl.objects.filter(ticket=ticket).first() opl = Opl.objects.filter(ticket=ticket).first()
mtask = opl.mtask if opl and opl.mtask_uid:
if opl and mtask: close_mtask(opl.mtask_uid)
close_mtask(mtask.task_id)
# 防止没变化,手动处理一下 # 防止没变化,手动处理一下
mtask.status = 'REVOKED'
mtask.save()
def opl_audit_end(ticket: Ticket): def opl_audit_end(ticket: Ticket):
@ -107,18 +104,17 @@ def opl_start(ticket: Ticket):
def start_mtask(opl: Opl): def start_mtask(opl: Opl):
op = opl.operation op = opl.operation
mtask_id = None mtask_uid = None
vc_codes = [] vc_codes = []
# 找到作业点的摄像头, 如果指定摄像头就用指定的摄像头 # 找到作业点的摄像头, 如果指定摄像头就用指定的摄像头
if op.vchannels: if op.vchannels:
vc_codes = list(op.vchannels.all().values_list('code', flat=True)) vc_codes = list(op.vchannels.all().values_list('code', flat=True))
opl_id = opl.id opl_id = opl.id
task = opl_task.delay(vc_codes, opl_id) task = opl_task.delay(vc_codes, opl_id)
time.sleep(3) mtask_uid = task.id
mtask_id = task.id opl.mtask_uid = mtask_uid
opl.mtask = TaskResult.objects.get(task_id=mtask_id)
opl.save() 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): def close_mtask(task_id: str):
@ -135,9 +131,9 @@ def opl_end(ticket: Ticket):
作业许可证关闭时执行 作业许可证关闭时执行
""" """
opl = ticket.opl opl = ticket.opl
if opl.mtask: if opl.mtask_uid:
# 关闭作业视频监控任务 # 关闭作业视频监控任务
close_mtask(opl.mtask.task_id) close_mtask(opl.mtask_uid)
operation = opl.operation operation = opl.operation
opls = Opl.objects.filter(operation=operation) opls = Opl.objects.filter(operation=operation)
opls.filter(ticket=None).delete() # 删除无用许可证 opls.filter(ticket=None).delete() # 删除无用许可证

View File

@ -105,9 +105,9 @@ class OplViewSet(CustomModelViewSet):
开启作业监控 开启作业监控
""" """
obj = self.get_object() 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) res = start_mtask(obj)
return Response(res) return Response(res)
@ -120,12 +120,9 @@ class OplViewSet(CustomModelViewSet):
停止作业监控 停止作业监控
""" """
obj = self.get_object() obj = self.get_object()
mtask = obj.mtask if obj.mtask_uid:
if obj.mtask: close_mtask(obj.mtask_uid)
close_mtask(mtask.task_id)
# 防止没变化,手动处理一下 # 防止没变化,手动处理一下
mtask.status = 'REVOKED'
mtask.save()
return Response() return Response()