feat: 优化用户等级刷新测试,默认24h扫描一次,可以通过TIMER_FREQUENCY设置时间单位是小时
This commit is contained in:
parent
b86a3acd37
commit
1aba1e4ac3
@ -99,6 +99,7 @@ var requestInterval, _ = strconv.Atoi(os.Getenv("POLLING_INTERVAL"))
|
|||||||
var RequestInterval = time.Duration(requestInterval) * time.Second
|
var RequestInterval = time.Duration(requestInterval) * time.Second
|
||||||
|
|
||||||
var SyncFrequency = env.Int("SYNC_FREQUENCY", 10*60) // unit is second
|
var SyncFrequency = env.Int("SYNC_FREQUENCY", 10*60) // unit is second
|
||||||
|
var TimerFrequency = env.Int("TIMER_FREQUENCY", 24) // unit is hour
|
||||||
|
|
||||||
var BatchUpdateEnabled = false
|
var BatchUpdateEnabled = false
|
||||||
var BatchUpdateInterval = env.Int("BATCH_UPDATE_INTERVAL", 5)
|
var BatchUpdateInterval = env.Int("BATCH_UPDATE_INTERVAL", 5)
|
||||||
|
3
main.go
3
main.go
@ -73,6 +73,8 @@ func main() {
|
|||||||
go model.SyncOptions(config.SyncFrequency)
|
go model.SyncOptions(config.SyncFrequency)
|
||||||
go model.SyncChannelCache(config.SyncFrequency)
|
go model.SyncChannelCache(config.SyncFrequency)
|
||||||
}
|
}
|
||||||
|
go model.ScheduleCheckAndDowngrade(config.TimerFrequency)
|
||||||
|
|
||||||
if os.Getenv("CHANNEL_TEST_FREQUENCY") != "" {
|
if os.Getenv("CHANNEL_TEST_FREQUENCY") != "" {
|
||||||
frequency, err := strconv.Atoi(os.Getenv("CHANNEL_TEST_FREQUENCY"))
|
frequency, err := strconv.Atoi(os.Getenv("CHANNEL_TEST_FREQUENCY"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -112,4 +114,5 @@ func main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
logger.FatalLog("failed to start HTTP server: " + err.Error())
|
logger.FatalLog("failed to start HTTP server: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -78,6 +78,14 @@ func InitOptionMap() {
|
|||||||
loadOptionsFromDatabase()
|
loadOptionsFromDatabase()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ScheduleCheckAndDowngrade(intervalHours int) {
|
||||||
|
for {
|
||||||
|
logger.SysLog("Check user group levels.")
|
||||||
|
checkAndDowngradeUsers()
|
||||||
|
time.Sleep(time.Duration(intervalHours) * time.Hour)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func loadOptionsFromDatabase() {
|
func loadOptionsFromDatabase() {
|
||||||
options, _ := AllOption()
|
options, _ := AllOption()
|
||||||
for _, option := range options {
|
for _, option := range options {
|
||||||
@ -95,9 +103,6 @@ func SyncOptions(frequency int) {
|
|||||||
for {
|
for {
|
||||||
time.Sleep(time.Duration(frequency) * time.Second)
|
time.Sleep(time.Duration(frequency) * time.Second)
|
||||||
logger.SysLog("syncing options from database")
|
logger.SysLog("syncing options from database")
|
||||||
if config.IsMasterNode {
|
|
||||||
checkAndDowngradeUsers()
|
|
||||||
}
|
|
||||||
loadOptionsFromDatabase()
|
loadOptionsFromDatabase()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -459,38 +459,21 @@ func GetUsernameById(id int) (username string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func checkAndDowngradeUsers() {
|
func checkAndDowngradeUsers() {
|
||||||
var users []User
|
// 获取当前时间的 Unix 时间戳
|
||||||
|
currentTime := time.Now().Unix()
|
||||||
|
|
||||||
// 查询所有 Group 不为 "default" 的用户
|
// 构建更新条件并执行更新
|
||||||
// 构建查询条件
|
result := DB.Model(&User{}).
|
||||||
query := DB.Where("`Group` <> ?", "default"). // Group 不等于 "default"
|
Where("`Group` <> ?", "default").
|
||||||
Where("`username` <> ?", "root"). // username 不等于 "root"
|
Where("`username` <> ?", "root").
|
||||||
Where("`expiration_date` IS NOT NULL"). // expiration_date 不为空
|
Where("`expiration_date` IS NOT NULL").
|
||||||
Where("`expiration_date` != ?", -1) // expiration_date 不等于 -1
|
Where("`expiration_date` != ?", -1).
|
||||||
|
Where("`expiration_date` < ?", currentTime).
|
||||||
|
Update("Group", "default")
|
||||||
|
|
||||||
// 执行查询并处理错误
|
// 处理错误
|
||||||
if err := query.Find(&users).Error; err != nil {
|
if result.Error != nil {
|
||||||
log.Printf("查询用户失败: %v", err)
|
log.Printf("批量更新用户分组失败: %v", result.Error)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
currentTime := time.Now()
|
|
||||||
|
|
||||||
for _, user := range users {
|
|
||||||
if user.Group != "default" {
|
|
||||||
// 将时间戳转换为 time.Time 类型
|
|
||||||
expirationTime := time.Unix(user.ExpirationDate, 0)
|
|
||||||
|
|
||||||
// 比较当前时间和到期时间
|
|
||||||
if expirationTime.Before(currentTime) {
|
|
||||||
// 降级为 default
|
|
||||||
user.Group = "default"
|
|
||||||
if err := DB.Model(&user).Updates(user).Error; err != nil {
|
|
||||||
log.Printf("更新用户 %s 失败: %v", user.Username, err)
|
|
||||||
} else {
|
|
||||||
fmt.Printf("用户: %s, 特权组过期降为 default\n", user.Username)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user