mirror of https://github.com/poanetwork/gecko.git
88 lines
2.3 KiB
Go
88 lines
2.3 KiB
Go
|
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
||
|
// See the file LICENSE for licensing terms.
|
||
|
|
||
|
package snowman
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"time"
|
||
|
|
||
|
"github.com/prometheus/client_golang/prometheus"
|
||
|
|
||
|
"github.com/ava-labs/gecko/ids"
|
||
|
"github.com/ava-labs/gecko/utils/logging"
|
||
|
"github.com/ava-labs/gecko/utils/timer"
|
||
|
)
|
||
|
|
||
|
type metrics struct {
|
||
|
numProcessing prometheus.Gauge
|
||
|
latAccepted, latRejected prometheus.Histogram
|
||
|
|
||
|
clock timer.Clock
|
||
|
processing map[[32]byte]time.Time
|
||
|
}
|
||
|
|
||
|
// Initialize implements the Engine interface
|
||
|
func (m *metrics) Initialize(log logging.Logger, namespace string, registerer prometheus.Registerer) error {
|
||
|
m.processing = make(map[[32]byte]time.Time)
|
||
|
|
||
|
m.numProcessing = prometheus.NewGauge(
|
||
|
prometheus.GaugeOpts{
|
||
|
Namespace: namespace,
|
||
|
Name: "processing",
|
||
|
Help: "Number of currently processing blocks",
|
||
|
})
|
||
|
m.latAccepted = prometheus.NewHistogram(
|
||
|
prometheus.HistogramOpts{
|
||
|
Namespace: namespace,
|
||
|
Name: "accepted",
|
||
|
Help: "Latency of accepting from the time the block was issued in milliseconds",
|
||
|
Buckets: timer.Buckets,
|
||
|
})
|
||
|
m.latRejected = prometheus.NewHistogram(
|
||
|
prometheus.HistogramOpts{
|
||
|
Namespace: namespace,
|
||
|
Name: "rejected",
|
||
|
Help: "Latency of rejecting from the time the block was issued in milliseconds",
|
||
|
Buckets: timer.Buckets,
|
||
|
})
|
||
|
|
||
|
if err := registerer.Register(m.numProcessing); err != nil {
|
||
|
return fmt.Errorf("Failed to register processing statistics due to %w", err)
|
||
|
}
|
||
|
if err := registerer.Register(m.latAccepted); err != nil {
|
||
|
return fmt.Errorf("Failed to register accepted statistics due to %w", err)
|
||
|
}
|
||
|
if err := registerer.Register(m.latRejected); err != nil {
|
||
|
return fmt.Errorf("Failed to register rejected statistics due to %w", err)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (m *metrics) Issued(id ids.ID) {
|
||
|
m.processing[id.Key()] = m.clock.Time()
|
||
|
m.numProcessing.Inc()
|
||
|
}
|
||
|
|
||
|
func (m *metrics) Accepted(id ids.ID) {
|
||
|
key := id.Key()
|
||
|
start := m.processing[key]
|
||
|
end := m.clock.Time()
|
||
|
|
||
|
delete(m.processing, key)
|
||
|
|
||
|
m.latAccepted.Observe(float64(end.Sub(start).Milliseconds()))
|
||
|
m.numProcessing.Dec()
|
||
|
}
|
||
|
|
||
|
func (m *metrics) Rejected(id ids.ID) {
|
||
|
key := id.Key()
|
||
|
start := m.processing[key]
|
||
|
end := m.clock.Time()
|
||
|
|
||
|
delete(m.processing, key)
|
||
|
|
||
|
m.latRejected.Observe(float64(end.Sub(start).Milliseconds()))
|
||
|
m.numProcessing.Dec()
|
||
|
}
|