maxkb/apps/common/job/clean_orphaned_file_job.py
2024-11-12 13:29:40 +08:00

41 lines
1.4 KiB
Python

# coding=utf-8
import logging
from apscheduler.schedulers.background import BackgroundScheduler
from django.db.models import Q
from django_apscheduler.jobstores import DjangoJobStore
from application.models import Chat
from common.lock.impl.file_lock import FileLock
from dataset.models import File
scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(), "default")
lock = FileLock()
def clean_debug_file():
logging.getLogger("max_kb").info('开始清理没有关联会话的上传文件')
existing_chat_ids = set(Chat.objects.values_list('id', flat=True))
# UUID to str
existing_chat_ids = [str(chat_id) for chat_id in existing_chat_ids]
print(existing_chat_ids)
# 查找引用的不存在的 chat_id 并删除相关记录
deleted_count, _ = File.objects.filter(~Q(meta__chat_id__in=existing_chat_ids)).delete()
logging.getLogger("max_kb").info(f'结束清理没有关联会话的上传文件: {deleted_count}')
def run():
if lock.try_lock('clean_orphaned_file_job', 30 * 30):
try:
scheduler.start()
clean_orphaned_file = scheduler.get_job(job_id='clean_orphaned_file')
if clean_orphaned_file is not None:
clean_orphaned_file.remove()
scheduler.add_job(clean_debug_file, 'cron', hour='2', minute='0', second='0',
id='clean_orphaned_file')
finally:
lock.un_lock('clean_orphaned_file_job')