@@ -22,44 +22,24 @@ type protectionMiddleware struct {
2222 next queryrange.Handler
2323 engine * ProtectionEngine
2424 logger log.Logger
25- parseLatency prometheus.Histogram
26- evalLatency prometheus.Histogram
2725 totalLatency prometheus.Histogram
2826}
2927
3028// NewProtectionMiddleware creates a new middleware that applies protection rules to queries.
3129func NewProtectionMiddleware (engine * ProtectionEngine , logger log.Logger , reg prometheus.Registerer ) queryrange.Middleware {
32- durationBuckets := []float64 {0.0001 , 0.00025 , 0.0005 , 0.001 , 0.005 , 0.01 , 0.1 , 1.0 , 10.0 }
33-
34- parseLatency := promauto .With (reg ).NewHistogram (prometheus.HistogramOpts {
35- Namespace : "thanos" ,
36- Subsystem : "query_frontend" ,
37- Name : "protection_parse_duration_seconds" ,
38- Help : "Duration of PromQL parsing in the protection middleware." ,
39- Buckets : durationBuckets ,
40- })
41- evalLatency := promauto .With (reg ).NewHistogram (prometheus.HistogramOpts {
42- Namespace : "thanos" ,
43- Subsystem : "query_frontend" ,
44- Name : "protection_evaluate_duration_seconds" ,
45- Help : "Duration of rule evaluation in the protection middleware." ,
46- Buckets : durationBuckets ,
47- })
4830 totalLatency := promauto .With (reg ).NewHistogram (prometheus.HistogramOpts {
4931 Namespace : "thanos" ,
5032 Subsystem : "query_frontend" ,
5133 Name : "protection_duration_seconds" ,
5234 Help : "Total duration of the protection middleware, including parsing and evaluation." ,
53- Buckets : durationBuckets ,
35+ Buckets : [] float64 { 0.0001 , 0.00025 , 0.0005 , 0.001 , 0.005 , 0.01 , 0.1 , 1.0 , 10.0 } ,
5436 })
5537
5638 return queryrange .MiddlewareFunc (func (next queryrange.Handler ) queryrange.Handler {
5739 return & protectionMiddleware {
5840 next : next ,
5941 engine : engine ,
6042 logger : logger ,
61- parseLatency : parseLatency ,
62- evalLatency : evalLatency ,
6343 totalLatency : totalLatency ,
6444 }
6545 })
@@ -74,11 +54,8 @@ func (m *protectionMiddleware) Do(ctx context.Context, r queryrange.Request) (qu
7454 totalStart := time .Now ()
7555 defer func () { m .totalLatency .Observe (time .Since (totalStart ).Seconds ()) }()
7656
77- // Parse PromQL and measure latency.
78- parseStart := time .Now ()
57+ // Parse PromQL.
7958 parsed , err := extpromql .ParseExpr (query )
80- m .parseLatency .Observe (time .Since (parseStart ).Seconds ())
81-
8259 if err != nil {
8360 // Malformed query: let downstream handle it, don't block.
8461 level .Debug (m .logger ).Log ("msg" , "protection middleware: failed to parse query, skipping" , "err" , err )
@@ -95,9 +72,7 @@ func (m *protectionMiddleware) Do(ctx context.Context, r queryrange.Request) (qu
9572 }
9673
9774 // Evaluate all protection rules.
98- evalStart := time .Now ()
9975 protectionResult , err := m .engine .Evaluate (ctx , req )
100- m .evalLatency .Observe (time .Since (evalStart ).Seconds ())
10176
10277 if err != nil {
10378 return nil , errors .Wrap (err , "protection engine evaluation failed" )
0 commit comments