@@ -29,6 +29,17 @@ func GetOrRegisterMeter(name string, r Registry) Meter {
29
29
return r .GetOrRegister (name , NewMeter ).(Meter )
30
30
}
31
31
32
+ // GetOrRegisterMeterForced returns an existing Meter or constructs and registers a
33
+ // new StandardMeter no matter the global switch is enabled or not.
34
+ // Be sure to unregister the meter from the registry once it is of no use to
35
+ // allow for garbage collection.
36
+ func GetOrRegisterMeterForced (name string , r Registry ) Meter {
37
+ if nil == r {
38
+ r = DefaultRegistry
39
+ }
40
+ return r .GetOrRegister (name , NewMeterForced ).(Meter )
41
+ }
42
+
32
43
// NewMeter constructs a new StandardMeter and launches a goroutine.
33
44
// Be sure to call Stop() once the meter is of no use to allow for garbage collection.
34
45
func NewMeter () Meter {
@@ -46,8 +57,23 @@ func NewMeter() Meter {
46
57
return m
47
58
}
48
59
49
- // NewMeter constructs and registers a new StandardMeter and launches a
50
- // goroutine.
60
+ // NewMeterForced constructs a new StandardMeter and launches a goroutine no matter
61
+ // the global switch is enabled or not.
62
+ // Be sure to call Stop() once the meter is of no use to allow for garbage collection.
63
+ func NewMeterForced () Meter {
64
+ m := newStandardMeter ()
65
+ arbiter .Lock ()
66
+ defer arbiter .Unlock ()
67
+ arbiter .meters [m ] = struct {}{}
68
+ if ! arbiter .started {
69
+ arbiter .started = true
70
+ go arbiter .tick ()
71
+ }
72
+ return m
73
+ }
74
+
75
+ // NewRegisteredMeter constructs and registers a new StandardMeter
76
+ // and launches a goroutine.
51
77
// Be sure to unregister the meter from the registry once it is of no use to
52
78
// allow for garbage collection.
53
79
func NewRegisteredMeter (name string , r Registry ) Meter {
@@ -59,6 +85,19 @@ func NewRegisteredMeter(name string, r Registry) Meter {
59
85
return c
60
86
}
61
87
88
+ // NewRegisteredMeterForced constructs and registers a new StandardMeter
89
+ // and launches a goroutine no matter the global switch is enabled or not.
90
+ // Be sure to unregister the meter from the registry once it is of no use to
91
+ // allow for garbage collection.
92
+ func NewRegisteredMeterForced (name string , r Registry ) Meter {
93
+ c := NewMeterForced ()
94
+ if nil == r {
95
+ r = DefaultRegistry
96
+ }
97
+ r .Register (name , c )
98
+ return c
99
+ }
100
+
62
101
// MeterSnapshot is a read-only copy of another Meter.
63
102
type MeterSnapshot struct {
64
103
count int64
0 commit comments