123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package metrics
- import (
- "math"
- "sync/atomic"
- )
- // GaugeFloat64s hold a float64 value that can be set arbitrarily.
- type GaugeFloat64 interface {
- Snapshot() GaugeFloat64
- Update(float64)
- Value() float64
- }
- // GetOrRegisterGaugeFloat64 returns an existing GaugeFloat64 or constructs and registers a
- // new StandardGaugeFloat64.
- func GetOrRegisterGaugeFloat64(name string, r Registry) GaugeFloat64 {
- if nil == r {
- r = DefaultRegistry
- }
- return r.GetOrRegister(name, NewGaugeFloat64()).(GaugeFloat64)
- }
- // NewGaugeFloat64 constructs a new StandardGaugeFloat64.
- func NewGaugeFloat64() GaugeFloat64 {
- if UseNilMetrics {
- return NilGaugeFloat64{}
- }
- return &StandardGaugeFloat64{
- value: 0.0,
- }
- }
- // NewRegisteredGaugeFloat64 constructs and registers a new StandardGaugeFloat64.
- func NewRegisteredGaugeFloat64(name string, r Registry) GaugeFloat64 {
- c := NewGaugeFloat64()
- if nil == r {
- r = DefaultRegistry
- }
- r.Register(name, c)
- return c
- }
- // NewFunctionalGauge constructs a new FunctionalGauge.
- func NewFunctionalGaugeFloat64(f func() float64) GaugeFloat64 {
- if UseNilMetrics {
- return NilGaugeFloat64{}
- }
- return &FunctionalGaugeFloat64{value: f}
- }
- // NewRegisteredFunctionalGauge constructs and registers a new StandardGauge.
- func NewRegisteredFunctionalGaugeFloat64(name string, r Registry, f func() float64) GaugeFloat64 {
- c := NewFunctionalGaugeFloat64(f)
- if nil == r {
- r = DefaultRegistry
- }
- r.Register(name, c)
- return c
- }
- // GaugeFloat64Snapshot is a read-only copy of another GaugeFloat64.
- type GaugeFloat64Snapshot float64
- // Snapshot returns the snapshot.
- func (g GaugeFloat64Snapshot) Snapshot() GaugeFloat64 { return g }
- // Update panics.
- func (GaugeFloat64Snapshot) Update(float64) {
- panic("Update called on a GaugeFloat64Snapshot")
- }
- // Value returns the value at the time the snapshot was taken.
- func (g GaugeFloat64Snapshot) Value() float64 { return float64(g) }
- // NilGauge is a no-op Gauge.
- type NilGaugeFloat64 struct{}
- // Snapshot is a no-op.
- func (NilGaugeFloat64) Snapshot() GaugeFloat64 { return NilGaugeFloat64{} }
- // Update is a no-op.
- func (NilGaugeFloat64) Update(v float64) {}
- // Value is a no-op.
- func (NilGaugeFloat64) Value() float64 { return 0.0 }
- // StandardGaugeFloat64 is the standard implementation of a GaugeFloat64 and uses
- // sync.Mutex to manage a single float64 value.
- type StandardGaugeFloat64 struct {
- value uint64
- }
- // Snapshot returns a read-only copy of the gauge.
- func (g *StandardGaugeFloat64) Snapshot() GaugeFloat64 {
- return GaugeFloat64Snapshot(g.Value())
- }
- // Update updates the gauge's value.
- func (g *StandardGaugeFloat64) Update(v float64) {
- atomic.StoreUint64(&g.value, math.Float64bits(v))
- }
- // Value returns the gauge's current value.
- func (g *StandardGaugeFloat64) Value() float64 {
- return math.Float64frombits(atomic.LoadUint64(&g.value))
- }
- // FunctionalGaugeFloat64 returns value from given function
- type FunctionalGaugeFloat64 struct {
- value func() float64
- }
- // Value returns the gauge's current value.
- func (g FunctionalGaugeFloat64) Value() float64 {
- return g.value()
- }
- // Snapshot returns the snapshot.
- func (g FunctionalGaugeFloat64) Snapshot() GaugeFloat64 { return GaugeFloat64Snapshot(g.Value()) }
- // Update panics.
- func (FunctionalGaugeFloat64) Update(float64) {
- panic("Update called on a FunctionalGaugeFloat64")
- }
|