|
|
@@ -29,6 +29,17 @@ func GetOrRegisterMeter(name string, r Registry) Meter {
|
|
|
return r.GetOrRegister(name, NewMeter).(Meter)
|
|
|
}
|
|
|
|
|
|
+// GetOrRegisterMeterForced returns an existing Meter or constructs and registers a
|
|
|
+// new StandardMeter no matter the global switch is enabled or not.
|
|
|
+// Be sure to unregister the meter from the registry once it is of no use to
|
|
|
+// allow for garbage collection.
|
|
|
+func GetOrRegisterMeterForced(name string, r Registry) Meter {
|
|
|
+ if nil == r {
|
|
|
+ r = DefaultRegistry
|
|
|
+ }
|
|
|
+ return r.GetOrRegister(name, NewMeterForced).(Meter)
|
|
|
+}
|
|
|
+
|
|
|
// NewMeter constructs a new StandardMeter and launches a goroutine.
|
|
|
// Be sure to call Stop() once the meter is of no use to allow for garbage collection.
|
|
|
func NewMeter() Meter {
|
|
|
@@ -46,8 +57,23 @@ func NewMeter() Meter {
|
|
|
return m
|
|
|
}
|
|
|
|
|
|
-// NewMeter constructs and registers a new StandardMeter and launches a
|
|
|
-// goroutine.
|
|
|
+// NewMeterForced constructs a new StandardMeter and launches a goroutine no matter
|
|
|
+// the global switch is enabled or not.
|
|
|
+// Be sure to call Stop() once the meter is of no use to allow for garbage collection.
|
|
|
+func NewMeterForced() Meter {
|
|
|
+ m := newStandardMeter()
|
|
|
+ arbiter.Lock()
|
|
|
+ defer arbiter.Unlock()
|
|
|
+ arbiter.meters[m] = struct{}{}
|
|
|
+ if !arbiter.started {
|
|
|
+ arbiter.started = true
|
|
|
+ go arbiter.tick()
|
|
|
+ }
|
|
|
+ return m
|
|
|
+}
|
|
|
+
|
|
|
+// NewRegisteredMeter constructs and registers a new StandardMeter
|
|
|
+// and launches a goroutine.
|
|
|
// Be sure to unregister the meter from the registry once it is of no use to
|
|
|
// allow for garbage collection.
|
|
|
func NewRegisteredMeter(name string, r Registry) Meter {
|
|
|
@@ -59,6 +85,19 @@ func NewRegisteredMeter(name string, r Registry) Meter {
|
|
|
return c
|
|
|
}
|
|
|
|
|
|
+// NewRegisteredMeterForced constructs and registers a new StandardMeter
|
|
|
+// and launches a goroutine no matter the global switch is enabled or not.
|
|
|
+// Be sure to unregister the meter from the registry once it is of no use to
|
|
|
+// allow for garbage collection.
|
|
|
+func NewRegisteredMeterForced(name string, r Registry) Meter {
|
|
|
+ c := NewMeterForced()
|
|
|
+ if nil == r {
|
|
|
+ r = DefaultRegistry
|
|
|
+ }
|
|
|
+ r.Register(name, c)
|
|
|
+ return c
|
|
|
+}
|
|
|
+
|
|
|
// MeterSnapshot is a read-only copy of another Meter.
|
|
|
type MeterSnapshot struct {
|
|
|
count int64
|