mirror of
https://github.com/grafana/grafana.git
synced 2025-01-27 16:57:14 -06:00
dd771e818e
* Also call storage on mode1. Add metrics * Update comment * Don't use compare function for now * Remove very important space * Finish add logging in mode2. Also call US in mode1 in a non blocking way * Improve code readability on modes 1 and 2 * Fix tests * Rename vars * Lint * Return error from legacy write * Renume useless defer * [REVIEW] improvements * Pass kind instead of name * Use kind instead of name in metrics * Only call latency metrics once * Return error on writes to legacystore in mode1 * Move accesssor logic into the goroutine as well
64 lines
2.5 KiB
Go
64 lines
2.5 KiB
Go
package rest
|
|
|
|
import (
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
)
|
|
|
|
type dualWriterMetrics struct {
|
|
legacy *prometheus.HistogramVec
|
|
storage *prometheus.HistogramVec
|
|
outcome *prometheus.HistogramVec
|
|
}
|
|
|
|
// DualWriterStorageDuration is a metric summary for dual writer storage duration per mode
|
|
var DualWriterStorageDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
|
Name: "dual_writer_storage_duration_seconds",
|
|
Help: "Histogram for the runtime of dual writer storage duration per mode",
|
|
Namespace: "grafana",
|
|
NativeHistogramBucketFactor: 1.1,
|
|
}, []string{"is_error", "mode", "kind", "method"})
|
|
|
|
// DualWriterLegacyDuration is a metric summary for dual writer legacy duration per mode
|
|
var DualWriterLegacyDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
|
Name: "dual_writer_legacy_duration_seconds",
|
|
Help: "Histogram for the runtime of dual writer legacy duration per mode",
|
|
Namespace: "grafana",
|
|
NativeHistogramBucketFactor: 1.1,
|
|
}, []string{"is_error", "mode", "kind", "method"})
|
|
|
|
// DualWriterOutcome is a metric summary for dual writer outcome comparison between the 2 stores per mode
|
|
var DualWriterOutcome = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
|
Name: "dual_writer_outcome",
|
|
Help: "Histogram for the runtime of dual writer outcome comparison between the 2 stores per mode",
|
|
Namespace: "grafana",
|
|
NativeHistogramBucketFactor: 1.1,
|
|
}, []string{"mode", "name", "method"})
|
|
|
|
func (m *dualWriterMetrics) init() {
|
|
m.legacy = DualWriterLegacyDuration
|
|
m.storage = DualWriterStorageDuration
|
|
m.outcome = DualWriterOutcome
|
|
}
|
|
|
|
func (m *dualWriterMetrics) recordLegacyDuration(isError bool, mode string, name string, method string, startFrom time.Time) {
|
|
duration := time.Since(startFrom).Seconds()
|
|
m.legacy.WithLabelValues(strconv.FormatBool(isError), mode, name, method).Observe(duration)
|
|
}
|
|
|
|
func (m *dualWriterMetrics) recordStorageDuration(isError bool, mode string, name string, method string, startFrom time.Time) {
|
|
duration := time.Since(startFrom).Seconds()
|
|
m.storage.WithLabelValues(strconv.FormatBool(isError), mode, name, method).Observe(duration)
|
|
}
|
|
|
|
// nolint:unused
|
|
func (m *dualWriterMetrics) recordOutcome(mode string, name string, outcome bool, method string) {
|
|
var observeValue float64
|
|
if outcome {
|
|
observeValue = 1
|
|
}
|
|
m.outcome.WithLabelValues(mode, name, method).Observe(observeValue)
|
|
}
|