maxkb/apps/common/job/clean_debug_file_job.py

48 lines
1.7 KiB
Python

# coding=utf-8
import time
from datetime import timedelta
from apscheduler.schedulers.background import BackgroundScheduler
from django.db.models import Q
from django.utils import timezone
from django_apscheduler.jobstores import DjangoJobStore
from common.utils.lock import un_lock, try_lock, lock
from common.utils.logger import maxkb_logger
from knowledge.models import File, FileSourceType
scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")
def clean_debug_file():
clean_debug_file_lock()
@lock(lock_key='clean_debug_file_execute', timeout=30)
def clean_debug_file_lock():
from django.utils.translation import gettext_lazy as _
maxkb_logger.debug(_('start clean debug file'))
minutes_30_ago = timezone.now() - timedelta(minutes=30)
two_hours_ago = timezone.now() - timedelta(hours=2)
one_days_ago = timezone.now() - timedelta(hours=24)
# 删除对应的文件
File.objects.filter(
Q(create_time__lt=one_days_ago, source_type=FileSourceType.TEMPORARY_1_DAY.value) |
Q(create_time__lt=two_hours_ago, source_type=FileSourceType.TEMPORARY_120_MINUTE.value) |
Q(create_time__lt=minutes_30_ago, source_type=FileSourceType.TEMPORARY_30_MINUTE.value)).delete()
maxkb_logger.debug(_('end clean debug file'))
time.sleep(2)
def run():
if try_lock('clean_debug_file', 30 * 30):
try:
scheduler.start()
clean_debug_file_job = scheduler.get_job(job_id='clean_debug_file')
if clean_debug_file_job is not None:
clean_debug_file_job.remove()
scheduler.add_job(clean_debug_file, 'cron', hour='*', minute='*/30', second='0', id='clean_debug_file')
finally:
un_lock('clean_debug_file')