From b579d2efbae6a03174b4dcc55c4a6dd14dde5a07 Mon Sep 17 00:00:00 2001 From: Vishal Raj Date: Thu, 23 Oct 2025 15:38:58 +0100 Subject: [PATCH] Fix dynamic rate limit escalation metrics --- processor/ratelimitprocessor/gubernator.go | 13 +++++++++---- processor/ratelimitprocessor/gubernator_test.go | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/processor/ratelimitprocessor/gubernator.go b/processor/ratelimitprocessor/gubernator.go index 0ce629c36..f966e52f5 100644 --- a/processor/ratelimitprocessor/gubernator.go +++ b/processor/ratelimitprocessor/gubernator.go @@ -229,20 +229,25 @@ func (r *gubernatorRateLimiter) RateLimit(ctx context.Context, hits int) error { )...)), ) rate, burst = cfg.Rate, cfg.Burst - } else if rate > cfg.Rate { // Dynamic escalation occurred + } else if rate > cfg.Rate { r.telemetryBuilder.RatelimitDynamicEscalations.Add(ctx, 1, metric.WithAttributeSet(attribute.NewSet(append(attrs, - attribute.String("reason", "success"), + attribute.String("reason", "escalation"), )...)), ) - } else { // Dynamic escalation was skipped (dynamic <= static) + } else if rate < cfg.Rate { + r.telemetryBuilder.RatelimitDynamicEscalations.Add(ctx, 1, + metric.WithAttributeSet(attribute.NewSet(append(attrs, + attribute.String("reason", "deescalation"), + )...)), + ) + } else { r.telemetryBuilder.RatelimitDynamicEscalations.Add(ctx, 1, metric.WithAttributeSet(attribute.NewSet(append(attrs, attribute.String("reason", "skipped"), )...)), ) } - } // Execute rate actual limit check / recording. return r.executeRateLimit(ctx, cfg, uniqueKey, hits, rate, burst, now) diff --git a/processor/ratelimitprocessor/gubernator_test.go b/processor/ratelimitprocessor/gubernator_test.go index 4af918313..83f550dbf 100644 --- a/processor/ratelimitprocessor/gubernator_test.go +++ b/processor/ratelimitprocessor/gubernator_test.go @@ -914,7 +914,7 @@ func TestGubernatorRateLimiter_TelemetryCounters(t *testing.T) { Attributes: attribute.NewSet( attribute.String("class", "alpha"), attribute.String("source_kind", "class"), - attribute.String("reason", "success"), + attribute.String("reason", "escalation"), ), }, }, metricdatatest.IgnoreTimestamp())