@@ -28,11 +28,11 @@ import (
28
28
"github.com/cortexproject/cortex/pkg/querier"
29
29
querier_stats "github.com/cortexproject/cortex/pkg/querier/stats"
30
30
"github.com/cortexproject/cortex/pkg/querier/tenantfederation"
31
- "github.com/cortexproject/cortex/pkg/querier/tripperware"
32
31
"github.com/cortexproject/cortex/pkg/tenant"
33
32
util_api "github.com/cortexproject/cortex/pkg/util/api"
34
33
"github.com/cortexproject/cortex/pkg/util/limiter"
35
34
util_log "github.com/cortexproject/cortex/pkg/util/log"
35
+ "github.com/cortexproject/cortex/pkg/util/requestmeta"
36
36
)
37
37
38
38
type roundTripperFunc func (* http.Request ) (* http.Response , error )
@@ -218,7 +218,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
218
218
}, nil
219
219
}),
220
220
additionalMetricsCheckFunc : func (h * Handler ) {
221
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonResponseBodySizeExceeded , tripperware .SourceAPI , userID ))
221
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonResponseBodySizeExceeded , requestmeta .SourceAPI , userID ))
222
222
assert .Equal (t , float64 (1 ), v )
223
223
},
224
224
expectedStatusCode : http .StatusRequestEntityTooLarge ,
@@ -234,7 +234,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
234
234
}, nil
235
235
}),
236
236
additionalMetricsCheckFunc : func (h * Handler ) {
237
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTooManyRequests , tripperware .SourceAPI , userID ))
237
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTooManyRequests , requestmeta .SourceAPI , userID ))
238
238
assert .Equal (t , float64 (1 ), v )
239
239
},
240
240
expectedStatusCode : http .StatusTooManyRequests ,
@@ -250,7 +250,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
250
250
}, nil
251
251
}),
252
252
additionalMetricsCheckFunc : func (h * Handler ) {
253
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTooManySamples , tripperware .SourceAPI , userID ))
253
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTooManySamples , requestmeta .SourceAPI , userID ))
254
254
assert .Equal (t , float64 (1 ), v )
255
255
},
256
256
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -266,7 +266,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
266
266
}, nil
267
267
}),
268
268
additionalMetricsCheckFunc : func (h * Handler ) {
269
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTimeRangeExceeded , tripperware .SourceAPI , userID ))
269
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonTimeRangeExceeded , requestmeta .SourceAPI , userID ))
270
270
assert .Equal (t , float64 (1 ), v )
271
271
},
272
272
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -282,7 +282,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
282
282
}, nil
283
283
}),
284
284
additionalMetricsCheckFunc : func (h * Handler ) {
285
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonSeriesFetched , tripperware .SourceAPI , userID ))
285
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonSeriesFetched , requestmeta .SourceAPI , userID ))
286
286
assert .Equal (t , float64 (1 ), v )
287
287
},
288
288
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -298,7 +298,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
298
298
}, nil
299
299
}),
300
300
additionalMetricsCheckFunc : func (h * Handler ) {
301
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunksFetched , tripperware .SourceAPI , userID ))
301
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunksFetched , requestmeta .SourceAPI , userID ))
302
302
assert .Equal (t , float64 (1 ), v )
303
303
},
304
304
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -314,7 +314,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
314
314
}, nil
315
315
}),
316
316
additionalMetricsCheckFunc : func (h * Handler ) {
317
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunkBytesFetched , tripperware .SourceAPI , userID ))
317
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunkBytesFetched , requestmeta .SourceAPI , userID ))
318
318
assert .Equal (t , float64 (1 ), v )
319
319
},
320
320
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -330,7 +330,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
330
330
}, nil
331
331
}),
332
332
additionalMetricsCheckFunc : func (h * Handler ) {
333
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonDataBytesFetched , tripperware .SourceAPI , userID ))
333
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonDataBytesFetched , requestmeta .SourceAPI , userID ))
334
334
assert .Equal (t , float64 (1 ), v )
335
335
},
336
336
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -346,7 +346,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
346
346
}, nil
347
347
}),
348
348
additionalMetricsCheckFunc : func (h * Handler ) {
349
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonSeriesLimitStoreGateway , tripperware .SourceAPI , userID ))
349
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonSeriesLimitStoreGateway , requestmeta .SourceAPI , userID ))
350
350
assert .Equal (t , float64 (1 ), v )
351
351
},
352
352
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -362,7 +362,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
362
362
}, nil
363
363
}),
364
364
additionalMetricsCheckFunc : func (h * Handler ) {
365
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunksLimitStoreGateway , tripperware .SourceAPI , userID ))
365
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonChunksLimitStoreGateway , requestmeta .SourceAPI , userID ))
366
366
assert .Equal (t , float64 (1 ), v )
367
367
},
368
368
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -378,7 +378,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
378
378
}, nil
379
379
}),
380
380
additionalMetricsCheckFunc : func (h * Handler ) {
381
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonBytesLimitStoreGateway , tripperware .SourceAPI , userID ))
381
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonBytesLimitStoreGateway , requestmeta .SourceAPI , userID ))
382
382
assert .Equal (t , float64 (1 ), v )
383
383
},
384
384
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -395,7 +395,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
395
395
}, nil
396
396
}),
397
397
additionalMetricsCheckFunc : func (h * Handler ) {
398
- v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonResourceExhausted , tripperware .SourceAPI , userID ))
398
+ v := promtest .ToFloat64 (h .rejectedQueries .WithLabelValues (reasonResourceExhausted , requestmeta .SourceAPI , userID ))
399
399
assert .Equal (t , float64 (1 ), v )
400
400
},
401
401
expectedStatusCode : http .StatusUnprocessableEntity ,
@@ -412,7 +412,7 @@ func TestHandler_ServeHTTP(t *testing.T) {
412
412
}, nil
413
413
}),
414
414
additionalMetricsCheckFunc : func (h * Handler ) {
415
- v := promtest .ToFloat64 (h .slowQueries .WithLabelValues (tripperware .SourceAPI , userID ))
415
+ v := promtest .ToFloat64 (h .slowQueries .WithLabelValues (requestmeta .SourceAPI , userID ))
416
416
assert .Equal (t , float64 (1 ), v )
417
417
},
418
418
expectedStatusCode : http .StatusOK ,
@@ -474,12 +474,12 @@ func TestReportQueryStatsFormat(t *testing.T) {
474
474
tests := map [string ]testCase {
475
475
"should not include query and header details if empty" : {
476
476
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` ,
477
- source : tripperware .SourceAPI ,
477
+ source : requestmeta .SourceAPI ,
478
478
},
479
479
"should include query length and string at the end" : {
480
480
queryString : url .Values (map [string ][]string {"query" : {"up" }}),
481
481
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` ,
482
- source : tripperware .SourceAPI ,
482
+ source : requestmeta .SourceAPI ,
483
483
},
484
484
"should include query stats" : {
485
485
queryStats : & querier_stats.QueryStats {
@@ -496,27 +496,27 @@ func TestReportQueryStatsFormat(t *testing.T) {
496
496
},
497
497
},
498
498
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` ,
499
- source : tripperware .SourceAPI ,
499
+ source : requestmeta .SourceAPI ,
500
500
},
501
501
"should include user agent" : {
502
502
header : http.Header {"User-Agent" : []string {"Grafana" }},
503
503
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` ,
504
- source : tripperware .SourceAPI ,
504
+ source : requestmeta .SourceAPI ,
505
505
},
506
506
"should include engine type" : {
507
507
header : http.Header {http .CanonicalHeaderKey (engine .TypeHeader ): []string {string (engine .Thanos )}},
508
508
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 engine_type=thanos` ,
509
- source : tripperware .SourceAPI ,
509
+ source : requestmeta .SourceAPI ,
510
510
},
511
511
"should include block store type" : {
512
512
header : http.Header {http .CanonicalHeaderKey (querier .BlockStoreTypeHeader ): []string {"parquet" }},
513
513
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 block_store_type=parquet` ,
514
- source : tripperware .SourceAPI ,
514
+ source : requestmeta .SourceAPI ,
515
515
},
516
516
"should include response error" : {
517
517
responseErr : errors .New ("foo_err" ),
518
518
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` ,
519
- source : tripperware .SourceAPI ,
519
+ source : requestmeta .SourceAPI ,
520
520
},
521
521
"should include query priority" : {
522
522
queryString : url .Values (map [string ][]string {"query" : {"up" }}),
@@ -525,7 +525,7 @@ func TestReportQueryStatsFormat(t *testing.T) {
525
525
PriorityAssigned : true ,
526
526
},
527
527
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` ,
528
- source : tripperware .SourceAPI ,
528
+ source : requestmeta .SourceAPI ,
529
529
},
530
530
"should include data fetch min and max time" : {
531
531
queryString : url .Values (map [string ][]string {"query" : {"up" }}),
@@ -534,7 +534,7 @@ func TestReportQueryStatsFormat(t *testing.T) {
534
534
DataSelectMinTime : 1704067200000 ,
535
535
},
536
536
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` ,
537
- source : tripperware .SourceAPI ,
537
+ source : requestmeta .SourceAPI ,
538
538
},
539
539
"should include query stats with store gateway stats" : {
540
540
queryStats : & querier_stats.QueryStats {
@@ -553,16 +553,16 @@ func TestReportQueryStatsFormat(t *testing.T) {
553
553
},
554
554
},
555
555
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` ,
556
- source : tripperware .SourceAPI ,
556
+ source : requestmeta .SourceAPI ,
557
557
},
558
558
"should not report a log" : {
559
559
expectedLog : `` ,
560
- source : tripperware .SourceRuler ,
560
+ source : requestmeta .SourceRuler ,
561
561
enabledRulerQueryStatsLog : false ,
562
562
},
563
563
"should report a log" : {
564
564
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` ,
565
- source : tripperware .SourceRuler ,
565
+ source : requestmeta .SourceRuler ,
566
566
enabledRulerQueryStatsLog : true ,
567
567
},
568
568
}
@@ -571,6 +571,7 @@ func TestReportQueryStatsFormat(t *testing.T) {
571
571
t .Run (testName , func (t * testing.T ) {
572
572
handler := NewHandler (HandlerConfig {QueryStatsEnabled : true , EnabledRulerQueryStatsLog : testData .enabledRulerQueryStatsLog }, tenantfederation.Config {}, http .DefaultTransport , logger , nil )
573
573
req .Header = testData .header
574
+ req = req .WithContext (requestmeta .ContextWithRequestSource (context .Background (), testData .source ))
574
575
handler .reportQueryStats (req , testData .source , userID , testData .queryString , responseTime , testData .queryStats , testData .responseErr , statusCode , resp )
575
576
data , err := io .ReadAll (outputBuf )
576
577
require .NoError (t , err )
@@ -718,7 +719,7 @@ func Test_TenantFederation_MaxTenant(t *testing.T) {
718
719
require .Contains (t , string (body ), test .expectedErrMsg )
719
720
720
721
if strings .Contains (test .expectedErrMsg , "too many tenants" ) {
721
- v := promtest .ToFloat64 (handler .rejectedQueries .WithLabelValues (reasonTooManyTenants , tripperware .SourceAPI , test .orgId ))
722
+ v := promtest .ToFloat64 (handler .rejectedQueries .WithLabelValues (reasonTooManyTenants , requestmeta .SourceAPI , test .orgId ))
722
723
assert .Equal (t , float64 (1 ), v )
723
724
}
724
725
}
0 commit comments