perf: 优化 ops 任务,支持 i18n

- 内置任务名称支持了 i18n,数据库存英文,返回是翻译一下
- 任务执行中,添加 language 上下文
pull/7496/head
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

@ -1,7 +1,7 @@
# ~*~ coding: utf-8 ~*~ # ~*~ coding: utf-8 ~*~
from celery import shared_task from celery import shared_task
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _, gettext_noop
from common.utils import get_logger from common.utils import get_logger
from orgs.utils import org_aware_func from orgs.utils import org_aware_func
@ -104,6 +104,6 @@ def test_accounts_connectivity_manual(accounts):
:param accounts: <AuthBook>对象 :param accounts: <AuthBook>对象
""" """
for account in accounts: for account in accounts:
task_name = _("Test account connectivity: {}").format(account) task_name = gettext_noop("Test account connectivity: ") + str(account)
test_account_connectivity_util(account, task_name) test_account_connectivity_util(account, task_name)
print(".\n") print(".\n")

View File

@ -2,7 +2,7 @@
from itertools import groupby from itertools import groupby
from collections import defaultdict from collections import defaultdict
from celery import shared_task from celery import shared_task
from django.utils.translation import ugettext as _ from django.utils.translation import gettext_noop
from common.utils import get_logger from common.utils import get_logger
from orgs.utils import org_aware_func from orgs.utils import org_aware_func
@ -46,7 +46,7 @@ def test_asset_connectivity_util(assets, task_name=None):
from ops.utils import update_or_create_ansible_task from ops.utils import update_or_create_ansible_task
if task_name is None: if task_name is None:
task_name = _("Test assets connectivity") task_name = gettext_noop("Test assets connectivity. ")
hosts = clean_ansible_task_hosts(assets) hosts = clean_ansible_task_hosts(assets)
if not hosts: if not hosts:
@ -88,7 +88,7 @@ def test_asset_connectivity_util(assets, task_name=None):
@shared_task(queue="ansible") @shared_task(queue="ansible")
def test_asset_connectivity_manual(asset): def test_asset_connectivity_manual(asset):
task_name = _("Test assets connectivity: {}").format(asset) task_name = gettext_noop("Test assets connectivity: ") + str(asset)
summary = test_asset_connectivity_util([asset], task_name=task_name) summary = test_asset_connectivity_util([asset], task_name=task_name)
if summary.get('dark'): if summary.get('dark'):
@ -99,7 +99,7 @@ def test_asset_connectivity_manual(asset):
@shared_task(queue="ansible") @shared_task(queue="ansible")
def test_assets_connectivity_manual(assets): def test_assets_connectivity_manual(assets):
task_name = _("Test assets connectivity: {}").format([asset.hostname for asset in assets]) task_name = gettext_noop("Test assets connectivity: ") + str([asset.hostname for asset in assets])
summary = test_asset_connectivity_util(assets, task_name=task_name) summary = test_asset_connectivity_util(assets, task_name=task_name)
if summary.get('dark'): if summary.get('dark'):
@ -110,8 +110,7 @@ def test_assets_connectivity_manual(assets):
@shared_task(queue="ansible") @shared_task(queue="ansible")
def test_node_assets_connectivity_manual(node): def test_node_assets_connectivity_manual(node):
task_name = _("Test if the assets under the node are connectable: {}".format(node.name)) task_name = gettext_noop("Test if the assets under the node are connectable: ") + node.name
assets = node.get_all_assets() assets = node.get_all_assets()
result = test_asset_connectivity_util(assets, task_name=task_name) result = test_asset_connectivity_util(assets, task_name=task_name)
return result return result

View File

@ -4,7 +4,7 @@ import json
import re import re
from celery import shared_task from celery import shared_task
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _, gettext_noop
from common.utils import ( from common.utils import (
capacity_convert, sum_capacity, get_logger capacity_convert, sum_capacity, get_logger
@ -94,7 +94,7 @@ def update_assets_hardware_info_util(assets, task_name=None):
""" """
from ops.utils import update_or_create_ansible_task from ops.utils import update_or_create_ansible_task
if task_name is None: if task_name is None:
task_name = _("Update some assets hardware info") task_name = gettext_noop("Update some assets hardware info. ")
tasks = const.UPDATE_ASSETS_HARDWARE_TASKS tasks = const.UPDATE_ASSETS_HARDWARE_TASKS
hosts = clean_ansible_task_hosts(assets) hosts = clean_ansible_task_hosts(assets)
if not hosts: if not hosts:
@ -111,13 +111,13 @@ def update_assets_hardware_info_util(assets, task_name=None):
@shared_task(queue="ansible") @shared_task(queue="ansible")
def update_asset_hardware_info_manual(asset): def update_asset_hardware_info_manual(asset):
task_name = _("Update asset hardware info: {}").format(asset.hostname) task_name = gettext_noop("Update asset hardware info: ") + str(asset.hostname)
update_assets_hardware_info_util([asset], task_name=task_name) update_assets_hardware_info_util([asset], task_name=task_name)
@shared_task(queue="ansible") @shared_task(queue="ansible")
def update_assets_hardware_info_manual(assets): def update_assets_hardware_info_manual(assets):
task_name = _("Update assets hardware info: {}").format([asset.hostname for asset in assets]) task_name = gettext_noop("Update assets hardware info: ") + str([asset.hostname for asset in assets])
update_assets_hardware_info_util(assets, task_name=task_name) update_assets_hardware_info_util(assets, task_name=task_name)
@ -134,7 +134,7 @@ def update_assets_hardware_info_period():
@shared_task(queue="ansible") @shared_task(queue="ansible")
def update_node_assets_hardware_info_manual(node): def update_node_assets_hardware_info_manual(node):
task_name = _("Update node asset hardware information: {}").format(node.name) task_name = gettext_noop("Update node asset hardware information: ") + str(node.name)
assets = node.get_all_assets() assets = node.get_all_assets()
result = update_assets_hardware_info_util(assets, task_name=task_name) result = update_assets_hardware_info_util(assets, task_name=task_name)
return result return result

View File

@ -4,7 +4,7 @@ import re
from collections import defaultdict from collections import defaultdict
from celery import shared_task from celery import shared_task
from django.utils.translation import ugettext as _ from django.utils.translation import gettext_noop
from django.utils import timezone from django.utils import timezone
from orgs.utils import tmp_to_org, org_aware_func from orgs.utils import tmp_to_org, org_aware_func
@ -108,7 +108,7 @@ def add_asset_users(assets, results):
def gather_asset_users(assets, task_name=None): def gather_asset_users(assets, task_name=None):
from ops.utils import update_or_create_ansible_task from ops.utils import update_or_create_ansible_task
if task_name is None: if task_name is None:
task_name = _("Gather assets users") task_name = gettext_noop("Gather assets users")
assets = clean_ansible_task_hosts(assets) assets = clean_ansible_task_hosts(assets)
if not assets: if not assets:
return return

View File

@ -3,7 +3,7 @@
from itertools import groupby from itertools import groupby
from celery import shared_task from celery import shared_task
from common.db.utils import get_object_if_need, get_objects from common.db.utils import get_object_if_need, get_objects
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _, gettext_noop
from django.db.models import Empty, Q from django.db.models import Empty, Q
from common.utils import encrypt_password, get_logger from common.utils import encrypt_password, get_logger
@ -279,7 +279,7 @@ def push_system_user_to_assets_manual(system_user, username=None):
""" """
system_user = get_object_if_need(SystemUser, system_user) system_user = get_object_if_need(SystemUser, system_user)
assets = system_user.get_related_assets() assets = system_user.get_related_assets()
task_name = _("Push system users to assets: {}").format(system_user.name) task_name = gettext_noop("Push system users to assets: ") + system_user.name
return push_system_user_util(system_user, assets, task_name=task_name, username=username) return push_system_user_util(system_user, assets, task_name=task_name, username=username)
@ -291,7 +291,7 @@ def push_system_user_a_asset_manual(system_user, asset, username=None):
""" """
# if username is None: # if username is None:
# username = system_user.username # username = system_user.username
task_name = _("Push system users to asset: {}({}) => {}").format( task_name = gettext_noop("Push system users to asset: ") + "{}({}) => {}".format(
system_user.name, username, asset system_user.name, username, asset
) )
return push_system_user_util(system_user, [asset], task_name=task_name, username=username) return push_system_user_util(system_user, [asset], task_name=task_name, username=username)
@ -312,7 +312,7 @@ def push_system_user_to_assets(system_user_id, asset_ids, username=None):
""" """
system_user = SystemUser.objects.get(id=system_user_id) system_user = SystemUser.objects.get(id=system_user_id)
assets = get_objects(Asset, asset_ids) assets = get_objects(Asset, asset_ids)
task_name = _("Push system users to assets: {}").format(system_user.name) task_name = gettext_noop("Push system users to assets: ") + system_user.name
return push_system_user_util(system_user, assets, task_name, username=username) return push_system_user_util(system_user, assets, task_name, username=username)

View File

@ -3,7 +3,7 @@ from itertools import groupby
from collections import defaultdict from collections import defaultdict
from celery import shared_task from celery import shared_task
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _, gettext_noop
from assets.models import Asset from assets.models import Asset
from common.utils import get_logger from common.utils import get_logger
@ -115,7 +115,7 @@ def test_system_user_connectivity_util(system_user, assets, task_name):
@shared_task(queue="ansible") @shared_task(queue="ansible")
@org_aware_func("system_user") @org_aware_func("system_user")
def test_system_user_connectivity_manual(system_user, asset_ids=None): def test_system_user_connectivity_manual(system_user, asset_ids=None):
task_name = _("Test system user connectivity: {}").format(system_user) task_name = gettext_noop("Test system user connectivity: ") + str(system_user)
if asset_ids: if asset_ids:
assets = Asset.objects.filter(id__in=asset_ids) assets = Asset.objects.filter(id__in=asset_ids)
else: else:
@ -126,7 +126,7 @@ def test_system_user_connectivity_manual(system_user, asset_ids=None):
@shared_task(queue="ansible") @shared_task(queue="ansible")
@org_aware_func("system_user") @org_aware_func("system_user")
def test_system_user_connectivity_a_asset(system_user, asset): def test_system_user_connectivity_a_asset(system_user, asset):
task_name = _("Test system user connectivity: {} => {}").format( task_name = gettext_noop("Test system user connectivity: ") + "{} => {}".format(
system_user, asset system_user, asset
) )
test_system_user_connectivity_util(system_user, [asset], task_name) test_system_user_connectivity_util(system_user, [asset], task_name)
@ -145,7 +145,7 @@ def test_system_user_connectivity_period():
return return
queryset_map = SystemUser.objects.all_group_by_org() queryset_map = SystemUser.objects.all_group_by_org()
for org, system_user in queryset_map.items(): for org, system_user in queryset_map.items():
task_name = _("Test system user connectivity period: {}").format(system_user) task_name = gettext_noop("Test system user connectivity period: ") + str(system_user)
with tmp_to_org(org): with tmp_to_org(org):
assets = system_user.get_related_assets() assets = system_user.get_related_assets()
test_system_user_connectivity_util(system_user, assets, task_name) test_system_user_connectivity_util(system_user, assets, task_name)

View File

@ -1,6 +1,6 @@
from django.core.cache import cache from django.core.cache import cache
from django.shortcuts import reverse from django.shortcuts import reverse, redirect
from django.shortcuts import redirect from django.utils.translation import gettext_noop
from .random import random_string from .random import random_string

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:942e981be66e5d0c32efb59583a377503ee3dc285e2794da40c312694c4a9dc2 oid sha256:504b910235e3d0103d9bf2654bb542b7c4cba7ff1836c24fae4587b065c30fa0
size 96378 size 96229

View File

@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n" "Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-01-12 20:51+0800\n" "POT-Creation-Date: 2022-01-13 14:05+0800\n"
"PO-Revision-Date: 2021-05-20 10:54+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n"
"Last-Translator: ibuler <ibuler@qq.com>\n" "Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\n" "Language-Team: JumpServer team<ibuler@qq.com>\n"
@ -166,7 +166,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. "
#: audits/models.py:105 authentication/forms.py:15 authentication/forms.py:17 #: audits/models.py:105 authentication/forms.py:15 authentication/forms.py:17
#: authentication/templates/authentication/_msg_different_city.html:9 #: authentication/templates/authentication/_msg_different_city.html:9
#: authentication/templates/authentication/_msg_oauth_bind.html:9 #: authentication/templates/authentication/_msg_oauth_bind.html:9
#: ops/models/adhoc.py:148 users/forms/profile.py:31 users/models/user.py:547 #: ops/models/adhoc.py:159 users/forms/profile.py:31 users/models/user.py:547
#: users/templates/users/_msg_user_created.html:12 #: users/templates/users/_msg_user_created.html:12
#: users/templates/users/_select_user_modal.html:14 #: users/templates/users/_select_user_modal.html:14
#: xpack/plugins/change_auth_plan/models/asset.py:34 #: xpack/plugins/change_auth_plan/models/asset.py:34
@ -363,7 +363,7 @@ msgid "Cluster"
msgstr "集群" msgstr "集群"
#: applications/serializers/attrs/application_category/db.py:11 #: applications/serializers/attrs/application_category/db.py:11
#: ops/models/adhoc.py:146 settings/serializers/auth/radius.py:14 #: ops/models/adhoc.py:157 settings/serializers/auth/radius.py:14
#: xpack/plugins/cloud/serializers/account_attrs.py:68 #: xpack/plugins/cloud/serializers/account_attrs.py:68
msgid "Host" msgid "Host"
msgstr "主机" msgstr "主机"
@ -621,7 +621,7 @@ msgstr "开始日期"
#: assets/models/backup.py:108 #: assets/models/backup.py:108
#: authentication/templates/authentication/_msg_oauth_bind.html:11 #: authentication/templates/authentication/_msg_oauth_bind.html:11
#: notifications/notifications.py:187 ops/models/adhoc.py:246 #: notifications/notifications.py:187 ops/models/adhoc.py:257
#: xpack/plugins/change_auth_plan/models/base.py:112 #: xpack/plugins/change_auth_plan/models/base.py:112
#: xpack/plugins/change_auth_plan/models/base.py:201 #: xpack/plugins/change_auth_plan/models/base.py:201
#: xpack/plugins/gathered_user/models.py:79 #: xpack/plugins/gathered_user/models.py:79
@ -646,7 +646,7 @@ msgid "Reason"
msgstr "原因" msgstr "原因"
#: assets/models/backup.py:121 audits/serializers.py:76 #: assets/models/backup.py:121 audits/serializers.py:76
#: audits/serializers.py:91 ops/models/adhoc.py:248 #: audits/serializers.py:91 ops/models/adhoc.py:259
#: terminal/serializers/session.py:35 #: terminal/serializers/session.py:35
#: xpack/plugins/change_auth_plan/models/base.py:199 #: xpack/plugins/change_auth_plan/models/base.py:199
msgid "Is success" msgid "Is success"
@ -1136,20 +1136,20 @@ msgid "The asset {} system platform {} does not support run Ansible tasks"
msgstr "资产 {} 系统平台 {} 不支持运行 Ansible 任务" msgstr "资产 {} 系统平台 {} 不支持运行 Ansible 任务"
#: assets/tasks/account_connectivity.py:107 #: assets/tasks/account_connectivity.py:107
msgid "Test account connectivity: {}" msgid "Test account connectivity: "
msgstr "测试账号可连接性: {}" msgstr "测试账号可连接性: "
#: assets/tasks/asset_connectivity.py:49 #: assets/tasks/asset_connectivity.py:49
msgid "Test assets connectivity" msgid "Test assets connectivity. "
msgstr "测试资产可连接性" msgstr "测试资产可连接性. "
#: assets/tasks/asset_connectivity.py:91 assets/tasks/asset_connectivity.py:102 #: assets/tasks/asset_connectivity.py:91 assets/tasks/asset_connectivity.py:102
msgid "Test assets connectivity: {}" msgid "Test assets connectivity: "
msgstr "测试资产可连接性: {}" msgstr "测试资产可连接性: "
#: assets/tasks/asset_connectivity.py:113 #: assets/tasks/asset_connectivity.py:113
msgid "Test if the assets under the node are connectable: {}" msgid "Test if the assets under the node are connectable: "
msgstr "测试节点下资产是否可连接: {}" msgstr "测试节点下资产是否可连接: "
#: assets/tasks/const.py:49 #: assets/tasks/const.py:49
msgid "Unreachable" msgid "Unreachable"
@ -1164,20 +1164,20 @@ msgid "Get asset info failed: {}"
msgstr "获取资产信息失败:{}" msgstr "获取资产信息失败:{}"
#: assets/tasks/gather_asset_hardware_info.py:97 #: assets/tasks/gather_asset_hardware_info.py:97
msgid "Update some assets hardware info" msgid "Update some assets hardware info. "
msgstr "更新资产硬件信息" msgstr "更新资产硬件信息. "
#: assets/tasks/gather_asset_hardware_info.py:114 #: assets/tasks/gather_asset_hardware_info.py:114
msgid "Update asset hardware info: {}" msgid "Update asset hardware info: "
msgstr "更新资产硬件信息: {}" msgstr "更新资产硬件信息: "
#: assets/tasks/gather_asset_hardware_info.py:120 #: assets/tasks/gather_asset_hardware_info.py:120
msgid "Update assets hardware info: {}" msgid "Update assets hardware info: "
msgstr "更新资产硬件信息: {}" msgstr "更新资产硬件信息: "
#: assets/tasks/gather_asset_hardware_info.py:137 #: assets/tasks/gather_asset_hardware_info.py:137
msgid "Update node asset hardware information: {}" msgid "Update node asset hardware information: "
msgstr "更新节点资产硬件信息: {}" msgstr "更新节点资产硬件信息: "
#: assets/tasks/gather_asset_users.py:111 #: assets/tasks/gather_asset_users.py:111
msgid "Gather assets users" msgid "Gather assets users"
@ -1202,12 +1202,12 @@ msgid "Hosts count: {}"
msgstr "主机数量: {}" msgstr "主机数量: {}"
#: assets/tasks/push_system_user.py:282 assets/tasks/push_system_user.py:315 #: assets/tasks/push_system_user.py:282 assets/tasks/push_system_user.py:315
msgid "Push system users to assets: {}" msgid "Push system users to assets: "
msgstr "推送系统用户到入资产: {}" msgstr "推送系统用户到入资产: "
#: assets/tasks/push_system_user.py:294 #: assets/tasks/push_system_user.py:294
msgid "Push system users to asset: {}({}) => {}" msgid "Push system users to asset: "
msgstr "推送系统用户到入资产: {}({}) => {}" msgstr "推送系统用户到入资产: "
#: assets/tasks/system_user_connectivity.py:56 #: assets/tasks/system_user_connectivity.py:56
msgid "Dynamic system user not support test" msgid "Dynamic system user not support test"
@ -1218,16 +1218,13 @@ msgid "Start test system user connectivity for platform: [{}]"
msgstr "开始测试系统用户在该系统平台的可连接性: [{}]" msgstr "开始测试系统用户在该系统平台的可连接性: [{}]"
#: assets/tasks/system_user_connectivity.py:118 #: assets/tasks/system_user_connectivity.py:118
msgid "Test system user connectivity: {}"
msgstr "测试系统用户可连接性: {}"
#: assets/tasks/system_user_connectivity.py:129 #: assets/tasks/system_user_connectivity.py:129
msgid "Test system user connectivity: {} => {}" msgid "Test system user connectivity: "
msgstr "测试系统用户可连接性: {} => {}" msgstr "测试系统用户可连接性: "
#: assets/tasks/system_user_connectivity.py:148 #: assets/tasks/system_user_connectivity.py:148
msgid "Test system user connectivity period: {}" msgid "Test system user connectivity period: "
msgstr "定期测试系统用户可连接性: {}" msgstr "定期测试系统用户可连接性: "
#: assets/tasks/utils.py:17 #: assets/tasks/utils.py:17
msgid "Asset has been disabled, skipped: {}" msgid "Asset has been disabled, skipped: {}"
@ -1427,14 +1424,14 @@ msgid "Auth Token"
msgstr "认证令牌" msgstr "认证令牌"
#: audits/signals_handler.py:68 authentication/notifications.py:73 #: audits/signals_handler.py:68 authentication/notifications.py:73
#: authentication/views/dingtalk.py:160 authentication/views/feishu.py:148
#: authentication/views/login.py:164 authentication/views/wecom.py:158 #: authentication/views/login.py:164 authentication/views/wecom.py:158
#: notifications/backends/__init__.py:11 users/models/user.py:607 #: notifications/backends/__init__.py:11 users/models/user.py:607
msgid "WeCom" msgid "WeCom"
msgstr "企业微信" msgstr "企业微信"
#: audits/signals_handler.py:69 authentication/views/login.py:170 #: audits/signals_handler.py:69 authentication/views/dingtalk.py:160
#: notifications/backends/__init__.py:12 users/models/user.py:608 #: authentication/views/login.py:170 notifications/backends/__init__.py:12
#: users/models/user.py:608
msgid "DingTalk" msgid "DingTalk"
msgstr "钉钉" msgstr "钉钉"
@ -2006,7 +2003,7 @@ msgstr "代码错误"
#: authentication/templates/authentication/_msg_reset_password.html:3 #: authentication/templates/authentication/_msg_reset_password.html:3
#: authentication/templates/authentication/_msg_rest_password_success.html:2 #: authentication/templates/authentication/_msg_rest_password_success.html:2
#: authentication/templates/authentication/_msg_rest_public_key_success.html:2 #: authentication/templates/authentication/_msg_rest_public_key_success.html:2
#: jumpserver/conf.py:293 #: jumpserver/conf.py:293 ops/tasks.py:145 ops/tasks.py:148
#: perms/templates/perms/_msg_item_permissions_expire.html:3 #: perms/templates/perms/_msg_item_permissions_expire.html:3
#: perms/templates/perms/_msg_permed_items_expire.html:3 #: perms/templates/perms/_msg_permed_items_expire.html:3
#: users/templates/users/_msg_account_expire_reminder.html:4 #: users/templates/users/_msg_account_expire_reminder.html:4
@ -2206,6 +2203,11 @@ msgstr "飞书查询用户失败"
msgid "The FeiShu is already bound to another user" msgid "The FeiShu is already bound to another user"
msgstr "该飞书已经绑定其他用户" msgstr "该飞书已经绑定其他用户"
#: authentication/views/feishu.py:148 authentication/views/login.py:176
#: notifications/backends/__init__.py:14 users/models/user.py:609
msgid "FeiShu"
msgstr "飞书"
#: authentication/views/feishu.py:149 #: authentication/views/feishu.py:149
msgid "Binding FeiShu successfully" msgid "Binding FeiShu successfully"
msgstr "绑定 飞书 成功" msgstr "绑定 飞书 成功"
@ -2234,11 +2236,6 @@ msgstr "正在跳转到 {} 认证"
msgid "Please enable cookies and try again." msgid "Please enable cookies and try again."
msgstr "设置你的浏览器支持cookie" msgstr "设置你的浏览器支持cookie"
#: authentication/views/login.py:176 notifications/backends/__init__.py:14
#: users/models/user.py:609
msgid "FeiShu"
msgstr "飞书"
#: authentication/views/login.py:265 #: authentication/views/login.py:265
msgid "" msgid ""
"Wait for <b>{}</b> confirm, You also can copy link to her/him <br/>\n" "Wait for <b>{}</b> confirm, You also can copy link to her/him <br/>\n"
@ -2558,56 +2555,56 @@ msgstr "单位: 时"
msgid "Callback" msgid "Callback"
msgstr "回调" msgstr "回调"
#: ops/models/adhoc.py:143 #: ops/models/adhoc.py:154
msgid "Tasks" msgid "Tasks"
msgstr "任务" msgstr "任务"
#: ops/models/adhoc.py:144 #: ops/models/adhoc.py:155
msgid "Pattern" msgid "Pattern"
msgstr "模式" msgstr "模式"
#: ops/models/adhoc.py:145 #: ops/models/adhoc.py:156
msgid "Options" msgid "Options"
msgstr "选项" msgstr "选项"
#: ops/models/adhoc.py:147 #: ops/models/adhoc.py:158
msgid "Run as admin" msgid "Run as admin"
msgstr "再次执行" msgstr "再次执行"
#: ops/models/adhoc.py:150 #: ops/models/adhoc.py:161
msgid "Become" msgid "Become"
msgstr "Become" msgstr "Become"
#: ops/models/adhoc.py:151 #: ops/models/adhoc.py:162
msgid "Create by" msgid "Create by"
msgstr "创建者" msgstr "创建者"
#: ops/models/adhoc.py:240 #: ops/models/adhoc.py:251
msgid "Task display" msgid "Task display"
msgstr "任务名称" msgstr "任务名称"
#: ops/models/adhoc.py:242 #: ops/models/adhoc.py:253
msgid "Host amount" msgid "Host amount"
msgstr "主机数量" msgstr "主机数量"
#: ops/models/adhoc.py:244 #: ops/models/adhoc.py:255
msgid "Start time" msgid "Start time"
msgstr "开始时间" msgstr "开始时间"
#: ops/models/adhoc.py:245 #: ops/models/adhoc.py:256
msgid "End time" msgid "End time"
msgstr "完成时间" msgstr "完成时间"
#: ops/models/adhoc.py:247 ops/models/command.py:28 #: ops/models/adhoc.py:258 ops/models/command.py:28
#: terminal/serializers/session.py:39 #: terminal/serializers/session.py:39
msgid "Is finished" msgid "Is finished"
msgstr "是否完成" msgstr "是否完成"
#: ops/models/adhoc.py:249 #: ops/models/adhoc.py:260
msgid "Adhoc raw result" msgid "Adhoc raw result"
msgstr "结果" msgstr "结果"
#: ops/models/adhoc.py:250 #: ops/models/adhoc.py:261
msgid "Adhoc result summary" msgid "Adhoc result summary"
msgstr "汇总" msgstr "汇总"
@ -2655,11 +2652,11 @@ msgstr "内存使用率超过 {max_threshold}%: => {value}"
msgid "CPU load more than {max_threshold}: => {value}" msgid "CPU load more than {max_threshold}: => {value}"
msgstr "CPU 使用率超过 {max_threshold}: => {value}" msgstr "CPU 使用率超过 {max_threshold}: => {value}"
#: ops/tasks.py:71 #: ops/tasks.py:72
msgid "Clean task history period" msgid "Clean task history period"
msgstr "定期清除任务历史" msgstr "定期清除任务历史"
#: ops/tasks.py:84 #: ops/tasks.py:85
msgid "Clean celery log period" msgid "Clean celery log period"
msgstr "定期清除Celery日志" msgstr "定期清除Celery日志"
@ -6311,6 +6308,12 @@ msgstr "旗舰版"
msgid "Community edition" msgid "Community edition"
msgstr "社区版" msgstr "社区版"
#~ msgid "Push system users to asset: {}({}) => {}"
#~ msgstr "推送系统用户到入资产: {}({}) => {}"
#~ msgid "Test system user connectivity: {} => {}"
#~ msgstr "测试系统用户可连接性: {} => {}"
#~ msgid "Account backup plan execution" #~ msgid "Account backup plan execution"
#~ msgstr "改密计划执行" #~ msgstr "改密计划执行"

View File

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

View File

@ -9,7 +9,7 @@ from celery import current_task
from django.db import models from django.db import models
from django.conf import settings from django.conf import settings
from django.utils import timezone 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.utils import get_logger, lazyproperty
from common.fields.model import ( from common.fields.model import (
@ -58,6 +58,17 @@ class Task(PeriodTaskModelMixin, OrgModelMixin):
else: else:
return False 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 @property
def timedelta(self): def timedelta(self):
if self.latest_execution: if self.latest_execution:

View File

@ -56,7 +56,7 @@ class TaskSerializer(BulkOrgResourceModelSerializer):
class Meta: class Meta:
model = Task model = Task
fields_mini = ['id', 'name'] fields_mini = ['id', 'name', 'display_name']
fields_small = fields_mini + [ fields_small = fields_mini + [
'interval', 'crontab', 'interval', 'crontab',
'is_periodic', 'is_deleted', '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 django.conf import settings
from celery import shared_task, subtask from celery import shared_task, subtask
from celery.exceptions import SoftTimeLimitExceeded from celery.exceptions import SoftTimeLimitExceeded
from django.utils import timezone 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 common.utils import get_logger, get_object_or_none, get_log_keep_day
from orgs.utils import tmp_to_root_org, tmp_to_org from orgs.utils import tmp_to_root_org, tmp_to_org
@ -141,10 +142,10 @@ def hello(name, callback=None):
import time import time
count = User.objects.count() count = User.objects.count()
print("Hello {}".format(name)) print(gettext("Hello") + ': ' + name)
print("Count: ", count) print("Count: ", count)
time.sleep(1) time.sleep(1)
return count return gettext("Hello")
@shared_task @shared_task
@ -177,3 +178,4 @@ def add_m(x):
s.append(add.s(i)) s.append(add.s(i))
res = chain(*tuple(s))() res = chain(*tuple(s))()
return res return res