|
|
@@ -1,6 +1,8 @@
|
|
|
package metrics
|
|
|
|
|
|
-import "sync/atomic"
|
|
|
+import (
|
|
|
+ "sync/atomic"
|
|
|
+)
|
|
|
|
|
|
// Counters hold an int64 value that can be incremented and decremented.
|
|
|
type Counter interface {
|
|
|
@@ -20,6 +22,17 @@ func GetOrRegisterCounter(name string, r Registry) Counter {
|
|
|
return r.GetOrRegister(name, NewCounter).(Counter)
|
|
|
}
|
|
|
|
|
|
+// GetOrRegisterCounterForced returns an existing Counter or constructs and registers a
|
|
|
+// new Counter no matter the global switch is enabled or not.
|
|
|
+// Be sure to unregister the counter from the registry once it is of no use to
|
|
|
+// allow for garbage collection.
|
|
|
+func GetOrRegisterCounterForced(name string, r Registry) Counter {
|
|
|
+ if nil == r {
|
|
|
+ r = DefaultRegistry
|
|
|
+ }
|
|
|
+ return r.GetOrRegister(name, NewCounterForced).(Counter)
|
|
|
+}
|
|
|
+
|
|
|
// NewCounter constructs a new StandardCounter.
|
|
|
func NewCounter() Counter {
|
|
|
if !Enabled {
|
|
|
@@ -28,6 +41,12 @@ func NewCounter() Counter {
|
|
|
return &StandardCounter{0}
|
|
|
}
|
|
|
|
|
|
+// NewCounterForced constructs a new StandardCounter and returns it no matter if
|
|
|
+// the global switch is enabled or not.
|
|
|
+func NewCounterForced() Counter {
|
|
|
+ return &StandardCounter{0}
|
|
|
+}
|
|
|
+
|
|
|
// NewRegisteredCounter constructs and registers a new StandardCounter.
|
|
|
func NewRegisteredCounter(name string, r Registry) Counter {
|
|
|
c := NewCounter()
|
|
|
@@ -38,6 +57,19 @@ func NewRegisteredCounter(name string, r Registry) Counter {
|
|
|
return c
|
|
|
}
|
|
|
|
|
|
+// NewRegisteredCounterForced constructs and registers a new StandardCounter
|
|
|
+// and launches a goroutine no matter the global switch is enabled or not.
|
|
|
+// Be sure to unregister the counter from the registry once it is of no use to
|
|
|
+// allow for garbage collection.
|
|
|
+func NewRegisteredCounterForced(name string, r Registry) Counter {
|
|
|
+ c := NewCounterForced()
|
|
|
+ if nil == r {
|
|
|
+ r = DefaultRegistry
|
|
|
+ }
|
|
|
+ r.Register(name, c)
|
|
|
+ return c
|
|
|
+}
|
|
|
+
|
|
|
// CounterSnapshot is a read-only copy of another Counter.
|
|
|
type CounterSnapshot int64
|
|
|
|