application_stats.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎虎
  5. @file: application_stats.py
  6. @date:2025/6/9 20:30
  7. @desc:
  8. """
  9. from drf_spectacular.utils import extend_schema
  10. from rest_framework.request import Request
  11. from rest_framework.views import APIView
  12. from application.api.application_stats import ApplicationStatsAPI
  13. from application.serializers.application_stats import ApplicationStatisticsSerializer
  14. from common import result
  15. from common.auth import TokenAuth
  16. from django.utils.translation import gettext_lazy as _
  17. from common.auth.authentication import has_permissions
  18. from common.constants.permission_constants import PermissionConstants, RoleConstants, ViewPermission, CompareConstants
  19. class ApplicationStats(APIView):
  20. authentication_classes = [TokenAuth]
  21. @extend_schema(
  22. methods=['GET'],
  23. description=_('Dialogue-related statistical trends'),
  24. summary=_('Dialogue-related statistical trends'),
  25. operation_id=_('Dialogue-related statistical trends'), # type: ignore
  26. parameters=ApplicationStatsAPI.get_parameters(),
  27. responses=ApplicationStatsAPI.get_response(),
  28. tags=[_('Application')] # type: ignore
  29. )
  30. @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_READ.get_workspace_application_permission(),
  31. PermissionConstants.APPLICATION_OVERVIEW_READ.get_workspace_permission_workspace_manage_role(),
  32. ViewPermission([RoleConstants.USER.get_workspace_role()],
  33. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  34. CompareConstants.AND),
  35. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  36. def get(self, request: Request, workspace_id: str, application_id: str):
  37. return result.success(
  38. ApplicationStatisticsSerializer(data={'application_id': application_id, 'workspace_id': workspace_id,
  39. 'start_time': request.query_params.get(
  40. 'start_time'),
  41. 'end_time': request.query_params.get(
  42. 'end_time')
  43. }).get_chat_record_aggregate_trend())
  44. class TokenUsageStatistics(APIView):
  45. authentication_classes = [TokenAuth]
  46. # 应用的token使用统计 根据人的使用数排序
  47. @extend_schema(
  48. methods=['GET'],
  49. description=_('Application token usage statistics'),
  50. summary=_('Application token usage statistics'),
  51. operation_id=_('Application token usage statistics'), # type: ignore
  52. parameters=ApplicationStatsAPI.get_parameters(),
  53. responses=ApplicationStatsAPI.get_response(),
  54. tags=[_('Application')] # type: ignore
  55. )
  56. @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_READ.get_workspace_application_permission(),
  57. PermissionConstants.APPLICATION_OVERVIEW_READ.get_workspace_permission_workspace_manage_role(),
  58. ViewPermission([RoleConstants.USER.get_workspace_role()],
  59. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  60. CompareConstants.AND),
  61. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  62. def get(self, request: Request, workspace_id: str, application_id: str):
  63. return result.success(
  64. ApplicationStatisticsSerializer(data={'application_id': application_id, 'workspace_id': workspace_id,
  65. 'start_time': request.query_params.get(
  66. 'start_time'),
  67. 'end_time': request.query_params.get(
  68. 'end_time')
  69. }).get_token_usage_statistics())
  70. class TopQuestionsStatistics(APIView):
  71. authentication_classes = [TokenAuth]
  72. # 应用的top问题统计
  73. @extend_schema(
  74. methods=['GET'],
  75. description=_('Application top question statistics'),
  76. summary=_('Application top question statistics'),
  77. operation_id=_('Application top question statistics'), # type: ignore
  78. parameters=ApplicationStatsAPI.get_parameters(),
  79. responses=ApplicationStatsAPI.get_response(),
  80. tags=[_('Application')] # type: ignore
  81. )
  82. @has_permissions(PermissionConstants.APPLICATION_OVERVIEW_READ.get_workspace_application_permission(),
  83. PermissionConstants.APPLICATION_OVERVIEW_READ.get_workspace_permission_workspace_manage_role(),
  84. ViewPermission([RoleConstants.USER.get_workspace_role()],
  85. [PermissionConstants.APPLICATION.get_workspace_application_permission()],
  86. CompareConstants.AND),
  87. RoleConstants.WORKSPACE_MANAGE.get_workspace_role())
  88. def get(self, request: Request, workspace_id: str, application_id: str):
  89. return result.success(
  90. ApplicationStatisticsSerializer(data={'application_id': application_id, 'workspace_id': workspace_id,
  91. 'start_time': request.query_params.get(
  92. 'start_time'),
  93. 'end_time': request.query_params.get(
  94. 'end_time')
  95. }).get_top_questions_statistics())