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 }