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  }