mirror of
https://github.com/grafana/grafana.git
synced 2025-07-29 05:42:28 +08:00
56 lines
2.1 KiB
Go
56 lines
2.1 KiB
Go
package rest
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"k8s.io/klog/v2"
|
|
)
|
|
|
|
type dualWriterMetrics struct {
|
|
syncer *prometheus.HistogramVec
|
|
syncerOutcome *prometheus.HistogramVec
|
|
}
|
|
|
|
// DualWriterSyncerDuration is a metric summary for dual writer sync duration per mode
|
|
var DualWriterSyncerDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
|
Name: "dual_writer_data_syncer_duration_seconds",
|
|
Help: "Histogram for the runtime of dual writer data syncer duration per mode",
|
|
Namespace: "grafana",
|
|
NativeHistogramBucketFactor: 1.1,
|
|
}, []string{"is_error", "mode", "resource"})
|
|
|
|
// DualWriterDataSyncerOutcome is a metric summary for dual writer data syncer outcome comparison between the 2 stores per mode
|
|
var DualWriterDataSyncerOutcome = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
|
Name: "dual_writer_data_syncer_outcome",
|
|
Help: "Histogram for the runtime of dual writer data syncer outcome comparison between the 2 stores per mode",
|
|
Namespace: "grafana",
|
|
NativeHistogramBucketFactor: 1.1,
|
|
}, []string{"mode", "resource"})
|
|
|
|
func (m *dualWriterMetrics) init(reg prometheus.Registerer) {
|
|
log := klog.NewKlogr()
|
|
m.syncer = DualWriterSyncerDuration
|
|
m.syncerOutcome = DualWriterDataSyncerOutcome
|
|
errSyncer := reg.Register(m.syncer)
|
|
errSyncerOutcome := reg.Register(m.syncerOutcome)
|
|
if errSyncer != nil || errSyncerOutcome != nil {
|
|
log.Info("cloud migration metrics already registered")
|
|
}
|
|
}
|
|
|
|
func (m *dualWriterMetrics) recordDataSyncerDuration(isError bool, mode DualWriterMode, resource string, startFrom time.Time) {
|
|
duration := time.Since(startFrom).Seconds()
|
|
m.syncer.WithLabelValues(strconv.FormatBool(isError), fmt.Sprintf("%d", mode), resource).Observe(duration)
|
|
}
|
|
|
|
func (m *dualWriterMetrics) recordDataSyncerOutcome(mode DualWriterMode, resource string, synced bool) {
|
|
var observeValue float64
|
|
if !synced {
|
|
observeValue = 1
|
|
}
|
|
m.syncerOutcome.WithLabelValues(fmt.Sprintf("%d", mode), resource).Observe(observeValue)
|
|
}
|