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 | /cache | monitor:cache:list | — | CacheApiApp.GetInfo |
| GET | /loginInfo/list | monitor:logininfo:list | — | LoginInfoApiApp.List |
| POST | /loginInfo/export | monitor:logininfo:export | OP(loginInfo,Export) | LoginInfoApiApp.Export |
| DELETE | /loginInfo/clean | monitor:logininfo:remove | OP(loginInfo,Clean) | LoginInfoApiApp.Clean |
| DELETE | /loginInfo/:infoIds | monitor:logininfo:remove | OP(loginInfo,Delete) | LoginInfoApiApp.Remove |
| GET | /loginInfo/unlock/:userName | monitor:logininfo:unlock | OP(loginInfo,Other) RS | LoginInfoApiApp.Unlock |
| GET | /operlog/list | monitor:operlog:list | — | OperLogApiApp.List |
| POST | /operlog/export | monitor:operlog:export | OP(operLog,Export) | OperLogApiApp.Export |
| DELETE | /operlog/clean | monitor:operlog:remove | OP(operLog,Clean) | OperLogApiApp.Clean |
| DELETE | /operlog/:operIds | monitor:operlog:remove | OP(operLog,Delete) | OperLogApiApp.Remove |
| GET | /online/list | monitor:online:list | — | UserOnlineApiApp.List |
| DELETE | /online/:tokenId | monitor:online:forceLogout | OP(userOnline,Force) RS | UserOnlineApiApp.ForceLogout |
| GET | /online | (无——handler 自行 CheckLogin) | — | UserOnlineApiApp.GetInfo |
| DELETE | /online/myself/:tokenId | (无) | OP(userDevice,Force) RS | UserOnlineApiApp.Remove |
| GET | /ping | public | — | inline {"module":"monitor",...} |
中间件图例:OP=oplog.Log(title,type),RS=repeatsubmit.RepeatSubmit(0,""),ENC=encrypt.ApiEncrypt()。
Services
位于 internal/monitor/service/:
| Service(单例) | 职责 |
|---|---|
CacheSvc(CacheSvcApp) | 返回 Redis 服务端信息、db 大小、command-stats 饼图数据;直接调 pkg/redis。 |
LoginInfoSvc(LoginInfoSvcApp) | monitor 侧登录日志 query/delete/clean/unlock——记录在 system.LoginInfoSvcApp;unlock 清除 Redis 中 pwd_err_cnt 锁键。 |
OnlineSvc(OnlineSvcApp) | 扫描 online_tokens:* 键列出在线会话(非 sa-token 的 token 命名空间);按 IP / 用户名过滤。 |
OperLogSvc(OperLogSvcApp) | monitor 侧操作日志 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()。