feat: 缓存列表,监控,性能监控添加按钮级权限控制
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
from fastapi import APIRouter, Depends, Path, Request
|
from fastapi import APIRouter, Depends, Path, Request
|
||||||
from fastapi.responses import JSONResponse
|
from fastapi.responses import JSONResponse
|
||||||
|
|
||||||
|
from annotation.auth import Auth
|
||||||
from annotation.log import Log
|
from annotation.log import Log
|
||||||
from config.constant import BusinessType, RedisKeyConfig
|
from config.constant import BusinessType, RedisKeyConfig
|
||||||
from controller.login import LoginController
|
from controller.login import LoginController
|
||||||
@@ -26,6 +27,7 @@ cacheAPI = APIRouter(
|
|||||||
@cacheAPI.get("/monitor", response_class=JSONResponse, response_model=GetCacheMonitorResponse,
|
@cacheAPI.get("/monitor", response_class=JSONResponse, response_model=GetCacheMonitorResponse,
|
||||||
summary="获取缓存监控信息")
|
summary="获取缓存监控信息")
|
||||||
@Log(title="获取缓存监控信息", business_type=BusinessType.SELECT)
|
@Log(title="获取缓存监控信息", business_type=BusinessType.SELECT)
|
||||||
|
@Auth(permission_list=['cache:btn:infoList'])
|
||||||
async def get_cache_info(request: Request):
|
async def get_cache_info(request: Request):
|
||||||
info = await request.app.state.redis.info()
|
info = await request.app.state.redis.info()
|
||||||
db_size = await request.app.state.redis.dbsize()
|
db_size = await request.app.state.redis.dbsize()
|
||||||
@@ -45,6 +47,7 @@ async def get_cache_info(request: Request):
|
|||||||
@cacheAPI.get("/names", response_class=JSONResponse, response_model=GetCacheInfoResponse,
|
@cacheAPI.get("/names", response_class=JSONResponse, response_model=GetCacheInfoResponse,
|
||||||
summary="获取缓存名称列表")
|
summary="获取缓存名称列表")
|
||||||
@Log(title="获取缓存名称列表", business_type=BusinessType.SELECT)
|
@Log(title="获取缓存名称列表", business_type=BusinessType.SELECT)
|
||||||
|
@Auth(permission_list=['cache:btn:list'])
|
||||||
async def get_cache_names(request: Request):
|
async def get_cache_names(request: Request):
|
||||||
name_list = []
|
name_list = []
|
||||||
for key_config in RedisKeyConfig:
|
for key_config in RedisKeyConfig:
|
||||||
@@ -62,6 +65,7 @@ async def get_cache_names(request: Request):
|
|||||||
@cacheAPI.get("/keys/{cacheName}", response_class=JSONResponse, response_model=GetCacheKeysListResponse,
|
@cacheAPI.get("/keys/{cacheName}", response_class=JSONResponse, response_model=GetCacheKeysListResponse,
|
||||||
summary="获取缓存键名列表")
|
summary="获取缓存键名列表")
|
||||||
@Log(title="获取缓存键名列表", business_type=BusinessType.SELECT)
|
@Log(title="获取缓存键名列表", business_type=BusinessType.SELECT)
|
||||||
|
@Auth(permission_list=['cache:btn:list'])
|
||||||
async def get_cache_keys(request: Request, cacheName: str = Path(description="缓存名称")):
|
async def get_cache_keys(request: Request, cacheName: str = Path(description="缓存名称")):
|
||||||
cache_keys = await request.app.state.redis.keys(f'{cacheName}*')
|
cache_keys = await request.app.state.redis.keys(f'{cacheName}*')
|
||||||
cache_key_list = [key.split(':', 1)[1] for key in cache_keys if key.startswith(f'{cacheName}:')]
|
cache_key_list = [key.split(':', 1)[1] for key in cache_keys if key.startswith(f'{cacheName}:')]
|
||||||
@@ -71,6 +75,7 @@ async def get_cache_keys(request: Request, cacheName: str = Path(description="
|
|||||||
@cacheAPI.get("/info/{cacheName}/{cacheKey}", response_class=JSONResponse, response_model=GetCacheInfoResponse,
|
@cacheAPI.get("/info/{cacheName}/{cacheKey}", response_class=JSONResponse, response_model=GetCacheInfoResponse,
|
||||||
summary="获取缓存信息")
|
summary="获取缓存信息")
|
||||||
@Log(title="获取缓存信息", business_type=BusinessType.SELECT)
|
@Log(title="获取缓存信息", business_type=BusinessType.SELECT)
|
||||||
|
@Auth(permission_list=['cache:btn:info'])
|
||||||
async def get_cache_info(request: Request, cacheName: str = Path(description="缓存名称"),
|
async def get_cache_info(request: Request, cacheName: str = Path(description="缓存名称"),
|
||||||
cacheKey: str = Path(description="缓存键名")):
|
cacheKey: str = Path(description="缓存键名")):
|
||||||
cache_value = await request.app.state.redis.get(f'{cacheName}:{cacheKey}')
|
cache_value = await request.app.state.redis.get(f'{cacheName}:{cacheKey}')
|
||||||
@@ -88,6 +93,7 @@ async def get_cache_info(request: Request, cacheName: str = Path(description="
|
|||||||
@cacheAPI.post("/cacheName/{name}", response_class=JSONResponse, response_model=BaseResponse,
|
@cacheAPI.post("/cacheName/{name}", response_class=JSONResponse, response_model=BaseResponse,
|
||||||
summary="通过键名删除缓存")
|
summary="通过键名删除缓存")
|
||||||
@Log(title="通过键名删除缓存", business_type=BusinessType.DELETE)
|
@Log(title="通过键名删除缓存", business_type=BusinessType.DELETE)
|
||||||
|
@Auth(permission_list=['cache:btn:delete'])
|
||||||
async def delete_cache(request: Request, name: str = Path(description="缓存名称")):
|
async def delete_cache(request: Request, name: str = Path(description="缓存名称")):
|
||||||
cache_keys = await request.app.state.redis.keys(f'{name}*')
|
cache_keys = await request.app.state.redis.keys(f'{name}*')
|
||||||
if cache_keys:
|
if cache_keys:
|
||||||
@@ -99,6 +105,7 @@ async def delete_cache(request: Request, name: str = Path(description="缓存名
|
|||||||
summary="通过键值删除缓存")
|
summary="通过键值删除缓存")
|
||||||
@cacheAPI.post("/cacheKey/{key}", response_class=JSONResponse, response_model=BaseResponse, summary="通过键值删除缓存")
|
@cacheAPI.post("/cacheKey/{key}", response_class=JSONResponse, response_model=BaseResponse, summary="通过键值删除缓存")
|
||||||
@Log(title="通过键值删除缓存", business_type=BusinessType.DELETE)
|
@Log(title="通过键值删除缓存", business_type=BusinessType.DELETE)
|
||||||
|
@Auth(permission_list=['cache:btn:delete'])
|
||||||
async def delete_cache_key(request: Request, key: str = Path(description="缓存键名")):
|
async def delete_cache_key(request: Request, key: str = Path(description="缓存键名")):
|
||||||
cache_keys = await request.app.state.redis.keys(f'*{key}')
|
cache_keys = await request.app.state.redis.keys(f'*{key}')
|
||||||
if cache_keys:
|
if cache_keys:
|
||||||
@@ -109,6 +116,7 @@ async def delete_cache_key(request: Request, key: str = Path(description="缓存
|
|||||||
@cacheAPI.delete("/clearAll", response_class=JSONResponse, response_model=BaseResponse, summary="删除所有缓存")
|
@cacheAPI.delete("/clearAll", response_class=JSONResponse, response_model=BaseResponse, summary="删除所有缓存")
|
||||||
@cacheAPI.post("/clearAll", response_class=JSONResponse, response_model=BaseResponse, summary="删除所有缓存")
|
@cacheAPI.post("/clearAll", response_class=JSONResponse, response_model=BaseResponse, summary="删除所有缓存")
|
||||||
@Log(title="删除所有缓存", business_type=BusinessType.DELETE)
|
@Log(title="删除所有缓存", business_type=BusinessType.DELETE)
|
||||||
|
@Auth(permission_list=['cache:btn:delete'])
|
||||||
async def delete_all_cache(request: Request):
|
async def delete_all_cache(request: Request):
|
||||||
cache_keys = await request.app.state.redis.keys()
|
cache_keys = await request.app.state.redis.keys()
|
||||||
if cache_keys:
|
if cache_keys:
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from fastapi.responses import JSONResponse
|
|||||||
|
|
||||||
from annotation.auth import Auth
|
from annotation.auth import Auth
|
||||||
from annotation.log import Log
|
from annotation.log import Log
|
||||||
from config.constant import BusinessType
|
from config.constant import BusinessType, RedisKeyConfig
|
||||||
from controller.login import LoginController
|
from controller.login import LoginController
|
||||||
from models import Permission
|
from models import Permission
|
||||||
from schemas.common import BaseResponse
|
from schemas.common import BaseResponse
|
||||||
@@ -53,6 +53,14 @@ async def add_permission(request: Request, params: AddPermissionParams):
|
|||||||
hidden_tag=params.hidden_tag,
|
hidden_tag=params.hidden_tag,
|
||||||
)
|
)
|
||||||
if permission:
|
if permission:
|
||||||
|
# 更新用户信息缓存
|
||||||
|
userInfos = await request.app.state.redis.keys(f'{RedisKeyConfig.USER_INFO.key}*')
|
||||||
|
if userInfos:
|
||||||
|
await request.app.state.redis.delete(*userInfos)
|
||||||
|
# 更新用户路由缓存
|
||||||
|
userRoutes = await request.app.state.redis.keys(f'{RedisKeyConfig.USER_ROUTES.key}*')
|
||||||
|
if userRoutes:
|
||||||
|
await request.app.state.redis.delete(*userRoutes)
|
||||||
return Response.success(msg="新增权限成功!")
|
return Response.success(msg="新增权限成功!")
|
||||||
else:
|
else:
|
||||||
return Response.error(msg="新增权限失败!")
|
return Response.error(msg="新增权限失败!")
|
||||||
@@ -66,6 +74,14 @@ async def delete_permission(request: Request, id: str = Path(description="权限
|
|||||||
if permission := await Permission.get_or_none(id=id, del_flag=1):
|
if permission := await Permission.get_or_none(id=id, del_flag=1):
|
||||||
permission.del_flag = 0
|
permission.del_flag = 0
|
||||||
await permission.save()
|
await permission.save()
|
||||||
|
# 更新用户信息缓存
|
||||||
|
userInfos = await request.app.state.redis.keys(f'{RedisKeyConfig.USER_INFO.key}*')
|
||||||
|
if userInfos:
|
||||||
|
await request.app.state.redis.delete(*userInfos)
|
||||||
|
# 更新用户路由缓存
|
||||||
|
userRoutes = await request.app.state.redis.keys(f'{RedisKeyConfig.USER_ROUTES.key}*')
|
||||||
|
if userRoutes:
|
||||||
|
await request.app.state.redis.delete(*userRoutes)
|
||||||
return Response.success(msg="删除权限成功!")
|
return Response.success(msg="删除权限成功!")
|
||||||
else:
|
else:
|
||||||
return Response.error(msg="删除权限失败,权限不存在!")
|
return Response.error(msg="删除权限失败,权限不存在!")
|
||||||
@@ -99,6 +115,14 @@ async def update_permission(request: Request, params: AddPermissionParams, id: s
|
|||||||
permission.fixed_tag = params.fixed_tag
|
permission.fixed_tag = params.fixed_tag
|
||||||
permission.hidden_tag = params.hidden_tag
|
permission.hidden_tag = params.hidden_tag
|
||||||
await permission.save()
|
await permission.save()
|
||||||
|
# 更新用户信息缓存
|
||||||
|
userInfos = await request.app.state.redis.keys(f'{RedisKeyConfig.USER_INFO.key}*')
|
||||||
|
if userInfos:
|
||||||
|
await request.app.state.redis.delete(*userInfos)
|
||||||
|
# 更新用户路由缓存
|
||||||
|
userRoutes = await request.app.state.redis.keys(f'{RedisKeyConfig.USER_ROUTES.key}*')
|
||||||
|
if userRoutes:
|
||||||
|
await request.app.state.redis.delete(*userRoutes)
|
||||||
return Response.success(msg="更新权限成功!")
|
return Response.success(msg="更新权限成功!")
|
||||||
else:
|
else:
|
||||||
return Response.error(msg="更新权限失败,权限不存在!")
|
return Response.error(msg="更新权限失败,权限不存在!")
|
||||||
|
|||||||
@@ -14,12 +14,14 @@ import psutil
|
|||||||
from fastapi import APIRouter, Depends, Request
|
from fastapi import APIRouter, Depends, Request
|
||||||
from fastapi.responses import JSONResponse
|
from fastapi.responses import JSONResponse
|
||||||
|
|
||||||
|
from annotation.auth import Auth
|
||||||
from annotation.log import Log
|
from annotation.log import Log
|
||||||
from config.constant import BusinessType
|
from config.constant import BusinessType
|
||||||
from controller.login import LoginController
|
from controller.login import LoginController
|
||||||
from schemas.server import GetServerInfoResponse, CpuInfo, MemoryInfo, SystemInfo, PythonInfo, SystemFiles, \
|
from schemas.server import GetServerInfoResponse, CpuInfo, MemoryInfo, SystemInfo, PythonInfo, SystemFiles, \
|
||||||
GetSystemInfoResult
|
GetSystemInfoResult
|
||||||
from utils.common import bytes2human
|
from utils.common import bytes2human
|
||||||
|
from utils.log import logger
|
||||||
from utils.response import Response
|
from utils.response import Response
|
||||||
|
|
||||||
serverAPI = APIRouter(
|
serverAPI = APIRouter(
|
||||||
@@ -30,6 +32,7 @@ serverAPI = APIRouter(
|
|||||||
|
|
||||||
@serverAPI.get("", response_class=JSONResponse, response_model=GetServerInfoResponse, summary="获取服务器信息")
|
@serverAPI.get("", response_class=JSONResponse, response_model=GetServerInfoResponse, summary="获取服务器信息")
|
||||||
@Log(title="获取服务器信息", business_type=BusinessType.SELECT)
|
@Log(title="获取服务器信息", business_type=BusinessType.SELECT)
|
||||||
|
@Auth(permission_list=["server:btn:info"])
|
||||||
async def get_server_info(request: Request):
|
async def get_server_info(request: Request):
|
||||||
# CPU信息
|
# CPU信息
|
||||||
# 获取CPU总核心数
|
# 获取CPU总核心数
|
||||||
@@ -96,17 +99,21 @@ async def get_server_info(request: Request):
|
|||||||
io = psutil.disk_partitions()
|
io = psutil.disk_partitions()
|
||||||
sys_files = []
|
sys_files = []
|
||||||
for i in io:
|
for i in io:
|
||||||
o = psutil.disk_usage(i.device)
|
try:
|
||||||
disk_data = SystemFiles(
|
o = psutil.disk_usage(i.device)
|
||||||
dirName=i.device,
|
disk_data = SystemFiles(
|
||||||
sysTypeName=i.fstype,
|
dirName=i.device,
|
||||||
typeName='本地固定磁盘(' + i.mountpoint.replace('\\', '') + ')',
|
sysTypeName=i.fstype,
|
||||||
total=bytes2human(o.total),
|
typeName='本地固定磁盘(' + i.mountpoint.replace('\\', '') + ')',
|
||||||
used=bytes2human(o.used),
|
total=bytes2human(o.total),
|
||||||
free=bytes2human(o.free),
|
used=bytes2human(o.used),
|
||||||
usage=f'{psutil.disk_usage(i.device).percent}%',
|
free=bytes2human(o.free),
|
||||||
)
|
usage=f'{psutil.disk_usage(i.device).percent}%',
|
||||||
sys_files.append(disk_data)
|
)
|
||||||
|
sys_files.append(disk_data)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"获取磁盘信息失败:{e}")
|
||||||
|
continue
|
||||||
|
|
||||||
result = GetSystemInfoResult(cpu=cpu, memory=mem, system=sys, python=py, systemFiles=sys_files)
|
result = GetSystemInfoResult(cpu=cpu, memory=mem, system=sys, python=py, systemFiles=sys_files)
|
||||||
return Response.success(data=result)
|
return Response.success(data=result)
|
||||||
|
|||||||
Reference in New Issue
Block a user