@@ -26,11 +26,11 @@ import (
26
26
27
27
querier_stats "github.com/cortexproject/cortex/pkg/querier/stats"
28
28
"github.com/cortexproject/cortex/pkg/querier/tenantfederation"
29
- "github.com/cortexproject/cortex/pkg/querier/tripperware"
30
29
"github.com/cortexproject/cortex/pkg/tenant"
31
30
util_api "github.com/cortexproject/cortex/pkg/util/api"
32
31
"github.com/cortexproject/cortex/pkg/util/limiter"
33
32
util_log "github.com/cortexproject/cortex/pkg/util/log"
33
+ "github.com/cortexproject/cortex/pkg/util/requestmeta"
34
34
)
35
35
36
36
type roundTripperFunc func (* http.Request ) (* http.Response , error )
@@ -216,7 +216,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
216
216
}, nil
217
217
}),
218
218
additionalMetricsCheckFunc : func (h * Handler ) {
219
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonResponseBodySizeExceeded , tripperware .SourceAPI , userID ))
219
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonResponseBodySizeExceeded , requestmeta .SourceAPI , userID ))
220
220
assert .Equal (t , float64 (1 ), v )
221
221
},
222
222
expectedStatusCode : http .StatusRequestEntityTooLarge ,
@@ -232,7 +232,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
232
232
}, nil
233
233
}),
234
234
additionalMetricsCheckFunc : func (h * Handler ) {
235
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTooManyRequests , tripperware .SourceAPI , userID ))
235
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTooManyRequests , requestmeta .SourceAPI , userID ))
236
236
assert .Equal (t , float64 (1 ), v )
237
237
},
238
238
expectedStatusCode : http .StatusTooManyRequests ,
@@ -248,7 +248,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
248
248
}, nil
249
249
}),
250
250
additionalMetricsCheckFunc : func (h * Handler ) {
251
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTooManySamples , tripperware .SourceAPI , userID ))
251
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTooManySamples , requestmeta .SourceAPI , userID ))
252
252
assert .Equal (t , float64 (1 ), v )
253
253
},
254
254
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -264,7 +264,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
264
264
}, nil
265
265
}),
266
266
additionalMetricsCheckFunc : func (h * Handler ) {
267
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTimeRangeExceeded , tripperware .SourceAPI , userID ))
267
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTimeRangeExceeded , requestmeta .SourceAPI , userID ))
268
268
assert .Equal (t , float64 (1 ), v )
269
269
},
270
270
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -280,7 +280,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
280
280
}, nil
281
281
}),
282
282
additionalMetricsCheckFunc : func (h * Handler ) {
283
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonSeriesFetched , tripperware .SourceAPI , userID ))
283
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonSeriesFetched , requestmeta .SourceAPI , userID ))
284
284
assert .Equal (t , float64 (1 ), v )
285
285
},
286
286
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -296,7 +296,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
296
296
}, nil
297
297
}),
298
298
additionalMetricsCheckFunc : func (h * Handler ) {
299
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunksFetched , tripperware .SourceAPI , userID ))
299
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunksFetched , requestmeta .SourceAPI , userID ))
300
300
assert .Equal (t , float64 (1 ), v )
301
301
},
302
302
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -312,7 +312,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
312
312
}, nil
313
313
}),
314
314
additionalMetricsCheckFunc : func (h * Handler ) {
315
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunkBytesFetched , tripperware .SourceAPI , userID ))
315
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunkBytesFetched , requestmeta .SourceAPI , userID ))
316
316
assert .Equal (t , float64 (1 ), v )
317
317
},
318
318
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -328,7 +328,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
328
328
}, nil
329
329
}),
330
330
additionalMetricsCheckFunc : func (h * Handler ) {
331
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonDataBytesFetched , tripperware .SourceAPI , userID ))
331
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonDataBytesFetched , requestmeta .SourceAPI , userID ))
332
332
assert .Equal (t , float64 (1 ), v )
333
333
},
334
334
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -344,7 +344,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
344
344
}, nil
345
345
}),
346
346
additionalMetricsCheckFunc : func (h * Handler ) {
347
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonSeriesLimitStoreGateway , tripperware .SourceAPI , userID ))
347
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonSeriesLimitStoreGateway , requestmeta .SourceAPI , userID ))
348
348
assert .Equal (t , float64 (1 ), v )
349
349
},
350
350
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -360,7 +360,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
360
360
}, nil
361
361
}),
362
362
additionalMetricsCheckFunc : func (h * Handler ) {
363
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunksLimitStoreGateway , tripperware .SourceAPI , userID ))
363
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunksLimitStoreGateway , requestmeta .SourceAPI , userID ))
364
364
assert .Equal (t , float64 (1 ), v )
365
365
},
366
366
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -376,7 +376,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
376
376
}, nil
377
377
}),
378
378
additionalMetricsCheckFunc : func (h * Handler ) {
379
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonBytesLimitStoreGateway , tripperware .SourceAPI , userID ))
379
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonBytesLimitStoreGateway , requestmeta .SourceAPI , userID ))
380
380
assert .Equal (t , float64 (1 ), v )
381
381
},
382
382
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -393,7 +393,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
393
393
}, nil
394
394
}),
395
395
additionalMetricsCheckFunc : func (h * Handler ) {
396
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonResourceExhausted , tripperware .SourceAPI , userID ))
396
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonResourceExhausted , requestmeta .SourceAPI , userID ))
397
397
assert .Equal (t , float64 (1 ), v )
398
398
},
399
399
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -410,7 +410,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
410
410
}, nil
411
411
}),
412
412
additionalMetricsCheckFunc : func (h * Handler ) {
413
- v := promtest .ToFloat64 (h .slowQueries .WithLabelValues (tripperware .SourceAPI , userID ))
413
+ v := promtest .ToFloat64 (h .slowQueries .WithLabelValues (requestmeta .SourceAPI , userID ))
414
414
assert .Equal (t , float64 (1 ), v )
415
415
},
416
416
expectedStatusCode : http .StatusOK ,
@@ -472,12 +472,12 @@ func TestReportQueryStatsFormat(t *testing.T) {
472
472
tests := map [string ]testCase {
473
473
"should not include query and header details if empty" : {
474
474
expectedLog : `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0` ,
475
- source : tripperware .SourceAPI ,
475
+ source : requestmeta .SourceAPI ,
476
476
},
477
477
"should include query length and string at the end" : {
478
478
queryString : url .Values (map [string ][]string {"query" : {"up" }}),
479
479
expectedLog : `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0 query_length=2 param_query=up` ,
480
- source : tripperware .SourceAPI ,
480
+ source : requestmeta .SourceAPI ,
481
481
},
482
482
"should include query stats" : {
483
483
queryStats : & querier_stats.QueryStats {
@@ -494,17 +494,17 @@ func TestReportQueryStatsFormat(t *testing.T) {
494
494
},
495
495
},
496
496
expectedLog : `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=3 response_series_count=100 fetched_series_count=100 fetched_chunks_count=200 fetched_samples_count=300 fetched_chunks_bytes=1024 fetched_data_bytes=2048 split_queries=10 status_code=200 response_size=1000 samples_scanned=0 query_storage_wall_time_seconds=6000` ,
497
- source : tripperware .SourceAPI ,
497
+ source : requestmeta .SourceAPI ,
498
498
},
499
499
"should include user agent" : {
500
500
header : http.Header {"User-Agent" : []string {"Grafana" }},
501
501
expectedLog : `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0 user_agent=Grafana` ,
502
- source : tripperware .SourceAPI ,
502
+ source : requestmeta .SourceAPI ,
503
503
},
504
504
"should include response error" : {
505
505
responseErr : errors .New ("foo_err" ),
506
506
expectedLog : `level=error msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0 error=foo_err` ,
507
- source : tripperware .SourceAPI ,
507
+ source : requestmeta .SourceAPI ,
508
508
},
509
509
"should include query priority" : {
510
510
queryString : url .Values (map [string ][]string {"query" : {"up" }}),
@@ -513,7 +513,7 @@ func TestReportQueryStatsFormat(t *testing.T) {
513
513
PriorityAssigned : true ,
514
514
},
515
515
expectedLog : `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0 query_length=2 priority=99 param_query=up` ,
516
- source : tripperware .SourceAPI ,
516
+ source : requestmeta .SourceAPI ,
517
517
},
518
518
"should include data fetch min and max time" : {
519
519
queryString : url .Values (map [string ][]string {"query" : {"up" }}),
@@ -522,7 +522,7 @@ func TestReportQueryStatsFormat(t *testing.T) {
522
522
DataSelectMinTime : 1704067200000 ,
523
523
},
524
524
expectedLog : `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0 data_select_max_time=1704153600 data_select_min_time=1704067200 query_length=2 param_query=up` ,
525
- source : tripperware .SourceAPI ,
525
+ source : requestmeta .SourceAPI ,
526
526
},
527
527
"should include query stats with store gateway stats" : {
528
528
queryStats : & querier_stats.QueryStats {
@@ -541,16 +541,16 @@ func TestReportQueryStatsFormat(t *testing.T) {
541
541
},
542
542
},
543
543
expectedLog : `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=3 response_series_count=100 fetched_series_count=100 fetched_chunks_count=200 fetched_samples_count=300 fetched_chunks_bytes=1024 fetched_data_bytes=2048 split_queries=10 status_code=200 response_size=1000 samples_scanned=0 store_gateway_touched_postings_count=20 store_gateway_touched_posting_bytes=200 query_storage_wall_time_seconds=6000` ,
544
- source : tripperware .SourceAPI ,
544
+ source : requestmeta .SourceAPI ,
545
545
},
546
546
"should not report a log" : {
547
547
expectedLog : `` ,
548
- source : tripperware .SourceRuler ,
548
+ source : requestmeta .SourceRuler ,
549
549
enabledRulerQueryStatsLog : false ,
550
550
},
551
551
"should report a log" : {
552
552
expectedLog : `level=info msg="query stats" component=query-frontend method=GET path=/prometheus/api/v1/query response_time=1s query_wall_time_seconds=0 response_series_count=0 fetched_series_count=0 fetched_chunks_count=0 fetched_samples_count=0 fetched_chunks_bytes=0 fetched_data_bytes=0 split_queries=0 status_code=200 response_size=1000 samples_scanned=0` ,
553
- source : tripperware .SourceRuler ,
553
+ source : requestmeta .SourceRuler ,
554
554
enabledRulerQueryStatsLog : true ,
555
555
},
556
556
}
@@ -559,6 +559,7 @@ func TestReportQueryStatsFormat(t *testing.T) {
559
559
t .Run (testName , func (t * testing.T ) {
560
560
handler := NewHandler (HandlerConfig {QueryStatsEnabled : true , EnabledRulerQueryStatsLog : testData .enabledRulerQueryStatsLog }, tenantfederation.Config {}, http .DefaultTransport , logger , nil )
561
561
req .Header = testData .header
562
+ req = req .WithContext (requestmeta .ContextWithRequestSource (context .Background (), testData .source ))
562
563
handler .reportQueryStats (req , testData .source , userID , testData .queryString , responseTime , testData .queryStats , testData .responseErr , statusCode , resp )
563
564
data , err := io .ReadAll (outputBuf )
564
565
require .NoError (t , err )
@@ -706,7 +707,7 @@ func Test_TenantFederation_MaxTenant(t *testing.T) {
706
707
require .Contains (t , string (body ), test .expectedErrMsg )
707
708
708
709
if strings .Contains (test .expectedErrMsg , "too many tenants" ) {
709
- v := promtest .ToFloat64 (handler .rejectedQueries .WithLabelValues (reasonTooManyTenants , tripperware .SourceAPI , test .orgId ))
710
+ v := promtest .ToFloat64 (handler .rejectedQueries .WithLabelValues (reasonTooManyTenants , requestmeta .SourceAPI , test .orgId ))
710
711
assert .Equal (t , float64 (1 ), v )
711
712
}
712
713
}
0 commit comments