@@ -36,18 +36,16 @@ var once sync.Once
3636var metricsServer * MetricsServer
3737
3838var (
39- CommandLineArgs * vmetrics.Gauge
40- MessagesPublished * vmetrics.Counter
41- MessagesConfirmed * vmetrics.Counter
42- MessagesReturned * vmetrics.Counter
43- MessagesConsumedNormalPriority * vmetrics.Counter
44- MessagesConsumedHighPriority * vmetrics.Counter
45- MessagesConsumedOutOfOrderNormalPriority * vmetrics.Counter
46- MessagesConsumedOutOfOrderHighPriority * vmetrics.Counter
47- MessagesDeliveredTooEarly * vmetrics.Counter
48- PublishingLatency * vmetrics.Summary
49- EndToEndLatency * vmetrics.Summary
50- DelayAccuracy * vmetrics.Summary
39+ CommandLineArgs * vmetrics.Gauge
40+ MessagesPublished * vmetrics.Counter
41+ MessagesConfirmed * vmetrics.Counter
42+ MessagesReturned * vmetrics.Counter
43+ messagesConsumedCounters sync.Map
44+ MessagesDeliveredTooEarly * vmetrics.Counter
45+ PublishingLatency * vmetrics.Summary
46+ EndToEndLatency * vmetrics.Summary
47+ DelayAccuracy * vmetrics.Summary
48+ globalLabels map [string ]string
5149)
5250
5351func startServer () {
@@ -96,21 +94,12 @@ func Start(ctx context.Context, cfg config.Config) *MetricsServer {
9694 return metricsServer
9795}
9896
99- func registerMetrics (globalLabels map [string ]string ) {
100- normal := map [string ]string {"priority" : "normal" }
101- maps .Copy (normal , globalLabels )
102- normalPriorityLabels := labelsToString (normal )
103- high := map [string ]string {"priority" : "high" }
104- maps .Copy (high , globalLabels )
105- highPriorityLabels := labelsToString (high )
97+ func registerMetrics (labels map [string ]string ) {
98+ globalLabels = labels
10699
107100 MessagesPublished = vmetrics .GetOrCreateCounter ("omq_messages_published_total" + labelsToString (globalLabels ))
108101 MessagesConfirmed = vmetrics .GetOrCreateCounter ("omq_messages_confirmed_total" + labelsToString (globalLabels ))
109102 MessagesReturned = vmetrics .GetOrCreateCounter ("omq_messages_returned_total" + labelsToString (globalLabels ))
110- MessagesConsumedNormalPriority = vmetrics .GetOrCreateCounter (`omq_messages_consumed_total` + normalPriorityLabels )
111- MessagesConsumedHighPriority = vmetrics .GetOrCreateCounter (`omq_messages_consumed_total` + highPriorityLabels )
112- MessagesConsumedOutOfOrderNormalPriority = vmetrics .GetOrCreateCounter (`omq_messages_consumed_out_of_order` + normalPriorityLabels )
113- MessagesConsumedOutOfOrderHighPriority = vmetrics .GetOrCreateCounter (`omq_messages_consumed_out_of_order` + highPriorityLabels )
114103 MessagesDeliveredTooEarly = vmetrics .GetOrCreateCounter ("omq_early_messages_total" + labelsToString (globalLabels ))
115104 PublishingLatency = vmetrics .GetOrCreateSummaryExt (`omq_publishing_latency_seconds` + labelsToString (globalLabels ), 1 * time .Second , []float64 {0.5 , 0.9 , 0.95 , 0.99 })
116105 EndToEndLatency = vmetrics .GetOrCreateSummaryExt (`omq_end_to_end_latency_seconds` + labelsToString (globalLabels ), 1 * time .Second , []float64 {0.5 , 0.9 , 0.95 , 0.99 })
@@ -146,19 +135,22 @@ func registerCommandLineMetric(cfg config.Config, globalLabels map[string]string
146135}
147136
148137func MessagesConsumedMetric (priority int ) * vmetrics.Counter {
149- // we assume AMQP-1.0 priority definition
150- if priority > 4 {
151- return MessagesConsumedHighPriority
138+ if counter , ok := messagesConsumedCounters .Load (priority ); ok {
139+ return counter .(* vmetrics.Counter )
152140 }
153- return MessagesConsumedNormalPriority
141+
142+ labels := map [string ]string {"priority" : strconv .Itoa (priority )}
143+ maps .Copy (labels , globalLabels )
144+ counter := vmetrics .GetOrCreateCounter (`omq_messages_consumed_total` + labelsToString (labels ))
145+
146+ actual , _ := messagesConsumedCounters .LoadOrStore (priority , counter )
147+ return actual .(* vmetrics.Counter )
154148}
155149
156150func MessagesConsumedOutOfOrderMetric (priority int ) * vmetrics.Counter {
157- // we assume AMQP-1.0 priority definition
158- if priority > 4 {
159- return MessagesConsumedOutOfOrderHighPriority
160- }
161- return MessagesConsumedOutOfOrderNormalPriority
151+ labels := map [string ]string {"priority" : strconv .Itoa (priority )}
152+ maps .Copy (labels , globalLabels )
153+ return vmetrics .GetOrCreateCounter (`omq_messages_consumed_out_of_order` + labelsToString (labels ))
162154}
163155
164156var (
@@ -174,7 +166,7 @@ func (m *MetricsServer) printMessageRates(ctx context.Context) {
174166 return
175167 case <- time .After (1 * time .Second ):
176168 published := MessagesPublished .Get ()
177- consumed := MessagesConsumedNormalPriority . Get () + MessagesConsumedHighPriority . Get ()
169+ consumed := getTotalConsumed ()
178170
179171 if published > 0 || consumed > 0 {
180172 log .Print ("" ,
@@ -206,9 +198,22 @@ func (m *MetricsServer) PrintSummary() {
206198 "confirmed" , MessagesConfirmed .Get (),
207199 "returned" , MessagesReturned .Get (),
208200 "rate" , fmt .Sprintf ("%.2f/s" , float64 (MessagesPublished .Get ())/ time .Since (m .started ).Seconds ()))
201+ consumed := getTotalConsumed ()
209202 log .Print ("TOTAL CONSUMED" ,
210- "messages" , MessagesConsumedNormalPriority .Get ()+ MessagesConsumedHighPriority .Get (),
211- "rate" , fmt .Sprintf ("%.2f/s" , float64 (MessagesConsumedNormalPriority .Get ()+ MessagesConsumedHighPriority .Get ())/ time .Since (m .started ).Seconds ()))
203+ "messages" , consumed ,
204+ "rate" , fmt .Sprintf ("%.2f/s" , float64 (consumed )/ time .Since (m .started ).Seconds ()))
205+ }
206+
207+ func getTotalConsumed () uint64 {
208+ var total uint64
209+
210+ messagesConsumedCounters .Range (func (key , value interface {}) bool {
211+ counter := value .(* vmetrics.Counter )
212+ total += counter .Get ()
213+ return true
214+ })
215+
216+ return total
212217}
213218
214219func (m MetricsServer ) PrintAll () {
0 commit comments