controller.py 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. from typing import Annotated
  2. from fastapi import APIRouter, Depends
  3. from fastapi.responses import JSONResponse
  4. from redis.asyncio.client import Redis
  5. from app.api.v1.module_monitor.cache.schema import CacheInfoSchema, CacheMonitorSchema
  6. from app.common.response import ResponseSchema, SuccessResponse
  7. from app.core.dependencies import AuthPermission, redis_getter
  8. from app.core.exceptions import CustomException
  9. from app.core.logger import log
  10. from app.core.router_class import OperationLogRoute
  11. from .service import CacheService
  12. CacheRouter = APIRouter(route_class=OperationLogRoute, prefix="/cache", tags=["缓存监控"])
  13. @CacheRouter.get(
  14. "/info",
  15. dependencies=[Depends(AuthPermission(["module_monitor:cache:query"]))],
  16. summary="获取缓存监控信息",
  17. description="获取缓存监控信息",
  18. response_model=ResponseSchema[CacheMonitorSchema],
  19. )
  20. async def get_monitor_cache_info_controller(
  21. redis: Annotated[Redis, Depends(redis_getter)],
  22. ) -> JSONResponse:
  23. """
  24. 获取缓存监控统计信息
  25. 参数:
  26. - redis (Redis): Redis 客户端对象
  27. 返回:
  28. - JSONResponse: 包含缓存监控统计信息的JSON响应
  29. """
  30. result = await CacheService.get_cache_monitor_statistical_info_service(redis=redis)
  31. log.info("获取缓存监控信息成功")
  32. return SuccessResponse(data=result, msg="获取缓存监控信息成功")
  33. @CacheRouter.get(
  34. "/get/names",
  35. dependencies=[Depends(AuthPermission(["module_monitor:cache:query"]))],
  36. summary="获取缓存名称列表",
  37. description="获取缓存名称列表",
  38. response_model=ResponseSchema[list[CacheInfoSchema]],
  39. )
  40. async def get_monitor_cache_name_controller() -> JSONResponse:
  41. """
  42. 获取缓存名称列表
  43. 返回:
  44. - JSONResponse: 包含缓存名称列表的JSON响应
  45. """
  46. result = await CacheService.get_cache_monitor_cache_name_service()
  47. log.info("获取缓存名称列表成功")
  48. return SuccessResponse(data=result, msg="获取缓存名称列表成功")
  49. @CacheRouter.get(
  50. "/get/keys/{cache_name}",
  51. dependencies=[Depends(AuthPermission(["module_monitor:cache:query"]))],
  52. summary="获取缓存键名列表",
  53. description="获取缓存键名列表",
  54. response_model=ResponseSchema[list[CacheInfoSchema]],
  55. )
  56. async def get_monitor_cache_key_controller(
  57. cache_name: str, redis: Annotated[Redis, Depends(redis_getter)]
  58. ) -> JSONResponse:
  59. """
  60. 获取指定缓存名称下的键名列表
  61. 参数:
  62. - cache_name (str): 缓存名称
  63. 返回:
  64. - JSONResponse: 包含缓存键名列表的JSON响应
  65. """
  66. result = await CacheService.get_cache_monitor_cache_key_service(
  67. redis=redis, cache_name=cache_name
  68. )
  69. log.info(f"获取缓存{cache_name}的键名列表成功")
  70. return SuccessResponse(data=result, msg=f"获取缓存{cache_name}的键名列表成功")
  71. @CacheRouter.get(
  72. "/get/value/{cache_name}/{cache_key}",
  73. dependencies=[Depends(AuthPermission(["module_monitor:cache:query"]))],
  74. summary="获取缓存值",
  75. description="获取缓存值",
  76. response_model=ResponseSchema[CacheInfoSchema],
  77. )
  78. async def get_monitor_cache_value_controller(
  79. cache_name: str,
  80. cache_key: str,
  81. redis: Annotated[Redis, Depends(redis_getter)],
  82. ) -> JSONResponse:
  83. """
  84. 获取指定缓存键的值
  85. 参数:
  86. - cache_name (str): 缓存名称
  87. - cache_key (str): 缓存键
  88. 返回:
  89. - JSONResponse: 包含缓存值的JSON响应
  90. """
  91. result = await CacheService.get_cache_monitor_cache_value_service(
  92. redis=redis, cache_name=cache_name, cache_key=cache_key
  93. )
  94. log.info(f"获取缓存{cache_name}:{cache_key}的值成功")
  95. return SuccessResponse(data=result, msg=f"获取缓存{cache_name}:{cache_key}的值成功")
  96. @CacheRouter.delete(
  97. "/delete/name/{cache_name}",
  98. dependencies=[Depends(AuthPermission(["module_monitor:cache:delete"]))],
  99. summary="清除指定缓存名称的所有缓存",
  100. description="清除指定缓存名称的所有缓存",
  101. response_model=ResponseSchema[None],
  102. )
  103. async def clear_monitor_cache_name_controller(
  104. cache_name: str, redis: Annotated[Redis, Depends(redis_getter)]
  105. ) -> JSONResponse:
  106. """
  107. 清除指定缓存名称下的所有缓存
  108. 参数:
  109. - cache_name (str): 缓存名称
  110. 返回:
  111. - JSONResponse: 包含清除结果的JSON响应
  112. """
  113. result = await CacheService.clear_cache_monitor_cache_name_service(
  114. redis=redis, cache_name=cache_name
  115. )
  116. if not result:
  117. raise CustomException(msg="清除缓存失败", data=result)
  118. log.info(f"清除缓存{cache_name}成功")
  119. return SuccessResponse(msg=f"{cache_name}对应键值清除成功", data=result)
  120. @CacheRouter.delete(
  121. "/delete/key/{cache_key}",
  122. dependencies=[Depends(AuthPermission(["module_monitor:cache:delete"]))],
  123. summary="清除指定缓存键",
  124. description="清除指定缓存键",
  125. response_model=ResponseSchema[None],
  126. )
  127. async def clear_monitor_cache_key_controller(
  128. cache_key: str, redis: Annotated[Redis, Depends(redis_getter)]
  129. ) -> JSONResponse:
  130. """
  131. 清除指定缓存键
  132. 参数:
  133. - cache_key (str): 缓存键
  134. 返回:
  135. - JSONResponse: 包含清除结果的JSON响应
  136. """
  137. result = await CacheService.clear_cache_monitor_cache_key_service(
  138. redis=redis, cache_key=cache_key
  139. )
  140. if not result:
  141. raise CustomException(msg="清除缓存失败", data=result)
  142. log.info(f"清除缓存键{cache_key}成功")
  143. return SuccessResponse(msg=f"{cache_key}清除成功", data=result)
  144. @CacheRouter.delete(
  145. "/delete/all",
  146. dependencies=[Depends(AuthPermission(["module_monitor:cache:delete"]))],
  147. summary="清除所有缓存",
  148. description="清除所有缓存",
  149. response_model=ResponseSchema[None],
  150. )
  151. async def clear_monitor_cache_all_controller(
  152. redis: Annotated[Redis, Depends(redis_getter)],
  153. ) -> JSONResponse:
  154. """
  155. 清除所有缓存
  156. 参数:
  157. - redis (Redis): Redis 客户端对象
  158. 返回:
  159. - JSONResponse: 包含清除结果的JSON响应
  160. """
  161. result = await CacheService.clear_cache_monitor_all_service(redis=redis)
  162. if not result:
  163. raise CustomException(msg="清除缓存失败", data=result)
  164. log.info("清除所有缓存成功")
  165. return SuccessResponse(msg="所有缓存清除成功", data=result)