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