fix: 账号备份,云同步定时任务不执行

pull/13398/head
wangruidong 2024-06-07 11:20:09 +08:00 committed by Bryan
parent 2b220d3753
commit 9439035b86
4 changed files with 28 additions and 23 deletions

View File

@ -57,21 +57,22 @@ def register_as_period_task(
task = '{func.__module__}.{func.__name__}'.format(func=func)
_name = name if name else task
add_register_period_task({
_name: {
'task': task,
'interval': interval,
'crontab': crontab,
'args': args,
'kwargs': kwargs if kwargs else {},
'enabled': True,
'description': description
}
_name: {
'task': task,
'interval': interval,
'crontab': crontab,
'args': args,
'kwargs': kwargs if kwargs else {},
'description': description
}
})
@wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
return decorate
@ -85,6 +86,7 @@ def after_app_ready_start(func):
@wraps(func)
def decorate(*args, **kwargs):
return func(*args, **kwargs)
return decorate
@ -98,4 +100,5 @@ def after_app_shutdown_clean_periodic(func):
@wraps(func)
def decorate(*args, **kwargs):
return func(*args, **kwargs)
return decorate

View File

@ -80,6 +80,9 @@ def create_or_update_celery_periodic_tasks(tasks):
description=detail.get('description') or '',
last_run_at=last_run_at,
)
enabled = detail.get('enabled')
if enabled is not None:
defaults["enabled"] = enabled
task = PeriodicTask.objects.update_or_create(
defaults=defaults, name=name,
)

View File

@ -93,7 +93,10 @@ class LDAPSettingSerializer(serializers.Serializer):
AUTH_LDAP = serializers.BooleanField(required=False, label=_('Enable LDAP auth'))
@staticmethod
def post_save():
def post_save(self):
keys = ['AUTH_LDAP_SYNC_IS_PERIODIC', 'AUTH_LDAP_SYNC_INTERVAL', 'AUTH_LDAP_SYNC_CRONTAB']
kwargs = {k: self.validated_data[k] for k in keys if k in self.validated_data}
if not kwargs:
return
from settings.tasks import import_ldap_user_periodic
import_ldap_user_periodic()
import_ldap_user_periodic(**kwargs)

View File

@ -9,7 +9,7 @@ from common.utils import get_logger
from common.utils.timezone import local_now_display
from ops.celery.decorator import after_app_ready_start
from ops.celery.utils import (
create_or_update_celery_periodic_tasks, delete_celery_periodic_task
create_or_update_celery_periodic_tasks, disable_celery_periodic_task
)
from orgs.models import Organization
from settings.notifications import LDAPImportMessage
@ -65,20 +65,15 @@ def import_ldap_user():
@shared_task(verbose_name=_('Registration periodic import ldap user task'))
@after_app_ready_start
def import_ldap_user_periodic():
if not settings.AUTH_LDAP:
return
def import_ldap_user_periodic(**kwargs):
task_name = 'import_ldap_user_periodic'
delete_celery_periodic_task(task_name)
if not settings.AUTH_LDAP_SYNC_IS_PERIODIC:
return
interval = settings.AUTH_LDAP_SYNC_INTERVAL
interval = kwargs.get('AUTH_LDAP_SYNC_INTERVAL', settings.AUTH_LDAP_SYNC_INTERVAL)
enabled = kwargs.get('AUTH_LDAP_SYNC_IS_PERIODIC', settings.AUTH_LDAP_SYNC_IS_PERIODIC)
crontab = kwargs.get('AUTH_LDAP_SYNC_CRONTAB', settings.AUTH_LDAP_SYNC_CRONTAB)
if isinstance(interval, int):
interval = interval * 3600
else:
interval = None
crontab = settings.AUTH_LDAP_SYNC_CRONTAB
if crontab:
# 优先使用 crontab
interval = None
@ -86,7 +81,8 @@ def import_ldap_user_periodic():
task_name: {
'task': import_ldap_user.name,
'interval': interval,
'crontab': crontab
'crontab': crontab,
'enabled': enabled
}
}
create_or_update_celery_periodic_tasks(tasks)