Files
grafana/pkg/registry/apis/provisioning/controller/metrics.go
T
2025-09-22 20:14:03 +00:00

85 lines
2.7 KiB
Go

package controller
import (
"github.com/grafana/grafana/pkg/registry/apis/provisioning/utils"
"github.com/prometheus/client_golang/prometheus"
)
type finalizerMetrics struct {
registry prometheus.Registerer
finalizerProcessedTotal *prometheus.CounterVec
finalizerDuration *prometheus.HistogramVec
}
func registerFinalizerMetrics(registry prometheus.Registerer) finalizerMetrics {
finalizerProcessedTotal := prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "grafana_provisioning_finalizers_processed_total",
Help: "Total number of finalizers processed",
},
[]string{"finalizer_type", "outcome"},
)
registry.MustRegister(finalizerProcessedTotal)
finalizerDuration := prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "grafana_provisioning_finalizers_duration_seconds",
Help: "Duration of processing the finalizers",
Buckets: []float64{0.5, 1.0, 2.0, 5.0, 10.0, 30.0},
},
[]string{"finalizer_type", "resource_count_bucket"},
)
registry.MustRegister(finalizerDuration)
return finalizerMetrics{
registry: registry,
finalizerProcessedTotal: finalizerProcessedTotal,
finalizerDuration: finalizerDuration,
}
}
func (m *finalizerMetrics) RecordFinalizer(finalizerType string, outcome string, resourceCountChanged int, duration float64) {
m.finalizerProcessedTotal.WithLabelValues(finalizerType, outcome).Inc()
if outcome == utils.SuccessOutcome {
m.finalizerDuration.WithLabelValues(finalizerType, utils.GetResourceCountBucket(resourceCountChanged)).Observe(duration)
}
}
type healthMetrics struct {
registry prometheus.Registerer
healthCheckedTotal *prometheus.CounterVec
healthCheckedDuration *prometheus.HistogramVec
}
func registerHealthMetrics(registry prometheus.Registerer) healthMetrics {
healthCheckedTotal := prometheus.NewCounterVec(
prometheus.CounterOpts{
Name: "grafana_provisioning_health_checked_total",
Help: "Total number of health checks performed",
},
[]string{"outcome"},
)
registry.MustRegister(healthCheckedTotal)
healthCheckedDuration := prometheus.NewHistogramVec(
prometheus.HistogramOpts{
Name: "grafana_provisioning_health_checked_duration_seconds",
Help: "Duration of health checks",
Buckets: []float64{0.1, 0.2, 0.5, 1.0, 2.0, 5.0},
},
[]string{},
)
registry.MustRegister(healthCheckedDuration)
return healthMetrics{
registry: registry,
healthCheckedTotal: healthCheckedTotal,
healthCheckedDuration: healthCheckedDuration,
}
}
func (m *healthMetrics) RecordHealthCheck(outcome string, duration float64) {
m.healthCheckedTotal.WithLabelValues(outcome).Inc()
m.healthCheckedDuration.WithLabelValues().Observe(duration)
}