57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package metrics
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/hashicorp/go-metrics"
|
|
)
|
|
|
|
// StoreMetrics defines the set of metrics for the store package
|
|
type StoreMetrics interface {
|
|
MeasureSince(keys ...string)
|
|
}
|
|
|
|
var (
|
|
_ StoreMetrics = Metrics{}
|
|
_ StoreMetrics = NoOpMetrics{}
|
|
)
|
|
|
|
// Metrics defines the metrics wrapper for the store package
|
|
type Metrics struct {
|
|
Labels []metrics.Label
|
|
}
|
|
|
|
// NewMetrics returns a new instance of the Metrics with labels set by the node operator
|
|
func NewMetrics(labels [][]string) Metrics {
|
|
gatherer := Metrics{}
|
|
|
|
if numGlobalLables := len(labels); numGlobalLables > 0 {
|
|
parsedGlobalLabels := make([]metrics.Label, numGlobalLables)
|
|
for i, gl := range labels {
|
|
parsedGlobalLabels[i] = metrics.Label{Name: gl[0], Value: gl[1]}
|
|
}
|
|
|
|
gatherer.Labels = parsedGlobalLabels
|
|
}
|
|
|
|
return gatherer
|
|
}
|
|
|
|
// MeasureSince provides a wrapper functionality for emitting a time measure
|
|
// metric with global labels (if any).
|
|
func (m Metrics) MeasureSince(keys ...string) {
|
|
start := time.Now()
|
|
metrics.MeasureSinceWithLabels(keys, start.UTC(), m.Labels)
|
|
}
|
|
|
|
// NoOpMetrics is a no-op implementation of the StoreMetrics interface
|
|
type NoOpMetrics struct{}
|
|
|
|
// NewNoOpMetrics returns a new instance of the NoOpMetrics
|
|
func NewNoOpMetrics() NoOpMetrics {
|
|
return NoOpMetrics{}
|
|
}
|
|
|
|
// MeasureSince is a no-op implementation of the StoreMetrics interface to avoid time.Now() calls
|
|
func (m NoOpMetrics) MeasureSince(keys ...string) {}
|