-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmetric.go
126 lines (109 loc) · 2.97 KB
/
metric.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package event
import (
"github.com/prometheus/client_golang/prometheus"
"go.uber.org/multierr"
)
var _ Metrics = &metrics{}
type dummyMetrics struct{}
type metrics struct {
registered prometheus.Counter
published prometheus.Counter
publishing prometheus.Gauge
subscribed prometheus.Counter
processed prometheus.Counter
processing prometheus.Gauge
}
// NewMetric create new metrics
func NewMetric(namespace, name string) Metrics {
if namespace == "" {
namespace = "event"
}
return &metrics{
published: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: namespace,
Subsystem: name,
Name: "published_total",
Help: "Total messages published",
}),
publishing: prometheus.NewGauge(prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: name,
Name: "publishing_count",
Help: "Counte of messages being processed",
}),
subscribed: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: namespace,
Subsystem: name,
Name: "subscribed_total",
Help: "Total subscribers added",
}),
processed: prometheus.NewCounter(prometheus.CounterOpts{
Namespace: namespace,
Subsystem: name,
Name: "processed_total",
Help: "Total messages processed",
}),
processing: prometheus.NewGauge(prometheus.GaugeOpts{
Namespace: namespace,
Subsystem: name,
Name: "processing_count",
Help: "Count of messages being processed",
}),
}
}
// Register register metrics
func (m *metrics) Register(r prometheus.Registerer) error {
var mErr error
if r == nil {
r = prometheus.DefaultRegisterer
}
if err := r.Register(m.published); err != nil {
mErr = multierr.Append(mErr, err)
}
if err := r.Register(m.subscribed); err != nil {
mErr = multierr.Append(mErr, err)
}
if err := r.Register(m.publishing); err != nil {
mErr = multierr.Append(mErr, err)
}
if err := r.Register(m.processing); err != nil {
mErr = multierr.Append(mErr, err)
}
if err := r.Register(m.processed); err != nil {
mErr = multierr.Append(mErr, err)
}
return mErr
}
// Publishing event publishing started
func (m *metrics) Publishing() {
m.publishing.Inc()
}
// Published event published
func (m *metrics) Published() {
m.publishing.Dec()
m.published.Inc()
}
// Processing event processing started
func (m *metrics) Processing() {
m.processing.Inc()
}
// Processed event processing done
func (m *metrics) Processed() {
m.publishing.Dec()
m.processed.Inc()
}
// Subscribed a subscriber was added inChannel the event
func (m *metrics) Subscribed() {
m.subscribed.Inc()
}
func (dummyMetrics) Register(r prometheus.Registerer) error { return nil }
// Publishing event processing started
func (dummyMetrics) Publishing() {}
// Published event published
func (dummyMetrics) Published() {}
// Processing event processing started
func (dummyMetrics) Processing() {}
// Processed event processing done
func (dummyMetrics) Processed() {}
// Subscribed a subscriber was added inChannel the event
func (dummyMetrics) Subscribed() {}