Spaces:
Paused
Paused
File size: 2,402 Bytes
3392510 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
package api
import (
"augment2api/config"
"augment2api/pkg/logger"
"github.com/robfig/cron/v3"
"github.com/sirupsen/logrus"
)
// ResetTokenUsage 重置所有token的使用次数
func ResetTokenUsage() error {
// 获取所有token的key
keys, err := config.RedisKeys("token:*")
if err != nil {
return err
}
for _, key := range keys {
// 从key中提取token
token := key[6:] // 去掉前缀 "token:"
// 重置总使用次数
totalUsageKey := "token_usage:" + token
err = config.RedisSet(totalUsageKey, "0", 0) // 0表示永不过期
if err != nil {
logger.Log.WithFields(logrus.Fields{
"token": token,
"error": err,
}).Error("重置Token总使用次数失败")
continue
}
// 重置CHAT模式使用次数
chatUsageKey := "token_usage_chat:" + token
err = config.RedisSet(chatUsageKey, "0", 0) // 0表示永不过期
if err != nil {
logger.Log.WithFields(logrus.Fields{
"token": token,
"error": err,
}).Error("重置Token CHAT模式使用次数失败")
continue
}
// 重置AGENT模式使用次数
agentUsageKey := "token_usage_agent:" + token
err = config.RedisSet(agentUsageKey, "0", 0) // 0表示永不过期
if err != nil {
logger.Log.WithFields(logrus.Fields{
"token": token,
"error": err,
}).Error("重置Token AGENT模式使用次数失败")
continue
}
logger.Log.WithFields(logrus.Fields{
"token": token,
}).Info("重置token使用次数成功")
}
return nil
}
// StartTokenUsageResetScheduler 启动token使用次数重置调度器
func StartTokenUsageResetScheduler() {
// 创建cron调度器
c := cron.New(cron.WithSeconds()) // 启用秒级精度
// 添加定时任务,每月1号零点一分执行
// 格式:秒 分 时 日 月 周
_, err := c.AddFunc("0 1 0 1 * *", func() {
logger.Log.Info("开始执行Token使用次数重置任务")
err := ResetTokenUsage()
if err != nil {
logger.Log.WithFields(logrus.Fields{
"error": err,
}).Error("执行Token使用次数重置任务失败")
} else {
logger.Log.Info("Token使用次数重置任务执行完成")
}
})
if err != nil {
logger.Log.WithFields(logrus.Fields{
"error": err,
}).Error("添加Token使用次数重置定时任务失败")
return
}
// 启动cron调度器
c.Start()
logger.Log.Info("Token使用次数重置调度器启动成功!")
// 保持程序运行
select {}
}
|