mirror of https://github.com/jumpserver/jumpserver
perf: user login report
parent
ec68106f3a
commit
49c20648d3
|
@ -47,13 +47,15 @@ class UserReportApi(APIView):
|
||||||
date_range_bounds = self.days_to_datetime.date(), (local_now() + timezone.timedelta(days=1)).date()
|
date_range_bounds = self.days_to_datetime.date(), (local_now() + timezone.timedelta(days=1)).date()
|
||||||
return queryset.filter(**{f'{field_name}__range': date_range_bounds})
|
return queryset.filter(**{f'{field_name}__range': date_range_bounds})
|
||||||
|
|
||||||
def get_user_login_metrics(self, status):
|
def get_user_login_metrics(self, queryset):
|
||||||
queryset = UserLoginLog.objects.filter(status=status)
|
filtered_queryset = self.filter_by_date_range(queryset, 'datetime')
|
||||||
queryset = UserLoginLog.filter_login_queryset_by_org(queryset)
|
|
||||||
filtered_queryset = self.filter_by_date_range(queryset, 'datetime').values(
|
data = defaultdict(set)
|
||||||
'datetime__date').annotate(user_count=Count('username', distinct=True)).order_by('datetime__date')
|
for t, username in filtered_queryset.values_list('datetime', 'username'):
|
||||||
result_dict = {r['datetime__date']: r['user_count'] for r in filtered_queryset}
|
date_str = str(t.date())
|
||||||
metrics = [result_dict.get(d, 0) for d in self.date_range_list]
|
data[date_str].add(username)
|
||||||
|
|
||||||
|
metrics = [len(data.get(str(d), set())) for d in self.date_range_list]
|
||||||
return metrics
|
return metrics
|
||||||
|
|
||||||
def get_user_login_method_metrics(self):
|
def get_user_login_method_metrics(self):
|
||||||
|
@ -110,19 +112,20 @@ class UserReportApi(APIView):
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
data = {}
|
data = {}
|
||||||
|
dates_metrics_date = [date.strftime('%m-%d') for date in self.date_range_list] or ['0']
|
||||||
|
|
||||||
data['user_login_log_metrics'] = {
|
data['user_login_log_metrics'] = {
|
||||||
'dates_metrics_date': [date.strftime('%m-%d') for date in self.date_range_list] or ['0'],
|
'dates_metrics_date': dates_metrics_date,
|
||||||
'dates_metrics_total': self.get_user_login_metrics(LoginStatusChoices.success),
|
'dates_metrics_total': self.get_user_login_metrics(self.user_login_log_queryset),
|
||||||
}
|
}
|
||||||
data['user_login_failed_metrics'] = {
|
data['user_login_failed_metrics'] = {
|
||||||
'dates_metrics_date': [date.strftime('%m-%d') for date in self.date_range_list] or ['0'],
|
'dates_metrics_date': dates_metrics_date,
|
||||||
'dates_metrics_total': self.get_user_login_metrics(LoginStatusChoices.failed),
|
'dates_metrics_total': self.get_user_login_metrics(self.user_login_failed_queryset),
|
||||||
}
|
}
|
||||||
data['user_login_method_metrics'] = {
|
data['user_login_method_metrics'] = {
|
||||||
'dates_metrics_date': [date.strftime('%m-%d') for date in self.date_range_list] or ['0'],
|
'dates_metrics_date': dates_metrics_date,
|
||||||
'dates_metrics_total': self.get_user_login_method_metrics(),
|
'dates_metrics_total': self.get_user_login_method_metrics(),
|
||||||
}
|
}
|
||||||
data['user_login_region_distribution'] = self.get_user_login_region_distribution()
|
data['user_login_region_distribution'] = self.get_user_login_region_distribution()
|
||||||
data['user_login_time_metrics'] = self.get_user_login_time_metrics()
|
data['user_login_time_metrics'] = self.get_user_login_time_metrics()
|
||||||
|
|
||||||
return JsonResponse(data, status=200)
|
return JsonResponse(data, status=200)
|
||||||
|
|
Loading…
Reference in New Issue