github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/metrics/log.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 package metrics 10 11 import ( 12 "time" 13 ) 14 15 type Logger interface { 16 Printf(format string, v ...interface{}) 17 } 18 19 func Log(r Registry, freq time.Duration, l Logger) { 20 LogScaled(r, freq, time.Nanosecond, l) 21 } 22 23 //使用给定的 24 //记录器。以“刻度”单位(如时间.毫秒)而不是纳秒打印计时。 25 func LogScaled(r Registry, freq time.Duration, scale time.Duration, l Logger) { 26 du := float64(scale) 27 duSuffix := scale.String()[1:] 28 29 for range time.Tick(freq) { 30 r.Each(func(name string, i interface{}) { 31 switch metric := i.(type) { 32 case Counter: 33 l.Printf("counter %s\n", name) 34 l.Printf(" count: %9d\n", metric.Count()) 35 case Gauge: 36 l.Printf("gauge %s\n", name) 37 l.Printf(" value: %9d\n", metric.Value()) 38 case GaugeFloat64: 39 l.Printf("gauge %s\n", name) 40 l.Printf(" value: %f\n", metric.Value()) 41 case Healthcheck: 42 metric.Check() 43 l.Printf("healthcheck %s\n", name) 44 l.Printf(" error: %v\n", metric.Error()) 45 case Histogram: 46 h := metric.Snapshot() 47 ps := h.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) 48 l.Printf("histogram %s\n", name) 49 l.Printf(" count: %9d\n", h.Count()) 50 l.Printf(" min: %9d\n", h.Min()) 51 l.Printf(" max: %9d\n", h.Max()) 52 l.Printf(" mean: %12.2f\n", h.Mean()) 53 l.Printf(" stddev: %12.2f\n", h.StdDev()) 54 l.Printf(" median: %12.2f\n", ps[0]) 55 l.Printf(" 75%%: %12.2f\n", ps[1]) 56 l.Printf(" 95%%: %12.2f\n", ps[2]) 57 l.Printf(" 99%%: %12.2f\n", ps[3]) 58 l.Printf(" 99.9%%: %12.2f\n", ps[4]) 59 case Meter: 60 m := metric.Snapshot() 61 l.Printf("meter %s\n", name) 62 l.Printf(" count: %9d\n", m.Count()) 63 l.Printf(" 1-min rate: %12.2f\n", m.Rate1()) 64 l.Printf(" 5-min rate: %12.2f\n", m.Rate5()) 65 l.Printf(" 15-min rate: %12.2f\n", m.Rate15()) 66 l.Printf(" mean rate: %12.2f\n", m.RateMean()) 67 case Timer: 68 t := metric.Snapshot() 69 ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) 70 l.Printf("timer %s\n", name) 71 l.Printf(" count: %9d\n", t.Count()) 72 l.Printf(" min: %12.2f%s\n", float64(t.Min())/du, duSuffix) 73 l.Printf(" max: %12.2f%s\n", float64(t.Max())/du, duSuffix) 74 l.Printf(" mean: %12.2f%s\n", t.Mean()/du, duSuffix) 75 l.Printf(" stddev: %12.2f%s\n", t.StdDev()/du, duSuffix) 76 l.Printf(" median: %12.2f%s\n", ps[0]/du, duSuffix) 77 l.Printf(" 75%%: %12.2f%s\n", ps[1]/du, duSuffix) 78 l.Printf(" 95%%: %12.2f%s\n", ps[2]/du, duSuffix) 79 l.Printf(" 99%%: %12.2f%s\n", ps[3]/du, duSuffix) 80 l.Printf(" 99.9%%: %12.2f%s\n", ps[4]/du, duSuffix) 81 l.Printf(" 1-min rate: %12.2f\n", t.Rate1()) 82 l.Printf(" 5-min rate: %12.2f\n", t.Rate5()) 83 l.Printf(" 15-min rate: %12.2f\n", t.Rate15()) 84 l.Printf(" mean rate: %12.2f\n", t.RateMean()) 85 } 86 }) 87 } 88 }