github.com/MetalBlockchain/metalgo@v1.11.9/x/sync/metrics.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package sync 5 6 import ( 7 "errors" 8 "sync" 9 10 "github.com/prometheus/client_golang/prometheus" 11 ) 12 13 var ( 14 _ SyncMetrics = (*mockMetrics)(nil) 15 _ SyncMetrics = (*metrics)(nil) 16 ) 17 18 type SyncMetrics interface { 19 RequestFailed() 20 RequestMade() 21 RequestSucceeded() 22 } 23 24 type mockMetrics struct { 25 lock sync.Mutex 26 requestsFailed int 27 requestsMade int 28 requestsSucceeded int 29 } 30 31 func (m *mockMetrics) RequestFailed() { 32 m.lock.Lock() 33 defer m.lock.Unlock() 34 35 m.requestsFailed++ 36 } 37 38 func (m *mockMetrics) RequestMade() { 39 m.lock.Lock() 40 defer m.lock.Unlock() 41 42 m.requestsMade++ 43 } 44 45 func (m *mockMetrics) RequestSucceeded() { 46 m.lock.Lock() 47 defer m.lock.Unlock() 48 49 m.requestsSucceeded++ 50 } 51 52 type metrics struct { 53 requestsFailed prometheus.Counter 54 requestsMade prometheus.Counter 55 requestsSucceeded prometheus.Counter 56 } 57 58 func NewMetrics(namespace string, reg prometheus.Registerer) (SyncMetrics, error) { 59 m := metrics{ 60 requestsFailed: prometheus.NewCounter(prometheus.CounterOpts{ 61 Namespace: namespace, 62 Name: "requests_failed", 63 Help: "cumulative amount of failed proof requests", 64 }), 65 requestsMade: prometheus.NewCounter(prometheus.CounterOpts{ 66 Namespace: namespace, 67 Name: "requests_made", 68 Help: "cumulative amount of proof requests made", 69 }), 70 requestsSucceeded: prometheus.NewCounter(prometheus.CounterOpts{ 71 Namespace: namespace, 72 Name: "requests_succeeded", 73 Help: "cumulative amount of proof requests that were successful", 74 }), 75 } 76 err := errors.Join( 77 reg.Register(m.requestsFailed), 78 reg.Register(m.requestsMade), 79 reg.Register(m.requestsSucceeded), 80 ) 81 return &m, err 82 } 83 84 func (m *metrics) RequestFailed() { 85 m.requestsFailed.Inc() 86 } 87 88 func (m *metrics) RequestMade() { 89 m.requestsMade.Inc() 90 } 91 92 func (m *metrics) RequestSucceeded() { 93 m.requestsSucceeded.Inc() 94 }