diff --git a/counter.go b/counter.go index 5197384..f2f7e91 100644 --- a/counter.go +++ b/counter.go @@ -21,6 +21,24 @@ func NewCounter() Counter { return &StandardCounter{0} } +// Create and register a new Counter. +func NewRegisteredCounter(name string, r Registry) Counter { + c := NewCounter() + if nil == r { + r = DefaultRegistry + } + r.Register(name, c) + return c +} + +// Get an existing or create and register a new Counter. +func GetOrRegisterCounter(name string, r Registry) Counter { + if nil == r { + r = DefaultRegistry + } + return r.GetOrRegister(name, NewCounter()).(Counter) +} + // No-op Counter. type NilCounter struct{} diff --git a/counter_test.go b/counter_test.go index 115680f..db06d96 100644 --- a/counter_test.go +++ b/counter_test.go @@ -57,3 +57,11 @@ func TestCounterZero(t *testing.T) { t.Errorf("c.Count(): 0 != %v\n", count) } } + +func TestGetOrRegisterCounter(t *testing.T) { + r := NewRegistry() + GetOrRegisterCounter("foo", r).Inc(47) + if c := GetOrRegisterCounter("foo", r); 47 != c.Count() { + t.Fatal(c) + } +}