pkg/webhook/stats_reporter.go (28 lines of code) (raw):
package webhook
import (
"context"
"time"
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/metric"
)
const (
requestDurationMetricName = "azwi_mutation_request"
namespaceKey = "namespace"
)
var (
req metric.Float64Histogram
// if service.name is not specified, the default is "unknown_service:<exe name>"
// xref: https://opentelemetry.io/docs/reference/specification/resource/semantic_conventions/#service
labels = []attribute.KeyValue{attribute.String("service.name", "webhook")}
)
func registerMetrics() error {
var err error
meter := otel.Meter("webhook")
req, err = meter.Float64Histogram(
requestDurationMetricName,
metric.WithDescription("Distribution of how long it took for the azure-workload-identity mutation request"))
return err
}
// ReportRequest reports the request duration for the given namespace.
func ReportRequest(ctx context.Context, namespace string, duration time.Duration) {
l := append(labels, attribute.String(namespaceKey, namespace))
req.Record(ctx, duration.Seconds(), metric.WithAttributes(l...))
}