perf: 重构工单处理流程 (7)

This commit is contained in:
Bai 2021-01-13 17:36:05 +08:00 committed by Jiangjie.Bai
parent 64257823c5
commit 83d12d02fb
6 changed files with 28 additions and 75 deletions

View File

@ -4,7 +4,6 @@ from applications.models import Application
from applications.const import ApplicationCategoryChoices, ApplicationTypeChoices from applications.const import ApplicationCategoryChoices, ApplicationTypeChoices
from assets.models import SystemUser from assets.models import SystemUser
from perms.models import ApplicationPermission from perms.models import ApplicationPermission
from tickets.utils import convert_model_data_field_name_to_verbose_name
from .base import BaseHandler from .base import BaseHandler
@ -26,22 +25,15 @@ class Handler(BaseHandler):
return meta_display return meta_display
def _construct_meta_display_of_approve(self): def _construct_meta_display_of_approve(self):
meta_display_fields = ['approve_applications_snapshot', 'approve_system_users_snapshot'] meta_display_fields = ['approve_applications_display', 'approve_system_users_display']
approve_applications_id = self.ticket.meta.get('approve_applications', []) approve_applications_id = self.ticket.meta.get('approve_applications', [])
approve_system_users_id = self.ticket.meta.get('approve_system_users', []) approve_system_users_id = self.ticket.meta.get('approve_system_users', [])
with tmp_to_org(self.ticket.org_id): with tmp_to_org(self.ticket.org_id):
approve_applications_snapshot = list( approve_applications = Application.objects.filter(id__in=approve_applications_id)
Application.objects.filter(id__in=approve_applications_id).values( system_users = SystemUser.objects.filter(id__in=approve_system_users_id)
'name', 'category', 'type' approve_applications_display = [str(application) for application in approve_applications]
) approve_system_users_display = [str(system_user) for system_user in system_users]
) meta_display_values = [approve_applications_display, approve_system_users_display]
approve_system_users_snapshot = list(
SystemUser.objects.filter(id__in=approve_system_users_id).values(
'name', 'username', 'username_same_with_user', 'protocol',
'auto_push', 'sudo', 'home', 'sftp_root'
)
)
meta_display_values = [approve_applications_snapshot, approve_system_users_snapshot]
meta_display = dict(zip(meta_display_fields, meta_display_values)) meta_display = dict(zip(meta_display_fields, meta_display_values))
return meta_display return meta_display
@ -71,14 +63,8 @@ class Handler(BaseHandler):
def _construct_meta_body_of_approve(self): def _construct_meta_body_of_approve(self):
# 审批信息 # 审批信息
approve_applications_snapshot = self.ticket.meta.get('approve_applications_snapshot', []) approve_applications_display = self.ticket.meta.get('approve_applications_display', [])
approve_applications_snapshot_display = convert_model_data_field_name_to_verbose_name( approve_system_users_display = self.ticket.meta.get('approve_system_users_display', [])
model=Application, data=approve_applications_snapshot
)
approve_system_users_snapshot = self.ticket.meta.get('approve_system_users_snapshot', [])
approve_system_users_snapshot_display = convert_model_data_field_name_to_verbose_name(
model=SystemUser, data=approve_system_users_snapshot
)
approve_date_start = self.ticket.meta.get('approve_date_start') approve_date_start = self.ticket.meta.get('approve_date_start')
approve_date_expired = self.ticket.meta.get('approve_date_expired') approve_date_expired = self.ticket.meta.get('approve_date_expired')
approved_body = '''{}: {}, approved_body = '''{}: {},
@ -86,8 +72,8 @@ class Handler(BaseHandler):
{}: {}, {}: {},
{}: {}, {}: {},
'''.format( '''.format(
__('Approved applications'), approve_applications_snapshot_display, __('Approved applications'), approve_applications_display,
__('Approved system users'), approve_system_users_snapshot_display, __('Approved system users'), approve_system_users_display,
__('Approved date start'), approve_date_start, __('Approved date start'), approve_date_start,
__('Approved date expired'), approve_date_expired __('Approved date expired'), approve_date_expired
) )

View File

@ -4,7 +4,6 @@ from django.utils.translation import ugettext as __
from perms.models import AssetPermission, Action from perms.models import AssetPermission, Action
from assets.models import Asset, SystemUser from assets.models import Asset, SystemUser
from orgs.utils import tmp_to_org, tmp_to_root_org from orgs.utils import tmp_to_org, tmp_to_root_org
from tickets.utils import convert_model_data_field_name_to_verbose_name
class Handler(BaseHandler): class Handler(BaseHandler):
@ -24,26 +23,19 @@ class Handler(BaseHandler):
def _construct_meta_display_of_approve(self): def _construct_meta_display_of_approve(self):
meta_display_fields = [ meta_display_fields = [
'approve_actions_display', 'approve_assets_snapshot', 'approve_system_users_snapshot' 'approve_actions_display', 'approve_assets_display', 'approve_system_users_display'
] ]
approve_actions = self.ticket.meta.get('approve_actions', Action.NONE) approve_actions = self.ticket.meta.get('approve_actions', Action.NONE)
approve_actions_display = Action.value_to_choices_display(approve_actions) approve_actions_display = Action.value_to_choices_display(approve_actions)
approve_assets_id = self.ticket.meta.get('approve_assets', []) approve_assets_id = self.ticket.meta.get('approve_assets', [])
approve_system_users_id = self.ticket.meta.get('approve_system_users', []) approve_system_users_id = self.ticket.meta.get('approve_system_users', [])
with tmp_to_org(self.ticket.org_id): with tmp_to_org(self.ticket.org_id):
approve_assets_snapshot = list( assets = Asset.objects.filter(id__in=approve_assets_id)
Asset.objects.filter(id__in=approve_assets_id).values( system_users = SystemUser.objects.filter(id__in=approve_system_users_id)
'hostname', 'ip', 'protocols', 'platform__name', 'public_ip' approve_assets_display = [str(asset) for asset in assets]
) approve_system_users_display = [str(system_user) for system_user in system_users]
)
approve_system_users_snapshot = list(
SystemUser.objects.filter(id__in=approve_system_users_id).values(
'name', 'username', 'username_same_with_user', 'protocol',
'auto_push', 'sudo', 'home', 'sftp_root'
)
)
meta_display_values = [ meta_display_values = [
approve_actions_display, approve_assets_snapshot, approve_system_users_snapshot approve_actions_display, approve_assets_display, approve_system_users_display
] ]
meta_display = dict(zip(meta_display_fields, meta_display_values)) meta_display = dict(zip(meta_display_fields, meta_display_values))
return meta_display return meta_display
@ -72,14 +64,8 @@ class Handler(BaseHandler):
return applied_body return applied_body
def _construct_meta_body_of_approve(self): def _construct_meta_body_of_approve(self):
approve_assets_snapshot = self.ticket.meta.get('approve_assets_snapshot', []) approve_assets_display = self.ticket.meta.get('approve_assets_display', [])
approve_assets_snapshot_display = convert_model_data_field_name_to_verbose_name( approve_system_users_display = self.ticket.meta.get('approve_system_users_display', [])
model=Asset, data=approve_assets_snapshot
)
approve_system_users_snapshot = self.ticket.meta.get('approve_system_users_snapshot', [])
approve_system_users_snapshot_display = convert_model_data_field_name_to_verbose_name(
model=SystemUser, data=approve_system_users_snapshot
)
approve_actions_display = self.ticket.meta.get('approve_actions_display', []) approve_actions_display = self.ticket.meta.get('approve_actions_display', [])
approve_date_start = self.ticket.meta.get('approve_date_start') approve_date_start = self.ticket.meta.get('approve_date_start')
approve_date_expired = self.ticket.meta.get('approve_date_expired') approve_date_expired = self.ticket.meta.get('approve_date_expired')
@ -89,8 +75,8 @@ class Handler(BaseHandler):
{}: {}, {}: {},
{}: {} {}: {}
'''.format( '''.format(
__('Approved assets'), approve_assets_snapshot_display, __('Approved assets'), approve_assets_display,
__('Approved system users'), approve_system_users_snapshot_display, __('Approved system users'), approve_system_users_display,
__('Approved actions'), ', '.join(approve_actions_display), __('Approved actions'), ', '.join(approve_actions_display),
__('Approved date start'), approve_date_start, __('Approved date start'), approve_date_start,
__('Approved date expired'), approve_date_expired, __('Approved date expired'), approve_date_expired,

View File

@ -29,9 +29,9 @@ def migrate_field_meta(tp, old_meta):
'apply_date_expired': old_meta.get('date_expired'), 'apply_date_expired': old_meta.get('date_expired'),
'approve_assets': old_meta.get('confirmed_assets', []), 'approve_assets': old_meta.get('confirmed_assets', []),
'approve_assets_snapshot': [], 'approve_assets_display': [],
'approve_system_users': old_meta.get('confirmed_system_users', []), 'approve_system_users': old_meta.get('confirmed_system_users', []),
'approve_system_users_snapshot': [], 'approve_system_users_display': [],
'approve_actions': old_meta.get('actions'), 'approve_actions': old_meta.get('actions'),
'approve_actions_display': [], 'approve_actions_display': [],
'approve_date_start': old_meta.get('date_start'), 'approve_date_start': old_meta.get('date_start'),

View File

@ -51,7 +51,7 @@ class ApproveSerializer(serializers.Serializer):
required=True, child=serializers.UUIDField(), label=_('Approve applications'), required=True, child=serializers.UUIDField(), label=_('Approve applications'),
allow_null=True allow_null=True
) )
approve_applications_snapshot = serializers.ListField( approve_applications_display = serializers.ListField(
required=False, read_only=True, child=serializers.CharField(), required=False, read_only=True, child=serializers.CharField(),
label=_('Approve applications display'), allow_null=True, label=_('Approve applications display'), allow_null=True,
default=list default=list
@ -60,7 +60,7 @@ class ApproveSerializer(serializers.Serializer):
required=True, child=serializers.UUIDField(), label=_('Approve system users'), required=True, child=serializers.UUIDField(), label=_('Approve system users'),
allow_null=True allow_null=True
) )
approve_system_users_snapshot = serializers.ListField( approve_system_users_display = serializers.ListField(
required=False, read_only=True, child=serializers.CharField(), required=False, read_only=True, child=serializers.CharField(),
label=_('Approve system user display'), allow_null=True, label=_('Approve system user display'), allow_null=True,
default=list default=list

View File

@ -47,8 +47,8 @@ class ApproveSerializer(serializers.Serializer):
approve_assets = serializers.ListField( approve_assets = serializers.ListField(
required=True, allow_null=True, child=serializers.UUIDField(), label=_('Approve assets') required=True, allow_null=True, child=serializers.UUIDField(), label=_('Approve assets')
) )
approve_assets_snapshot = serializers.ListField( approve_assets_display = serializers.ListField(
required=False, read_only=True, child=serializers.DictField(), required=False, read_only=True, child=serializers.CharField(),
label=_('Approve assets display'), allow_null=True, label=_('Approve assets display'), allow_null=True,
default=list, default=list,
) )
@ -56,8 +56,8 @@ class ApproveSerializer(serializers.Serializer):
required=True, allow_null=True, child=serializers.UUIDField(), required=True, allow_null=True, child=serializers.UUIDField(),
label=_('Approve system users') label=_('Approve system users')
) )
approve_system_users_snapshot = serializers.ListField( approve_system_users_display = serializers.ListField(
required=False, read_only=True, child=serializers.DictField(), required=False, read_only=True, child=serializers.CharField(),
label=_('Approve assets display'), allow_null=True, label=_('Approve assets display'), allow_null=True,
default=list, default=list,
) )

View File

@ -11,25 +11,6 @@ from . import const
logger = get_logger(__file__) logger = get_logger(__file__)
def get_model_field_verbose_name(model, field_name):
field_name_field_verbose_name_mapping = {
field.name: field.verbose_name for field in model._meta.fields
}
field_name = field_name.split('__', 1)[0]
field_verbose_name = field_name_field_verbose_name_mapping.get(field_name, field_name)
return field_verbose_name
def convert_model_data_field_name_to_verbose_name(model, data):
if isinstance(data, dict):
data = [data]
converted_data = [
{get_model_field_verbose_name(model, name): value for name, value in d.items()}
for d in data
]
return converted_data
def send_ticket_applied_mail_to_assignees(ticket, assignees): def send_ticket_applied_mail_to_assignees(ticket, assignees):
if not assignees: if not assignees:
logger.debug("Not found assignees, ticket: {}({}), assignees: {}".format( logger.debug("Not found assignees, ticket: {}({}), assignees: {}".format(