diff --git a/arkid/core/apps.py b/arkid/core/apps.py index d56ca43c0..5803ac94a 100644 --- a/arkid/core/apps.py +++ b/arkid/core/apps.py @@ -21,5 +21,3 @@ def ready(self): pass # 监听 from arkid.core import listener - from arkid.core.event import Event, dispatch_event, APP_START - # dispatch_event(Event(tag=APP_START, tenant=tenant)) diff --git a/arkid/core/tasks/tasks.py b/arkid/core/tasks/tasks.py index 4d4f0e32a..1b6a31049 100644 --- a/arkid/core/tasks/tasks.py +++ b/arkid/core/tasks/tasks.py @@ -1,5 +1,14 @@ +import os, django +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'arkid.settings') +django.setup() - +from arkid.extension.models import TenantExtensionConfig, Extension +from arkid.core.models import SystemPermission +from arkid.core.openapi import get_permissions +from arkid.core.event import Event, dispatch_event, APP_START +from arkid.core.models import Tenant +from arkid.core.api import api +from django.db.models import Q from arkid.config import get_app_config from arkid.common.logger import logger from types import SimpleNamespace @@ -10,10 +19,7 @@ @shared_task(bind=True) def sync(self, config_id, *args, **kwargs): - import os, django - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'arkid.settings') - django.setup() - from arkid.extension.models import TenantExtensionConfig, Extension + try: logger.info("=== arkid.core.tasks.sync start...===") logger.info(f"config_id: {config_id}") @@ -37,14 +43,6 @@ def sync(self, config_id, *args, **kwargs): @app.task def update_system_permission(): - import os, django - os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'arkid.settings') - django.setup() - from arkid.core.models import SystemPermission - from arkid.core.openapi import get_permissions - from arkid.core.api import api - from django.db.models import Q - permissions_data = get_permissions(api) group_data = [] api_data = [] @@ -148,4 +146,22 @@ def update_system_permission(): tenant=None, is_system=True, is_update=False - ).delete() \ No newline at end of file + ).delete() + +class ReadySingleton(object): + def __init__(self, *args, **kwargs): + pass + + @classmethod + def get_instance(cls, *args, **kwargs): + if not hasattr(ReadySingleton, '_instance' ): + ReadySingleton._instance = ReadySingleton(*args, **kwargs) + # 只有celery第一次被启动时才会调用 + tenant = Tenant.valid_objects.filter( + slug='', + name="platform tenant", + ).first() + dispatch_event(Event(tag=APP_START, tenant=tenant)) + return ReadySingleton._instance + +ReadySingleton.get_instance() \ No newline at end of file