-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmetrics.go
69 lines (51 loc) · 1.36 KB
/
metrics.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package metrics
import (
"sync"
gometrics "github.com/rcrowley/go-metrics"
)
type Metrics struct {
// default registery for our metrics
Registry gometrics.Registry
// all timer metrics live here
Timers Timers
// all the counters will live here
Counters Counters
// prefix of the all metrics, generally app name
Prefix string
// for synchronisation purposes
sync.Mutex
}
func New(prefix string) *Metrics {
return &Metrics{
Registry: gometrics.NewRegistry(),
Timers: Timers{},
Counters: Counters{},
Prefix: prefix,
}
}
type Timers map[string]gometrics.Timer
type Counters map[string]gometrics.Counter
func (m *Metrics) GetTimer(timerName string) gometrics.Timer {
m.Lock()
defer m.Unlock()
prefixedTimerName := m.Prefix + "_" + timerName
timer, exists := m.Timers[prefixedTimerName]
if !exists {
timer = gometrics.NewTimer()
m.Registry.Register(prefixedTimerName, timer)
m.Timers[prefixedTimerName] = timer
}
return m.Timers[prefixedTimerName]
}
func (m *Metrics) GetCounter(counterName string) gometrics.Counter {
m.Lock()
defer m.Unlock()
prefixedCounterName := m.Prefix + "_" + counterName
counter, exists := m.Counters[prefixedCounterName]
if !exists {
counter = gometrics.NewCounter()
m.Registry.Register(prefixedCounterName, counter)
m.Counters[prefixedCounterName] = counter
}
return m.Counters[prefixedCounterName]
}