package timer import ( "fmt" "math/rand" "time" "github.com/didi/nightingale/v5/cache" "github.com/didi/nightingale/v5/models" "github.com/toolkits/pkg/logger" ) // user_group_id->user_group 将数据库中的用户信息缓存在内存里, // 在生成告警事件的时候,根据用户ID快速找到用户的详情 func SyncUserGroups() { err := syncUserGroups() if err != nil { fmt.Println("timer: sync users fail:", err) exit(1) } go loopSyncUserGroups() } func loopSyncUserGroups() { randtime := rand.Intn(9000) fmt.Printf("timer: sync users: random sleep %dms\n", randtime) time.Sleep(time.Duration(randtime) * time.Millisecond) for { time.Sleep(time.Second * time.Duration(9)) err := syncUserGroups() if err != nil { logger.Warning("timer: sync users fail:", err) } } } func syncUserGroups() error { start := time.Now() userGroups, err := models.UserGroupGetAll() if err != nil { return err } userGroupsMap := make(map[int64]*models.UserGroup) for i := range userGroups { userGroupsMap[userGroups[i].Id] = &userGroups[i] } cache.UserGroupCache.SetAll(userGroupsMap) logger.Debugf("timer: sync userGroups done, cost: %dms", time.Since(start).Milliseconds()) return nil }