pkg/metrics/metrics.go (42 lines of code) (raw):

// Copyright (c) Microsoft Corporation. // Licensed under the MIT license. package metrics import ( "time" "github.com/prometheus/client_golang/prometheus" ) var ( ControllerReconcileFailCount = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "controller_reconcile_fail_count", Help: "Number of failed static egress gateway controller reconciliations", }, []string{"namespace", "operation", "subscription_id", "resource_group", "resource"}, ) ControllerReconcileLatency = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: "controller_reconcile_latency", Help: "Latency of static egress gateway controller reconciliations", Buckets: []float64{0.1, 0.2, 0.5, 1, 5, 10, 15, 20, 30, 40, 50, 60, 100, 200, 300, 600, 1200}, // seconds }, []string{"namespace", "operation", "subscription_id", "resource_group"}, ) ) type MetricsContext struct { start time.Time labels []string } func NewMetricsContext(namespace, operation, subscriptionID, resourceGroup, resource string) *MetricsContext { return &MetricsContext{ start: time.Now(), labels: []string{namespace, operation, subscriptionID, resourceGroup, resource}, } } func (mc *MetricsContext) ObserveControllerReconcileMetrics(succeeded bool) { if !succeeded { ControllerReconcileFailCount.WithLabelValues(mc.labels...).Inc() } latency := time.Since(mc.start).Seconds() mc.observe(latency) } func (mc *MetricsContext) observe(latency float64) { // trim the last "resource" label ControllerReconcileLatency.WithLabelValues(mc.labels[:4]...).Observe(latency) }