From df9245a5a4f3e0b3a908dad2c706db856a24be9e Mon Sep 17 00:00:00 2001 From: shaohuzhang1 <80892890+shaohuzhang1@users.noreply.github.com> Date: Tue, 15 Jul 2025 18:35:00 +0800 Subject: [PATCH] feat: Access num reset job (#3614) --- apps/common/job/__init__.py | 5 +-- apps/common/job/client_access_num_job.py | 45 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 apps/common/job/client_access_num_job.py 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')