Skip to content

monitor 模块

运行时监控模块。承担 Redis 缓存信息查看、登录日志 list/export/clean/unlock、操作日志 list/export/clean、在线用户 list/强制下线/自我踢出。复用 auth 写入的 sa-token 会话(同一 Redis)。读路径直接打 Redis(cache / online)或经 GORM 调用 system 的 repository(login-info / oper-log)。

前缀:standalone /monitor,modular ""。探针:GET /monitor/ping

组中间件顺序:TokenInterceptor + AuditContext(AuditContext 必要——login-info / online 的 delete / export / unlock 携带 @Log)。

路由表

方法路径鉴权中间件Handler
GET/cachemonitor:cache:listCacheApiApp.GetInfo
GET/loginInfo/listmonitor:logininfo:listLoginInfoApiApp.List
POST/loginInfo/exportmonitor:logininfo:exportOP(loginInfo,Export)LoginInfoApiApp.Export
DELETE/loginInfo/cleanmonitor:logininfo:removeOP(loginInfo,Clean)LoginInfoApiApp.Clean
DELETE/loginInfo/:infoIdsmonitor:logininfo:removeOP(loginInfo,Delete)LoginInfoApiApp.Remove
GET/loginInfo/unlock/:userNamemonitor:logininfo:unlockOP(loginInfo,Other) RSLoginInfoApiApp.Unlock
GET/operlog/listmonitor:operlog:listOperLogApiApp.List
POST/operlog/exportmonitor:operlog:exportOP(operLog,Export)OperLogApiApp.Export
DELETE/operlog/cleanmonitor:operlog:removeOP(operLog,Clean)OperLogApiApp.Clean
DELETE/operlog/:operIdsmonitor:operlog:removeOP(operLog,Delete)OperLogApiApp.Remove
GET/online/listmonitor:online:listUserOnlineApiApp.List
DELETE/online/:tokenIdmonitor:online:forceLogoutOP(userOnline,Force) RSUserOnlineApiApp.ForceLogout
GET/online(无——handler 自行 CheckLogin)UserOnlineApiApp.GetInfo
DELETE/online/myself/:tokenId(无)OP(userDevice,Force) RSUserOnlineApiApp.Remove
GET/pingpublicinline {"module":"monitor",...}

中间件图例:OP=oplog.Log(title,type)RS=repeatsubmit.RepeatSubmit(0,"")ENC=encrypt.ApiEncrypt()

Services

位于 internal/monitor/service/

Service(单例)职责
CacheSvcCacheSvcApp返回 Redis 服务端信息、db 大小、command-stats 饼图数据;直接调 pkg/redis
LoginInfoSvcLoginInfoSvcAppmonitor 侧登录日志 query/delete/clean/unlock——记录在 system.LoginInfoSvcApp;unlock 清除 Redis 中 pwd_err_cnt 锁键。
OnlineSvcOnlineSvcApp扫描 online_tokens:* 键列出在线会话(非 sa-token 的 token 命名空间);按 IP / 用户名过滤。
OperLogSvcOperLogSvcAppmonitor 侧操作日志 query/delete/clean——记录在 system.OperLogSvcApp

设计要点

online 的拆分鉴权 list 与 forceLogout 需要 monitor:online:* 权限码;GET /online

DELETE /online/myself/:tokenId 无中间件级鉴权——handler 自行 CheckLogin,使用户可查看 / 踢出自己的会话。

/myself/:tokenId/:tokenId 参数个数不同,gin 路由无冲突。

clean(静态)与 /:ids 共存——gin 优先静态路径;两者复用 remove 权限码。

unlock 是 monitor 中唯一带 RepeatSubmit 的端点。

无自有 repository monitor 没有自己的 repository——login-info 与 oper-log 服务直接调

systemrepo.NewLoginInfoRepository / NewOperLogRepository;cache 与 online 服务直接调 pkg/redis.Client()

相关文档

基于 MIT 协议开源