perf: 优化 ops 任务,支持 i18n

- 内置任务名称支持了 i18n,数据库存英文,返回是翻译一下
- 任务执行中,添加 language 上下文
This commit is contained in:
ibuler
2022-01-13 14:18:32 +08:00
committed by Jiangjie.Bai
parent 43c4c78378
commit 145c7952c9
14 changed files with 127 additions and 88 deletions

View File

@@ -13,5 +13,6 @@ class OpsConfig(AppConfig):
from orgs.utils import set_current_org
set_current_org(Organization.root())
from .celery import signal_handler
from . import signals_handler
from . import notifications
super().ready()

View File

@@ -9,7 +9,7 @@ from celery import current_task
from django.db import models
from django.conf import settings
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ugettext_lazy as _, gettext
from common.utils import get_logger, lazyproperty
from common.fields.model import (
@@ -58,6 +58,17 @@ class Task(PeriodTaskModelMixin, OrgModelMixin):
else:
return False
@lazyproperty
def display_name(self):
sps = ['. ', ': ']
spb = {str(sp in self.name): sp for sp in sps}
sp = spb.get('True')
if not sp:
return self.name
tpl, data = self.name.split(sp, 1)
return gettext(tpl + sp) + data
@property
def timedelta(self):
if self.latest_execution:

View File

@@ -56,7 +56,7 @@ class TaskSerializer(BulkOrgResourceModelSerializer):
class Meta:
model = Task
fields_mini = ['id', 'name']
fields_mini = ['id', 'name', 'display_name']
fields_small = fields_mini + [
'interval', 'crontab',
'is_periodic', 'is_deleted',

View File

@@ -0,0 +1,23 @@
from django.utils import translation
from django.core.cache import cache
from celery.signals import task_prerun, before_task_publish
TASK_LANG_CACHE_KEY = 'TASK_LANG_{}'
TASK_LANG_CACHE_TTL = 1800
@before_task_publish.connect()
def before_task_publish(headers=None, **kwargs):
task_id = headers.get('id')
current_lang = translation.get_language()
key = TASK_LANG_CACHE_KEY.format(task_id)
cache.set(key, current_lang, 1800)
@task_prerun.connect()
def on_celery_task_pre_run(task_id='', **kwargs):
key = TASK_LANG_CACHE_KEY.format(task_id)
task_lang = cache.get(key)
if task_lang:
translation.activate(task_lang)

View File

@@ -5,9 +5,10 @@ import time
from django.conf import settings
from celery import shared_task, subtask
from celery.exceptions import SoftTimeLimitExceeded
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ugettext_lazy as _, gettext
from common.utils import get_logger, get_object_or_none, get_log_keep_day
from orgs.utils import tmp_to_root_org, tmp_to_org
@@ -141,10 +142,10 @@ def hello(name, callback=None):
import time
count = User.objects.count()
print("Hello {}".format(name))
print(gettext("Hello") + ': ' + name)
print("Count: ", count)
time.sleep(1)
return count
return gettext("Hello")
@shared_task
@@ -177,3 +178,4 @@ def add_m(x):
s.append(add.s(i))
res = chain(*tuple(s))()
return res