You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
2.3 KiB
Python

from typing import Annotated
from fastapi import APIRouter, Body, Depends
from fastapi.responses import JSONResponse
from redis.asyncio.client import Redis
from app.common.request import PaginationService
from app.common.response import ResponseSchema, SuccessResponse
from app.core.base_params import PaginationQueryParam
from app.core.dependencies import AuthPermission, redis_getter
from app.core.router_class import OperationLogRoute
from .schema import OnlineOutSchema, OnlineQueryParam
from .service import OnlineService
OnlineRouter = APIRouter(route_class=OperationLogRoute, prefix="/online", tags=["系统监控", "在线用户"])
@OnlineRouter.get(
"/list",
dependencies=[Depends(AuthPermission(["module_monitor:online:query"]))],
summary="获取在线用户列表",
response_model=ResponseSchema[list[OnlineOutSchema]],
)
async def get_online_list_controller(
redis: Annotated[Redis, Depends(redis_getter)],
paging_query: Annotated[PaginationQueryParam, Depends()],
search: Annotated[OnlineQueryParam, Depends()],
) -> JSONResponse:
result_dict_list = await OnlineService.get_online_list(redis=redis, search=search)
result_dict = await PaginationService.paginate(
data_list=result_dict_list,
page_no=paging_query.page_no,
page_size=paging_query.page_size,
)
return SuccessResponse(data=result_dict, msg="获取成功")
@OnlineRouter.delete(
"/delete",
dependencies=[Depends(AuthPermission(["module_monitor:online:delete"]))],
summary="强制下线",
response_model=ResponseSchema[None],
)
async def delete_online_controller(
session_id: Annotated[str, Body(description="会话编号")],
redis: Annotated[Redis, Depends(redis_getter)],
) -> JSONResponse:
await OnlineService.delete_online(redis=redis, session_id=session_id)
return SuccessResponse(msg="强制下线成功")
@OnlineRouter.delete(
"/clear",
dependencies=[Depends(AuthPermission(["module_monitor:online:delete"]))],
summary="清除所有在线用户",
response_model=ResponseSchema[None],
)
async def clear_online_controller(
redis: Annotated[Redis, Depends(redis_getter)],
) -> JSONResponse:
await OnlineService.clear_online(redis=redis)
return SuccessResponse(msg="清除所有在线用户成功")