mirror of
https://github.com/jumpserver/jumpserver.git
synced 2025-09-17 15:59:04 +00:00
perf: 优化账号创建 (#11440)
* feat: 支持账号模版自动推送 * perf: 修改模版 * perf: 优化账号创建 --------- Co-authored-by: ibuler <ibuler@qq.com>
This commit is contained in:
@@ -1,9 +1,17 @@
|
||||
from django.db.models.signals import pre_save, post_save, post_delete
|
||||
from collections import defaultdict
|
||||
|
||||
from django.db.models.signals import post_delete
|
||||
from django.db.models.signals import pre_save, post_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils.translation import gettext_noop
|
||||
|
||||
from accounts.backends import vault_client
|
||||
from common.utils import get_logger
|
||||
from audits.const import ActivityChoices
|
||||
from audits.signal_handlers import create_activities
|
||||
from common.decorators import merge_delay_run
|
||||
from common.utils import get_logger, i18n_fmt
|
||||
from .models import Account, AccountTemplate
|
||||
from .tasks.push_account import push_accounts_to_assets_task
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
@@ -16,6 +24,39 @@ def on_account_pre_save(sender, instance, **kwargs):
|
||||
instance.version = instance.history.count()
|
||||
|
||||
|
||||
@merge_delay_run(ttl=5)
|
||||
def push_accounts_if_need(accounts=()):
|
||||
from .models import AccountTemplate
|
||||
|
||||
template_accounts = defaultdict(list)
|
||||
for ac in accounts:
|
||||
# 再强调一次吧
|
||||
if ac.source != 'template':
|
||||
continue
|
||||
template_accounts[ac.source_id].append(ac)
|
||||
|
||||
for source_id, accounts in template_accounts.items():
|
||||
template = AccountTemplate.objects.filter(id=source_id).first()
|
||||
if not template or not template.auto_push:
|
||||
continue
|
||||
logger.debug("Push accounts to source: %s", source_id)
|
||||
account_ids = [str(ac.id) for ac in accounts]
|
||||
task = push_accounts_to_assets_task.delay(account_ids, params=template.push_params)
|
||||
detail = i18n_fmt(
|
||||
gettext_noop('Push related accounts to assets: %s, by system'),
|
||||
len(account_ids)
|
||||
)
|
||||
create_activities([str(template.id)], detail, task.id, ActivityChoices.task, template.org_id)
|
||||
logger.debug("Push accounts to source: %s, task: %s", source_id, task)
|
||||
|
||||
|
||||
@receiver(post_save, sender=Account)
|
||||
def on_account_create_by_template(sender, instance, created=False, **kwargs):
|
||||
if not created or instance.source != 'template':
|
||||
return
|
||||
push_accounts_if_need(accounts=(instance,))
|
||||
|
||||
|
||||
class VaultSignalHandler(object):
|
||||
""" 处理 Vault 相关的信号 """
|
||||
|
||||
|
Reference in New Issue
Block a user