github.com/cilium/cilium@v1.16.2/pkg/rate/metrics/metrics.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package metrics 5 6 import ( 7 "strconv" 8 9 "github.com/cilium/cilium/pkg/metrics" 10 "github.com/cilium/cilium/pkg/rate" 11 ) 12 13 func APILimiterObserver() rate.MetricsObserver { 14 return &apiRateLimitingMetrics{} 15 } 16 17 type apiRateLimitingMetrics struct{} 18 19 func (a *apiRateLimitingMetrics) ProcessedRequest(name string, v rate.MetricsValues) { 20 metrics.APILimiterProcessingDuration.WithLabelValues(name, "mean").Set(v.MeanProcessingDuration) 21 metrics.APILimiterProcessingDuration.WithLabelValues(name, "estimated").Set(v.EstimatedProcessingDuration) 22 metrics.APILimiterWaitDuration.WithLabelValues(name, "mean").Set(v.MeanWaitDuration) 23 metrics.APILimiterWaitDuration.WithLabelValues(name, "max").Set(v.MaxWaitDuration.Seconds()) 24 metrics.APILimiterWaitDuration.WithLabelValues(name, "min").Set(v.MinWaitDuration.Seconds()) 25 metrics.APILimiterRequestsInFlight.WithLabelValues(name, "in-flight").Set(float64(v.CurrentRequestsInFlight)) 26 metrics.APILimiterRequestsInFlight.WithLabelValues(name, "limit").Set(float64(v.ParallelRequests)) 27 metrics.APILimiterRateLimit.WithLabelValues(name, "limit").Set(float64(v.Limit)) 28 metrics.APILimiterRateLimit.WithLabelValues(name, "burst").Set(float64(v.Burst)) 29 metrics.APILimiterAdjustmentFactor.WithLabelValues(name).Set(v.AdjustmentFactor) 30 31 if v.Outcome == "" { 32 metrics.APILimiterWaitHistoryDuration.WithLabelValues(name).Observe(v.WaitDuration.Seconds()) 33 v.Outcome = metrics.Error2Outcome(v.Error) 34 } 35 36 if v.ReturnCode == -1 { 37 v.ReturnCode = metrics.LabelOutcome2Code(v.Outcome) 38 } 39 40 metrics.APILimiterProcessedRequests.WithLabelValues(name, v.Outcome, strconv.Itoa(v.ReturnCode)).Inc() 41 }