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