func (s *MemcacheStats) publishMainStats() { s.mu.Lock() defer s.mu.Unlock() s.main = make(map[string]string) for key, isstr := range mainStringMetrics { key := key if isstr { s.main[key] = "" stats.Publish(s.cachePool.name+"Memcache"+formatKey(key), stats.StringFunc(func() string { s.mu.Lock() defer s.mu.Unlock() return s.main[key] })) } else { s.main[key] = "0" stats.Publish(s.cachePool.name+"Memcache"+formatKey(key), stats.IntFunc(func() int64 { s.mu.Lock() defer s.mu.Unlock() ival, err := strconv.ParseInt(s.main[key], 10, 64) if err != nil { log.Errorf("value '%v' for key %v is not an int", s.main[key], key) internalErrors.Add("MemcacheStats", 1) return -1 } return ival })) } } }
func (s *MemcacheStats) publishSlabsStats() { s.mu.Lock() defer s.mu.Unlock() s.slabs = make(map[string]map[string]int64) for key, isSingle := range slabsSingleMetrics { key := key s.slabs[key] = make(map[string]int64) if isSingle { stats.Publish(s.cachePool.name+"MemcacheSlabs"+formatKey(key), stats.IntFunc(func() int64 { s.mu.Lock() defer s.mu.Unlock() return s.slabs[key][""] })) } else { stats.Publish(s.cachePool.name+"MemcacheSlabs"+formatKey(key), stats.CountersFunc(func() map[string]int64 { s.mu.Lock() defer s.mu.Unlock() return copyMap(s.slabs[key]) })) } } }