feat: 更新多个模块以支持新的数据结构和日志格式

This commit is contained in:
TsMask
2025-02-20 10:08:27 +08:00
parent 045a2b6b01
commit f3c33b31ac
272 changed files with 13246 additions and 15885 deletions

View File

@@ -1,11 +1,13 @@
package controller
import (
"be.ems/src/framework/constants/cachekey"
"fmt"
"be.ems/src/framework/constants"
"be.ems/src/framework/database/redis"
"be.ems/src/framework/i18n"
"be.ems/src/framework/redis"
"be.ems/src/framework/utils/ctx"
"be.ems/src/framework/vo/result"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
"be.ems/src/modules/monitor/model"
"github.com/gin-gonic/gin"
@@ -32,138 +34,148 @@ type SysCacheController struct{}
// @Description Cache Service Information
// @Router /monitor/cache [get]
func (s *SysCacheController) Info(c *gin.Context) {
c.JSON(200, result.OkData(map[string]any{
c.JSON(200, resp.OkData(map[string]any{
"info": redis.Info(""),
"dbSize": redis.KeySize(""),
"commandStats": redis.CommandStats(""),
}))
}
// 缓存名称列表
// Names 缓存名称列表
//
// GET /getNames
func (s *SysCacheController) Names(c *gin.Context) {
language := ctx.AcceptLanguage(c)
// GET /names
func (s SysCacheController) Names(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
caches := []model.SysCache{
model.NewSysCacheNames(i18n.TKey(language, "cache.name.user"), cachekey.LOGIN_TOKEN_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.sys_config"), cachekey.SYS_CONFIG_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.sys_dict"), cachekey.SYS_DICT_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.captcha_codes"), cachekey.CAPTCHA_CODE_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.repeat_submit"), cachekey.REPEAT_SUBMIT_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.rate_limit"), cachekey.RATE_LIMIT_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.pwd_err_cnt"), cachekey.PWD_ERR_CNT_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.ne_info"), cachekey.NE_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.ne_data"), cachekey.NE_DATA_KEY),
model.NewNames(i18n.TKey(language, "cache.name.user"), constants.CACHE_LOGIN_TOKEN),
model.NewNames(i18n.TKey(language, "cache.name.sys_config"), constants.CACHE_SYS_CONFIG),
model.NewNames(i18n.TKey(language, "cache.name.sys_dict"), constants.CACHE_SYS_DICT),
model.NewNames(i18n.TKey(language, "cache.name.captcha_codes"), constants.CACHE_CAPTCHA_CODE),
model.NewNames(i18n.TKey(language, "cache.name.repeat_submit"), constants.CACHE_REPEAT_SUBMIT),
model.NewNames(i18n.TKey(language, "cache.name.rate_limit"), constants.CACHE_RATE_LIMIT),
model.NewNames(i18n.TKey(language, "cache.name.pwd_err_cnt"), constants.CACHE_PWD_ERR_COUNT),
model.NewNames(i18n.TKey(language, "cache.name.ne_info"), constants.CACHE_NE_INFO),
model.NewNames(i18n.TKey(language, "cache.name.ne_data"), constants.CACHE_NE_DATA),
}
c.JSON(200, result.OkData(caches))
c.JSON(200, resp.OkData(caches))
}
// 缓存名称下键名列表
// Keys 缓存名称下键名列表
//
// GET /getKeys/:cacheName
func (s *SysCacheController) Keys(c *gin.Context) {
language := ctx.AcceptLanguage(c)
cacheName := c.Param("cacheName")
if cacheName == "" {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
// GET /keys?cacheName=xxx
func (s SysCacheController) Keys(c *gin.Context) {
var query struct {
CacheName string `form:"cacheName" binding:"required"` // 键名列表中得到的缓存名称
}
if err := c.ShouldBindQuery(&query); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(40422, errMsgs))
return
}
caches := []model.SysCache{}
// 遍历组装
cacheKeys, _ := redis.GetKeys("", cacheName+":*")
cacheKeys, _ := redis.GetKeys("", query.CacheName+":*")
for _, key := range cacheKeys {
caches = append(caches, model.NewSysCacheKeys(cacheName, key))
caches = append(caches, model.NewKeys(query.CacheName, key))
}
c.JSON(200, result.OkData(caches))
c.JSON(200, resp.OkData(caches))
}
// 缓存内容
// Value 缓存内容信息
//
// GET /getValue/:cacheName/:cacheKey
func (s *SysCacheController) Value(c *gin.Context) {
language := ctx.AcceptLanguage(c)
cacheName := c.Param("cacheName")
cacheKey := c.Param("cacheKey")
if cacheName == "" || cacheKey == "" {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
// GET /value?cacheName=xxx&cacheKey=xxx
func (s SysCacheController) Value(c *gin.Context) {
var query struct {
CacheName string `form:"cacheName" binding:"required"` // 键名列表中得到的缓存名称
CacheKey string `form:"cacheKey" binding:"required"` // 键名列表中得到的缓存键名
}
if err := c.ShouldBindQuery(&query); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(40422, errMsgs))
return
}
cacheValue, err := redis.Get("", cacheName+":"+cacheKey)
cacheValue, err := redis.Get("", query.CacheName+":"+query.CacheKey)
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
sysCache := model.NewSysCacheValue(cacheName, cacheKey, cacheValue)
c.JSON(200, result.OkData(sysCache))
sysCache := model.NewValue(query.CacheName, query.CacheKey, cacheValue)
c.JSON(200, resp.OkData(sysCache))
}
// 删除缓存名称下键名列表
// CleanNames 缓存名称列表安全删除
//
// DELETE /clearCacheName/:cacheName
func (s *SysCacheController) ClearCacheName(c *gin.Context) {
language := ctx.AcceptLanguage(c)
cacheName := c.Param("cacheName")
if cacheName == "" {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
cacheKeys, err := redis.GetKeys("", cacheName+":*")
if err != nil {
c.JSON(200, result.ErrMsg(err.Error()))
return
}
ok, _ := redis.DelKeys("", cacheKeys)
if ok {
c.JSON(200, result.Ok(nil))
return
}
c.JSON(200, result.Err(nil))
}
// 删除缓存键名
//
// DELETE /clearCacheKey/:cacheName/:cacheKey
func (s *SysCacheController) ClearCacheKey(c *gin.Context) {
language := ctx.AcceptLanguage(c)
cacheName := c.Param("cacheName")
cacheKey := c.Param("cacheKey")
if cacheName == "" || cacheKey == "" {
c.JSON(400, result.CodeMsg(400, i18n.TKey(language, "app.common.err400")))
return
}
ok, _ := redis.Del("", cacheName+":"+cacheKey)
if ok {
c.JSON(200, result.Ok(nil))
return
}
c.JSON(200, result.Err(nil))
}
// 安全清理缓存名称
//
// DELETE /clearCacheSafe
func (s *SysCacheController) ClearCacheSafe(c *gin.Context) {
language := ctx.AcceptLanguage(c)
// DELETE /names
func (s SysCacheController) CleanNames(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
caches := []model.SysCache{
model.NewSysCacheNames(i18n.TKey(language, "cache.name.sys_config"), cachekey.SYS_CONFIG_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.sys_dict"), cachekey.SYS_DICT_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.repeat_submit"), cachekey.REPEAT_SUBMIT_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.rate_limit"), cachekey.RATE_LIMIT_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.pwd_err_cnt"), cachekey.PWD_ERR_CNT_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.ne_info"), cachekey.NE_KEY),
model.NewSysCacheNames(i18n.TKey(language, "cache.name.ne_data"), cachekey.NE_DATA_KEY),
model.NewNames(i18n.TKey(language, "cache.name.sys_config"), constants.CACHE_SYS_CONFIG),
model.NewNames(i18n.TKey(language, "cache.name.sys_dict"), constants.CACHE_SYS_DICT),
model.NewNames(i18n.TKey(language, "cache.name.repeat_submit"), constants.CACHE_REPEAT_SUBMIT),
model.NewNames(i18n.TKey(language, "cache.name.rate_limit"), constants.CACHE_RATE_LIMIT),
model.NewNames(i18n.TKey(language, "cache.name.pwd_err_cnt"), constants.CACHE_PWD_ERR_COUNT),
model.NewNames(i18n.TKey(language, "cache.name.ne_info"), constants.CACHE_NE_INFO),
model.NewNames(i18n.TKey(language, "cache.name.ne_data"), constants.CACHE_NE_DATA),
}
for _, v := range caches {
cacheKeys, err := redis.GetKeys("", v.CacheName+":*")
if err != nil {
continue
}
redis.DelKeys("", cacheKeys)
_ = redis.DelKeys("", cacheKeys)
}
c.JSON(200, result.Ok(nil))
c.JSON(200, resp.Ok(nil))
}
// CleanKeys 缓存名称下键名删除
//
// DELETE /keys?cacheName=xxx
func (s SysCacheController) CleanKeys(c *gin.Context) {
var query struct {
CacheName string `form:"cacheName" binding:"required"` // 键名列表中得到的缓存名称
}
if err := c.ShouldBindQuery(&query); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(40422, errMsgs))
return
}
if constants.CACHE_LOGIN_TOKEN == query.CacheName {
c.JSON(200, resp.ErrMsg("Cannot delete user information cache"))
return
}
cacheKeys, err := redis.GetKeys("", query.CacheName+":*")
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
if err = redis.DelKeys("", cacheKeys); err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
c.JSON(200, resp.Ok(nil))
}
// CleanValue 缓存内容删除
//
// DELETE /value?cacheName=xxx&cacheKey=xxx
func (s SysCacheController) CleanValue(c *gin.Context) {
var query struct {
CacheName string `form:"cacheName" binding:"required"` // 键名列表中得到的缓存名称
CacheKey string `form:"cacheKey" binding:"required"` // 键名列表中得到的缓存键名
}
if err := c.ShouldBindQuery(&query); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(40422, errMsgs))
return
}
if err := redis.Del("", query.CacheName+":"+query.CacheKey); err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
c.JSON(200, resp.Ok(nil))
}