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  }