Skip to content

Commit f1da7a0

Browse files
authored
Remove route and method tags from rate limiting (#48707)
1 parent 8e2851f commit f1da7a0

File tree

4 files changed

+18
-40
lines changed

4 files changed

+18
-40
lines changed

src/Middleware/RateLimiting/src/MetricsContext.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,12 @@ namespace Microsoft.AspNetCore.RateLimiting;
66
internal readonly struct MetricsContext
77
{
88
public readonly string? PolicyName;
9-
public readonly string? Method;
10-
public readonly string? Route;
119
public readonly bool CurrentLeasedRequestsCounterEnabled;
1210
public readonly bool CurrentQueuedRequestsCounterEnabled;
1311

14-
public MetricsContext(string? policyName, string? method, string? route, bool currentLeasedRequestsCounterEnabled, bool currentQueuedRequestsCounterEnabled)
12+
public MetricsContext(string? policyName, bool currentLeasedRequestsCounterEnabled, bool currentQueuedRequestsCounterEnabled)
1513
{
1614
PolicyName = policyName;
17-
Method = method;
18-
Route = route;
1915
CurrentLeasedRequestsCounterEnabled = currentLeasedRequestsCounterEnabled;
2016
CurrentQueuedRequestsCounterEnabled = currentQueuedRequestsCounterEnabled;
2117
}

src/Middleware/RateLimiting/src/RateLimitingMetrics.cs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -162,18 +162,10 @@ private static void InitializeRateLimitingTags(ref TagList tags, in MetricsConte
162162
{
163163
tags.Add("policy", metricsContext.PolicyName);
164164
}
165-
if (metricsContext.Method is not null)
166-
{
167-
tags.Add("method", metricsContext.Method);
168-
}
169-
if (metricsContext.Route is not null)
170-
{
171-
tags.Add("route", metricsContext.Route);
172-
}
173165
}
174166

175-
public MetricsContext CreateContext(string? policyName, string? method, string? route)
167+
public MetricsContext CreateContext(string? policyName)
176168
{
177-
return new MetricsContext(policyName, method, route, _currentLeasedRequestsCounter.Enabled, _currentQueuedRequestsCounter.Enabled);
169+
return new MetricsContext(policyName, _currentLeasedRequestsCounter.Enabled, _currentQueuedRequestsCounter.Enabled);
178170
}
179171
}

src/Middleware/RateLimiting/src/RateLimitingMiddleware.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using System.Diagnostics;
55
using System.Threading.RateLimiting;
66
using Microsoft.AspNetCore.Http;
7-
using Microsoft.AspNetCore.Http.Metadata;
87
using Microsoft.Extensions.Logging;
98
using Microsoft.Extensions.Options;
109

@@ -78,23 +77,18 @@ public Task Invoke(HttpContext context)
7877
return _next(context);
7978
}
8079

81-
// Only include route and method if we have an endpoint with a route.
82-
// A request always has a HTTP request, but it isn't useful unless combined with a route.
83-
var route = endpoint?.Metadata.GetMetadata<IRouteDiagnosticsMetadata>()?.Route;
84-
var method = route is not null ? context.Request.Method : null;
85-
86-
return InvokeInternal(context, enableRateLimitingAttribute, method, route);
80+
return InvokeInternal(context, enableRateLimitingAttribute);
8781
}
8882

89-
private async Task InvokeInternal(HttpContext context, EnableRateLimitingAttribute? enableRateLimitingAttribute, string? method, string? route)
83+
private async Task InvokeInternal(HttpContext context, EnableRateLimitingAttribute? enableRateLimitingAttribute)
9084
{
9185
var policyName = enableRateLimitingAttribute?.PolicyName;
9286

9387
// Cache the up/down counter enabled state at the start of the middleware.
9488
// This ensures that the state is consistent for the entire request.
9589
// For example, if a meter listener starts after a request is queued, when the request exits the queue
9690
// the requests queued counter won't go into a negative value.
97-
var metricsContext = _metrics.CreateContext(policyName, method, route);
91+
var metricsContext = _metrics.CreateContext(policyName);
9892

9993
using var leaseContext = await TryAcquireAsync(context, metricsContext);
10094

src/Middleware/RateLimiting/test/RateLimitingMetricsTests.cs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public async Task Metrics_Success()
9393
await syncPoint.WaitForSyncPoint().DefaultTimeout();
9494

9595
Assert.Collection(currentLeaseRequestsRecorder.GetMeasurements(),
96-
m => AssertCounter(m, 1, null, null, null));
96+
m => AssertCounter(m, 1, null));
9797
Assert.Empty(leaseRequestDurationRecorder.GetMeasurements());
9898

9999
syncPoint.Continue();
@@ -104,10 +104,10 @@ public async Task Metrics_Success()
104104
Assert.Equal(StatusCodes.Status200OK, context.Response.StatusCode);
105105

106106
Assert.Collection(currentLeaseRequestsRecorder.GetMeasurements(),
107-
m => AssertCounter(m, 1, null, null, null),
108-
m => AssertCounter(m, -1, null, null, null));
107+
m => AssertCounter(m, 1, null),
108+
m => AssertCounter(m, -1, null));
109109
Assert.Collection(leaseRequestDurationRecorder.GetMeasurements(),
110-
m => AssertDuration(m, null, null, null));
110+
m => AssertDuration(m, null));
111111
Assert.Empty(currentRequestsQueuedRecorder.GetMeasurements());
112112
Assert.Empty(queuedRequestDurationRecorder.GetMeasurements());
113113
Assert.Empty(leaseFailedRequestsRecorder.GetMeasurements());
@@ -156,7 +156,7 @@ public async Task Metrics_ListenInMiddleOfRequest_CurrentLeasesNotDecreased()
156156

157157
Assert.Empty(currentLeaseRequestsRecorder.GetMeasurements());
158158
Assert.Collection(leaseRequestDurationRecorder.GetMeasurements(),
159-
m => AssertDuration(m, null, null, null));
159+
m => AssertDuration(m, null));
160160
}
161161

162162
[Fact]
@@ -214,7 +214,7 @@ public async Task Metrics_Queued()
214214

215215
// Assert second request is queued.
216216
Assert.Collection(currentRequestsQueuedRecorder.GetMeasurements(),
217-
m => AssertCounter(m, 1, "GET", "/", "concurrencyPolicy"));
217+
m => AssertCounter(m, 1, "concurrencyPolicy"));
218218
Assert.Empty(queuedRequestDurationRecorder.GetMeasurements());
219219

220220
// Allow both requests to finish.
@@ -224,10 +224,10 @@ public async Task Metrics_Queued()
224224
await middlewareTask2.DefaultTimeout();
225225

226226
Assert.Collection(currentRequestsQueuedRecorder.GetMeasurements(),
227-
m => AssertCounter(m, 1, "GET", "/", "concurrencyPolicy"),
228-
m => AssertCounter(m, -1, "GET", "/", "concurrencyPolicy"));
227+
m => AssertCounter(m, 1, "concurrencyPolicy"),
228+
m => AssertCounter(m, -1, "concurrencyPolicy"));
229229
Assert.Collection(queuedRequestDurationRecorder.GetMeasurements(),
230-
m => AssertDuration(m, "GET", "/", "concurrencyPolicy"));
230+
m => AssertDuration(m, "concurrencyPolicy"));
231231
}
232232

233233
[Fact]
@@ -296,22 +296,18 @@ public async Task Metrics_ListenInMiddleOfQueued_CurrentQueueNotDecreased()
296296

297297
Assert.Empty(currentRequestsQueuedRecorder.GetMeasurements());
298298
Assert.Collection(queuedRequestDurationRecorder.GetMeasurements(),
299-
m => AssertDuration(m, "GET", "/", "concurrencyPolicy"));
299+
m => AssertDuration(m, "concurrencyPolicy"));
300300
}
301301

302-
private static void AssertCounter(Measurement<long> measurement, long value, string method, string route, string policy)
302+
private static void AssertCounter(Measurement<long> measurement, long value, string policy)
303303
{
304304
Assert.Equal(value, measurement.Value);
305-
AssertTag(measurement.Tags, "method", method);
306-
AssertTag(measurement.Tags, "route", route);
307305
AssertTag(measurement.Tags, "policy", policy);
308306
}
309307

310-
private static void AssertDuration(Measurement<double> measurement, string method, string route, string policy)
308+
private static void AssertDuration(Measurement<double> measurement, string policy)
311309
{
312310
Assert.True(measurement.Value > 0);
313-
AssertTag(measurement.Tags, "method", method);
314-
AssertTag(measurement.Tags, "route", route);
315311
AssertTag(measurement.Tags, "policy", policy);
316312
}
317313

0 commit comments

Comments
 (0)