From c1c5025fbbe6e33a8f624cc1ddbe6860e8411a16 Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Mon, 18 Aug 2025 16:42:49 +0800 Subject: [PATCH] perf: Account automation report --- apps/rbac/const.py | 2 +- apps/rbac/tree.py | 1 + apps/reports/api/accouts/automation.py | 11 ++++++++--- apps/reports/api/users/user.py | 2 -- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/rbac/const.py b/apps/rbac/const.py index cdb614102..4fd6fb12a 100644 --- a/apps/rbac/const.py +++ b/apps/rbac/const.py @@ -145,7 +145,7 @@ only_system_permissions = ( ('rbac', 'orgrole', 'delete,add,change', 'orgrole'), ('orgs', 'organization', '*', '*'), ('xpack', 'license', '*', '*'), - ('settings', 'setting', '*', '*'), + ('settings', 'setting', 'add,change,delete', '*'), ('tickets', '*', '*', '*'), ('ops', 'celerytask', 'view', 'taskmonitor'), ('terminal', 'terminal', '*', '*'), diff --git a/apps/rbac/tree.py b/apps/rbac/tree.py index 32f3169d8..d6103bd11 100644 --- a/apps/rbac/tree.py +++ b/apps/rbac/tree.py @@ -33,6 +33,7 @@ view_nodes_data = [ app_nodes_data = [ {'id': 'users', 'view': 'view_console'}, {'id': 'assets', 'view': 'view_console'}, + {'id': 'accounts', 'name': _('Accounts'), 'view': 'view_console'}, {'id': 'perms', 'view': 'view_console'}, {'id': 'terminal', 'name': _('Session audits'), 'view': 'view_audit'}, {'id': 'audits', 'view': 'view_audit'}, diff --git a/apps/reports/api/accouts/automation.py b/apps/reports/api/accouts/automation.py index b5d0cf8eb..87c62f5fa 100644 --- a/apps/reports/api/accouts/automation.py +++ b/apps/reports/api/accouts/automation.py @@ -3,6 +3,7 @@ from collections import defaultdict from django.http import JsonResponse +from django.utils import timezone from django.utils.translation import gettext_lazy as _ from rest_framework.views import APIView @@ -45,15 +46,19 @@ class AccountAutomationApi(DateRangeMixin, APIView): def get_execution_metrics(self): executions = AutomationExecution.objects.filter(type__in=AutomationTypes.values) - filtered_queryset = self.filter_by_date_range(executions, 'date_start') + qs = self.filter_by_date_range(executions, 'date_start') types = set() data = defaultdict(lambda: defaultdict(int)) - for t, tp in filtered_queryset.values_list('date_start', 'type'): + for obj in qs: + tp = obj.type if not tp: continue types.add(tp) - date_str = str(t.date()) + + dt = obj.date_start + dt_local = timezone.localtime(dt) + date_str = str(dt_local.date()) data[date_str][tp] += 1 tp_map = defaultdict(list) diff --git a/apps/reports/api/users/user.py b/apps/reports/api/users/user.py index 0997f38b0..4bcfb048d 100644 --- a/apps/reports/api/users/user.py +++ b/apps/reports/api/users/user.py @@ -63,8 +63,6 @@ class UserReportApi(DateRangeMixin, APIView): for obj in qs: dt = obj.datetime - if dt is None: - continue dt_local = timezone.localtime(dt) hour = dt_local.hour metrics[buckets[hour // 6]] += 1