mirror of https://github.com/jumpserver/jumpserver
perf: Pam dashboard
parent
2273275c23
commit
ff9adb45b7
|
@ -4,6 +4,7 @@ from django.http.response import JsonResponse
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
from accounts.models import Account, RiskChoice
|
from accounts.models import Account, RiskChoice
|
||||||
|
from common.utils.timezone import local_monday
|
||||||
|
|
||||||
__all__ = ['PamDashboardApi']
|
__all__ = ['PamDashboardApi']
|
||||||
|
|
||||||
|
@ -24,6 +25,10 @@ class PamDashboardApi(APIView):
|
||||||
if query_params.get('total_accounts'):
|
if query_params.get('total_accounts'):
|
||||||
data['total_accounts'] = account_count
|
data['total_accounts'] = account_count
|
||||||
|
|
||||||
|
if query_params.get('total_week_add_accounts'):
|
||||||
|
monday_time = local_monday()
|
||||||
|
data['total_week_add_accounts'] = Account.objects.filter(date_created__gte=monday_time).count()
|
||||||
|
|
||||||
if query_params.get('total_privileged_accounts'):
|
if query_params.get('total_privileged_accounts'):
|
||||||
data['total_privileged_accounts'] = privileged_account_count
|
data['total_privileged_accounts'] = privileged_account_count
|
||||||
|
|
||||||
|
@ -31,15 +36,18 @@ class PamDashboardApi(APIView):
|
||||||
data['total_ordinary_accounts'] = account_count - privileged_account_count
|
data['total_ordinary_accounts'] = account_count - privileged_account_count
|
||||||
|
|
||||||
if query_params.get('total_unmanaged_accounts'):
|
if query_params.get('total_unmanaged_accounts'):
|
||||||
data['total_unmanaged_accounts'] = Account.get_risks(RiskChoice.new_found).count()
|
data['total_unmanaged_accounts'] = Account.get_risks(risk_type=RiskChoice.new_found).count()
|
||||||
|
|
||||||
if query_params.get('total_unavailable_accounts'):
|
if query_params.get('total_unavailable_accounts'):
|
||||||
data['total_unavailable_accounts'] = Account.objects.filter(is_active=False).count()
|
data['total_unavailable_accounts'] = Account.objects.filter(is_active=False).count()
|
||||||
|
|
||||||
|
if query_params.get('total_long_time_no_login_accounts'):
|
||||||
|
data['total_long_time_no_login_accounts'] = Account.get_risks(risk_type=RiskChoice.long_time_no_login).count()
|
||||||
|
|
||||||
if query_params.get('total_weak_password_accounts'):
|
if query_params.get('total_weak_password_accounts'):
|
||||||
data['total_weak_password_accounts'] = Account.get_risks(RiskChoice.weak_password)
|
data['total_weak_password_accounts'] = Account.get_risks(risk_type=RiskChoice.weak_password).count()
|
||||||
|
|
||||||
if query_params.get('total_long_time_change_password_accounts'):
|
if query_params.get('total_long_time_change_password_accounts'):
|
||||||
data['total_long_time_change_password_accounts'] = Account.get_risks(RiskChoice.long_time_password)
|
data['total_long_time_change_password_accounts'] = Account.get_risks(risk_type=RiskChoice.long_time_password).count()
|
||||||
|
|
||||||
return JsonResponse(data, status=200)
|
return JsonResponse(data, status=200)
|
||||||
|
|
|
@ -168,6 +168,7 @@ class Account(AbsConnectivity, LabeledMixin, BaseAccount):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_risks(cls, queryset=None, risk_type=None):
|
def get_risks(cls, queryset=None, risk_type=None):
|
||||||
|
# TODO 数据量大时,子查询性能不佳,考虑用原生sql或者在模型层面做出改动
|
||||||
from accounts.models import AccountRisk
|
from accounts.models import AccountRisk
|
||||||
subquery = AccountRisk.objects.filter(
|
subquery = AccountRisk.objects.filter(
|
||||||
asset_id=OuterRef('asset_id'),
|
asset_id=OuterRef('asset_id'),
|
||||||
|
|
Loading…
Reference in New Issue