@@ -251,7 +251,6 @@ func TestQueryAnalyze(t *testing.T) {
251251 }
252252 }
253253}
254-
255254func TestAnalyzeOutputNode_Samples (t * testing.T ) {
256255 t .Parallel ()
257256 ng := engine .New (engine.Opts {EngineOpts : promql.EngineOpts {Timeout : 1 * time .Hour }, EnableAnalysis : true , DecodingConcurrency : 2 })
@@ -299,9 +298,9 @@ func TestAnalyzeOutputNode_Samples(t *testing.T) {
299298| | |---[duplicateLabelCheck]: max_series: 2 total_samples: 0 peak_samples: 0
300299| | | |---[coalesce]: max_series: 2 total_samples: 0 peak_samples: 0
301300| | | | |---[concurrent(buff=2)]: max_series: 1 total_samples: 0 peak_samples: 0
302- | | | | | |---[matrixSelector] rate({[__name__="http_requests_total"]}[10m0s] 0 mod 2): max_series: 1 total_samples: 1010 peak_samples: 20
301+ | | | | | |---[matrixSelector] rate({[__name__="http_requests_total"]}[10m0s] 0 mod 2): max_series: 1 total_samples: 1010 peak_samples: 200
303302| | | | |---[concurrent(buff=2)]: max_series: 1 total_samples: 0 peak_samples: 0
304- | | | | | |---[matrixSelector] rate({[__name__="http_requests_total"]}[10m0s] 1 mod 2): max_series: 1 total_samples: 1010 peak_samples: 20
303+ | | | | | |---[matrixSelector] rate({[__name__="http_requests_total"]}[10m0s] 1 mod 2): max_series: 1 total_samples: 1010 peak_samples: 200
305304`
306305 require .EqualValues (t , expected , result )
307306}
@@ -332,3 +331,58 @@ func renderAnalysisTree(node *engine.AnalyzeOutputNode, level int) string {
332331
333332 return result .String ()
334333}
334+
335+ func TestAnalyzPeak (t * testing.T ) {
336+ t .Parallel ()
337+ ng := engine .New (engine.Opts {EngineOpts : promql.EngineOpts {Timeout : 1 * time .Hour }, EnableAnalysis : true , DecodingConcurrency : 2 })
338+ ctx := context .Background ()
339+ load := `load 30s
340+ http_requests_total{pod="nginx-1"} 1+1x100
341+ http_requests_total{pod="nginx-2"} 1+1x100`
342+
343+ tstorage := promqltest .LoadedStorage (t , load )
344+ defer tstorage .Close ()
345+ minT := tstorage .Head ().Meta ().MinTime
346+ maxT := tstorage .Head ().Meta ().MaxTime
347+
348+ query , err := ng .NewInstantQuery (ctx , tstorage , nil , "http_requests_total" , time .Unix (0 , 0 ))
349+ testutil .Ok (t , err )
350+ queryResults := query .Exec (context .Background ())
351+ testutil .Ok (t , queryResults .Err )
352+ explainableQuery := query .(engine.ExplainableQuery )
353+ analyzeOutput := explainableQuery .Analyze ()
354+ require .Greater (t , analyzeOutput .PeakSamples (), int64 (0 ))
355+ require .Greater (t , analyzeOutput .TotalSamples (), int64 (0 ))
356+
357+ rangeQry , err := ng .NewRangeQuery (
358+ ctx ,
359+ tstorage ,
360+ promql .NewPrometheusQueryOpts (false , 0 ),
361+ "sum(rate(http_requests_total[10m])) by (pod)" ,
362+ time .Unix (minT , 0 ),
363+ time .Unix (maxT , 0 ),
364+ 60 * time .Second ,
365+ )
366+ testutil .Ok (t , err )
367+ queryResults = rangeQry .Exec (context .Background ())
368+ testutil .Ok (t , queryResults .Err )
369+
370+ explainableQuery = rangeQry .(engine.ExplainableQuery )
371+ analyzeOutput = explainableQuery .Analyze ()
372+
373+ t .Logf ("value of peak = %v" , analyzeOutput .PeakSamples ())
374+ require .Equal (t , int64 (200 ), analyzeOutput .PeakSamples ())
375+
376+ result := renderAnalysisTree (analyzeOutput , 0 )
377+ expected := `[duplicateLabelCheck]: max_series: 2 total_samples: 0 peak_samples: 0
378+ |---[concurrent(buff=2)]: max_series: 2 total_samples: 0 peak_samples: 0
379+ | |---[aggregate] sum by ([pod]): max_series: 2 total_samples: 0 peak_samples: 0
380+ | | |---[duplicateLabelCheck]: max_series: 2 total_samples: 0 peak_samples: 0
381+ | | | |---[coalesce]: max_series: 2 total_samples: 0 peak_samples: 0
382+ | | | | |---[concurrent(buff=2)]: max_series: 1 total_samples: 0 peak_samples: 0
383+ | | | | | |---[matrixSelector] rate({[__name__="http_requests_total"]}[10m0s] 0 mod 2): max_series: 1 total_samples: 1010 peak_samples: 200
384+ | | | | |---[concurrent(buff=2)]: max_series: 1 total_samples: 0 peak_samples: 0
385+ | | | | | |---[matrixSelector] rate({[__name__="http_requests_total"]}[10m0s] 1 mod 2): max_series: 1 total_samples: 1010 peak_samples: 200
386+ `
387+ require .EqualValues (t , expected , result )
388+ }
0 commit comments