diff --git a/apps/ecm/migrations/0014_eventcate_unhandled_push_interval.py b/apps/ecm/migrations/0014_eventcate_unhandled_push_interval.py new file mode 100644 index 00000000..e4b7e3fa --- /dev/null +++ b/apps/ecm/migrations/0014_eventcate_unhandled_push_interval.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2023-09-06 01:21 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('ecm', '0013_auto_20230905_1729'), + ] + + operations = [ + migrations.AddField( + model_name='eventcate', + name='unhandled_push_interval', + field=models.PositiveIntegerField(default=3600, verbose_name='未处理事件的推送间隔(秒)'), + ), + ] diff --git a/apps/ecm/models.py b/apps/ecm/models.py index 4d87bd4e..092aae0a 100644 --- a/apps/ecm/models.py +++ b/apps/ecm/models.py @@ -40,6 +40,7 @@ class EventCate(CommonAModel): same_allow_minute = models.PositiveSmallIntegerField('允许时间', default=0, help_text='同一对象同事件多长时间内不再触发, 0代表一直触发') opl_cates = models.ManyToManyField(OplCate, verbose_name='关联许可证', blank=True) is_auto_escalate = models.BooleanField('是否自动升级', default=False) + unhandled_push_interval = models.PositiveIntegerField('未处理事件的推送间隔(秒)', default=3600) def __str__(self): return self.name diff --git a/apps/ecm/tasks.py b/apps/ecm/tasks.py index 6190f7ac..6e000f4f 100644 --- a/apps/ecm/tasks.py +++ b/apps/ecm/tasks.py @@ -202,13 +202,18 @@ def remind_push(remindId: str): @shared_task(base=CustomTask) def event_push(eventId: str): - event = Event.objects.get(id=eventId) - channel_layer = get_channel_layer() - data = { - 'type': 'event', - 'event': EventSerializer(instance=event).data, - 'msg': '' - } - async_to_sync(channel_layer.group_send)('event', data) - event.last_ws_pushtime = timezone.now() - event.save() \ No newline at end of file + if event.handle_time is None: + now = timezone.now() + event = Event.objects.get(id=eventId) + channel_layer = get_channel_layer() + data = { + 'type': 'event', + 'event': EventSerializer(instance=event).data, + 'msg': '' + } + async_to_sync(channel_layer.group_send)('event', data) + event.last_ws_pushtime = timezone.now() + event.save() + main_cate = event.cates.all().order_by('priority', 'create_time').first() + unhandled_push_interval = main_cate.unhandled_push_interval + event_push.apply_async(eta=now + timedelta(seconds=unhandled_push_interval)) \ No newline at end of file