github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/metrics/gauge_float64.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:39</date> 10 //</624450098612408320> 11 12 package metrics 13 14 import "sync" 15 16 //GaugeFloat64保留可任意设置的float64值。 17 type GaugeFloat64 interface { 18 Snapshot() GaugeFloat64 19 Update(float64) 20 Value() float64 21 } 22 23 //GetOrRegisterGaugeFloat64返回现有GaugeFloat64或构造并注册 24 //新标准计量器Float64。 25 func GetOrRegisterGaugeFloat64(name string, r Registry) GaugeFloat64 { 26 if nil == r { 27 r = DefaultRegistry 28 } 29 return r.GetOrRegister(name, NewGaugeFloat64()).(GaugeFloat64) 30 } 31 32 //NewGaugeFloat64构建了一个新的标准GaugeFloat64。 33 func NewGaugeFloat64() GaugeFloat64 { 34 if !Enabled { 35 return NilGaugeFloat64{} 36 } 37 return &StandardGaugeFloat64{ 38 value: 0.0, 39 } 40 } 41 42 //newregisteredgaugefloat64构造并注册一个新的StandardGaugefloat64。 43 func NewRegisteredGaugeFloat64(name string, r Registry) GaugeFloat64 { 44 c := NewGaugeFloat64() 45 if nil == r { 46 r = DefaultRegistry 47 } 48 r.Register(name, c) 49 return c 50 } 51 52 //NewFunctionalGauge构造了一个新的FunctionalGauge。 53 func NewFunctionalGaugeFloat64(f func() float64) GaugeFloat64 { 54 if !Enabled { 55 return NilGaugeFloat64{} 56 } 57 return &FunctionalGaugeFloat64{value: f} 58 } 59 60 //NewRegisteredFunctionalGauge构造并注册新的StandardGauge。 61 func NewRegisteredFunctionalGaugeFloat64(name string, r Registry, f func() float64) GaugeFloat64 { 62 c := NewFunctionalGaugeFloat64(f) 63 if nil == r { 64 r = DefaultRegistry 65 } 66 r.Register(name, c) 67 return c 68 } 69 70 //GaugeFloat64快照是另一个GaugeFloat64的只读副本。 71 type GaugeFloat64Snapshot float64 72 73 //快照返回快照。 74 func (g GaugeFloat64Snapshot) Snapshot() GaugeFloat64 { return g } 75 76 //更新恐慌。 77 func (GaugeFloat64Snapshot) Update(float64) { 78 panic("Update called on a GaugeFloat64Snapshot") 79 } 80 81 //值返回拍摄快照时的值。 82 func (g GaugeFloat64Snapshot) Value() float64 { return float64(g) } 83 84 //nilgauge是一个不可操作的量表。 85 type NilGaugeFloat64 struct{} 86 87 //快照是不可操作的。 88 func (NilGaugeFloat64) Snapshot() GaugeFloat64 { return NilGaugeFloat64{} } 89 90 //更新是不可操作的。 91 func (NilGaugeFloat64) Update(v float64) {} 92 93 //值是不可操作的。 94 func (NilGaugeFloat64) Value() float64 { return 0.0 } 95 96 //StandardGaugeFloat64是GaugeFloat64的标准实现和使用 97 //同步.mutex以管理单个float64值。 98 type StandardGaugeFloat64 struct { 99 mutex sync.Mutex 100 value float64 101 } 102 103 //快照返回仪表的只读副本。 104 func (g *StandardGaugeFloat64) Snapshot() GaugeFloat64 { 105 return GaugeFloat64Snapshot(g.Value()) 106 } 107 108 //更新更新更新仪表值。 109 func (g *StandardGaugeFloat64) Update(v float64) { 110 g.mutex.Lock() 111 defer g.mutex.Unlock() 112 g.value = v 113 } 114 115 //值返回仪表的当前值。 116 func (g *StandardGaugeFloat64) Value() float64 { 117 g.mutex.Lock() 118 defer g.mutex.Unlock() 119 return g.value 120 } 121 122 //FunctionalGaugeFloat64从给定函数返回值 123 type FunctionalGaugeFloat64 struct { 124 value func() float64 125 } 126 127 //值返回仪表的当前值。 128 func (g FunctionalGaugeFloat64) Value() float64 { 129 return g.value() 130 } 131 132 //快照返回快照。 133 func (g FunctionalGaugeFloat64) Snapshot() GaugeFloat64 { return GaugeFloat64Snapshot(g.Value()) } 134 135 //更新恐慌。 136 func (FunctionalGaugeFloat64) Update(float64) { 137 panic("Update called on a FunctionalGaugeFloat64") 138 } 139