package timer import ( "fmt" "math/rand" "time" "github.com/didi/nightingale/v5/cache" "github.com/didi/nightingale/v5/models" "github.com/toolkits/pkg/logger" ) func SyncMetricDesc() { if err := syncMetricDesc(); err != nil { fmt.Println("timer: sync metric desc fail:", err) exit(1) } go loopSyncMetricDesc() } func loopSyncMetricDesc() { randtime := rand.Intn(30000) fmt.Printf("timer: sync metric desc: random sleep %dms\n", randtime) time.Sleep(time.Duration(randtime) * time.Millisecond) for { time.Sleep(time.Second * time.Duration(30)) if err := syncMetricDesc(); err != nil { logger.Warning("timer: sync metric desc fail:", err) } } } func syncMetricDesc() error { start := time.Now() metricDescs, err := models.MetricDescriptionGetAll() if err != nil { logger.Error("MetricDescriptionGetAll err:", err) return err } metricDescMap := make(map[string]interface{}) for _, m := range metricDescs { metricDescMap[m.Metric] = m.Description } cache.MetricDescMapper.Clear() cache.MetricDescMapper.MSet(metricDescMap) logger.Debugf("timer: sync metric desc done, cost: %dms", time.Since(start).Milliseconds()) return nil }