github.com/MetalBlockchain/subnet-evm@v0.4.9/warp/handlers/stats/stats.go (about)

     1  // (c) 2023, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package stats
     5  
     6  import (
     7  	"sync"
     8  	"time"
     9  
    10  	"github.com/MetalBlockchain/subnet-evm/metrics"
    11  )
    12  
    13  var (
    14  	_ SignatureRequestHandlerStats = (*handlerStats)(nil)
    15  	_ SignatureRequestHandlerStats = (*MockSignatureRequestHandlerStats)(nil)
    16  )
    17  
    18  type SignatureRequestHandlerStats interface {
    19  	IncSignatureRequest()
    20  	IncSignatureHit()
    21  	IncSignatureMiss()
    22  	UpdateSignatureRequestTime(duration time.Duration)
    23  }
    24  
    25  type handlerStats struct {
    26  	// SignatureRequestHandler metrics
    27  	signatureRequest        metrics.Counter
    28  	signatureHit            metrics.Counter
    29  	signatureMiss           metrics.Counter
    30  	signatureProcessingTime metrics.Timer
    31  }
    32  
    33  func NewStats(enabled bool) SignatureRequestHandlerStats {
    34  	if !enabled {
    35  		return &MockSignatureRequestHandlerStats{}
    36  	}
    37  
    38  	return &handlerStats{
    39  		signatureRequest:        metrics.GetOrRegisterCounter("signature_request_count", nil),
    40  		signatureHit:            metrics.GetOrRegisterCounter("signature_request_hit", nil),
    41  		signatureMiss:           metrics.GetOrRegisterCounter("signature_request_miss", nil),
    42  		signatureProcessingTime: metrics.GetOrRegisterTimer("signature_request_duration", nil),
    43  	}
    44  }
    45  
    46  func (h *handlerStats) IncSignatureRequest() { h.signatureRequest.Inc(1) }
    47  func (h *handlerStats) IncSignatureHit()     { h.signatureHit.Inc(1) }
    48  func (h *handlerStats) IncSignatureMiss()    { h.signatureMiss.Inc(1) }
    49  func (h *handlerStats) UpdateSignatureRequestTime(duration time.Duration) {
    50  	h.signatureProcessingTime.Update(duration)
    51  }
    52  
    53  // MockSignatureRequestHandlerStats is mock for capturing and asserting on handler metrics in test
    54  type MockSignatureRequestHandlerStats struct {
    55  	lock sync.Mutex
    56  
    57  	SignatureRequestCount,
    58  	SignatureRequestHit,
    59  	SignatureRequestMiss uint32
    60  	SignatureRequestDuration time.Duration
    61  }
    62  
    63  func (m *MockSignatureRequestHandlerStats) Reset() {
    64  	m.lock.Lock()
    65  	defer m.lock.Unlock()
    66  
    67  	m.SignatureRequestCount = 0
    68  	m.SignatureRequestHit = 0
    69  	m.SignatureRequestMiss = 0
    70  	m.SignatureRequestDuration = 0
    71  }
    72  
    73  func (m *MockSignatureRequestHandlerStats) IncSignatureRequest() {
    74  	m.lock.Lock()
    75  	defer m.lock.Unlock()
    76  	m.SignatureRequestCount++
    77  }
    78  
    79  func (m *MockSignatureRequestHandlerStats) IncSignatureHit() {
    80  	m.lock.Lock()
    81  	defer m.lock.Unlock()
    82  	m.SignatureRequestHit++
    83  }
    84  
    85  func (m *MockSignatureRequestHandlerStats) IncSignatureMiss() {
    86  	m.lock.Lock()
    87  	defer m.lock.Unlock()
    88  	m.SignatureRequestMiss++
    89  }
    90  
    91  func (m *MockSignatureRequestHandlerStats) UpdateSignatureRequestTime(duration time.Duration) {
    92  	m.lock.Lock()
    93  	defer m.lock.Unlock()
    94  	m.SignatureRequestDuration += duration
    95  }