|
1 | 1 | # coding=utf-8 |
| 2 | +from celery_once import QueueOnce |
2 | 3 | from django.db.models import QuerySet |
3 | 4 |
|
| 5 | +from common.utils.lock import RedisLock |
4 | 6 | from common.utils.logger import maxkb_logger |
5 | 7 | from ops import celery_app |
6 | 8 | from trigger.handler.base_trigger import BaseTrigger |
@@ -239,17 +241,22 @@ def execute(trigger, **kwargs): |
239 | 241 | maxkb_logger.warning(f"unsupported task={trigger_task}") |
240 | 242 | return |
241 | 243 | source_type = trigger_task["source_type"] |
242 | | - |
243 | | - if source_type == "APPLICATION": |
244 | | - from trigger.handler.impl.task.application_task import ApplicationTask |
245 | | - |
246 | | - ApplicationTask().execute(trigger_task, **kwargs) |
247 | | - elif source_type == "TOOL": |
248 | | - from trigger.handler.impl.task.tool_task import ToolTask |
249 | | - |
250 | | - ToolTask().execute(trigger_task, **kwargs) |
251 | | - else: |
252 | | - maxkb_logger.warning(f"unsupported source_type={source_type}, task_id={trigger_task['id']}") |
| 244 | + rlock = RedisLock() |
| 245 | + source_id = str(trigger_task["source_id"]) |
| 246 | + if rlock.try_lock(source_id, 30 * 30): |
| 247 | + try: |
| 248 | + if source_type == "APPLICATION": |
| 249 | + from trigger.handler.impl.task.application_task import ApplicationTask |
| 250 | + |
| 251 | + ApplicationTask().execute(trigger_task, **kwargs) |
| 252 | + elif source_type == "TOOL": |
| 253 | + from trigger.handler.impl.task.tool_task import ToolTask |
| 254 | + |
| 255 | + ToolTask().execute(trigger_task, **kwargs) |
| 256 | + else: |
| 257 | + maxkb_logger.warning(f"unsupported source_type={source_type}, task_id={trigger_task['id']}") |
| 258 | + finally: |
| 259 | + rlock.un_lock(source_id) |
253 | 260 |
|
254 | 261 | def support(self, trigger, **kwargs): |
255 | 262 | return trigger.get("trigger_type") == "SCHEDULED" |
|
0 commit comments