clean_debug_file_job.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. # coding=utf-8
  2. from datetime import timedelta
  3. from django.db.models import Q
  4. from django.utils import timezone
  5. from common.job.scheduler import scheduler
  6. from common.utils.lock import lock, RedisLock
  7. from common.utils.logger import maxkb_logger
  8. from knowledge.models import File, FileSourceType
  9. def clean_debug_file():
  10. clean_debug_file_lock()
  11. @lock(lock_key='clean_debug_file_execute', timeout=30)
  12. def clean_debug_file_lock():
  13. from django.utils.translation import gettext_lazy as _
  14. maxkb_logger.debug(_('start clean debug file'))
  15. minutes_30_ago = timezone.now() - timedelta(minutes=30)
  16. two_hours_ago = timezone.now() - timedelta(hours=2)
  17. one_days_ago = timezone.now() - timedelta(hours=24)
  18. # 删除对应的文件
  19. File.objects.filter(
  20. Q(create_time__lt=one_days_ago, source_type=FileSourceType.TEMPORARY_1_DAY.value) |
  21. Q(create_time__lt=two_hours_ago, source_type=FileSourceType.TEMPORARY_120_MINUTE.value) |
  22. Q(create_time__lt=minutes_30_ago, source_type=FileSourceType.TEMPORARY_30_MINUTE.value)
  23. ).delete()
  24. maxkb_logger.debug(_('end clean debug file'))
  25. def run():
  26. rlock = RedisLock()
  27. if rlock.try_lock('clean_debug_file', 30 * 30):
  28. try:
  29. maxkb_logger.debug('get lock clean_debug_file')
  30. clean_debug_file_job = scheduler.get_job(job_id='clean_debug_file')
  31. if clean_debug_file_job is not None:
  32. clean_debug_file_job.remove()
  33. scheduler.add_job(clean_debug_file, 'cron', hour='*', minute='*/30', second='0', id='clean_debug_file')
  34. finally:
  35. rlock.un_lock('clean_debug_file')