diff --git a/apps/common/job/__init__.py b/apps/common/job/__init__.py index 33581f35c..4984886b4 100644 --- a/apps/common/job/__init__.py +++ b/apps/common/job/__init__.py @@ -6,12 +6,13 @@ @date:2024/3/14 11:54 @desc: """ -#from .client_access_num_job import * from .clean_chat_job import * from .clean_debug_file_job import * +from .client_access_num_job import * def run(): - #client_access_num_job.run() + # client_access_num_job.run() clean_chat_job.run() clean_debug_file_job.run() + client_access_num_job.run() diff --git a/apps/common/job/client_access_num_job.py b/apps/common/job/client_access_num_job.py new file mode 100644 index 000000000..cd86b7827 --- /dev/null +++ b/apps/common/job/client_access_num_job.py @@ -0,0 +1,45 @@ +# coding=utf-8 +""" + @project: maxkb + @Author:虎 + @file: client_access_num_job.py + @date:2024/3/14 11:56 + @desc: +""" +import logging + +from apscheduler.schedulers.background import BackgroundScheduler +from django.db.models import QuerySet +from django_apscheduler.jobstores import DjangoJobStore + +from application.models import ApplicationChatUserStats +from common.utils.lock import try_lock, un_lock, lock +from common.utils.logger import maxkb_logger + +scheduler = BackgroundScheduler() +scheduler.add_jobstore(DjangoJobStore(), "default") + + +def client_access_num_reset_job(): + client_access_num_reset_job_lock() + + +@lock(lock_key="access_num_reset", timeout=30) +def client_access_num_reset_job_lock(): + from django.utils.translation import gettext_lazy as _ + maxkb_logger.info(_('start reset access_num')) + QuerySet(ApplicationChatUserStats).update(intraday_access_num=0) + maxkb_logger.info(_('end reset access_num')) + + +def run(): + if try_lock('access_num_reset', 30): + try: + scheduler.start() + access_num_reset = scheduler.get_job(job_id='access_num_reset') + if access_num_reset is not None: + access_num_reset.remove() + scheduler.add_job(client_access_num_reset_job, 'cron', hour='0', minute='0', second='0', + id='access_num_reset') + finally: + un_lock('access_num_reset')