@@ -1946,60 +1946,62 @@ func HandleSeriesQuery(r *httpRequestHandler) {
19461946}
19471947
19481948func HandleBadgesQuery (r * httpRequestHandler ) {
1949- var err error
1950- var req seriesRequest
1951- if req , err = r .parseSeriesRequest (); err == nil {
1949+ req , err := r .parseSeriesRequest ()
1950+ if err == nil {
19521951 err = req .validate (& r .requestHandler )
19531952 }
19541953 if err != nil {
19551954 respondJSON (r , nil , 0 , 0 , err )
19561955 return
19571956 }
1958- var limit int
1959- if len (req .promQL ) == 0 {
1960- if req .promQL , err = r .getPromQuery (req ); err != nil {
1957+ ctx , cancel := context .WithTimeout (r .Context (), r .querySelectTimeout )
1958+ defer cancel ()
1959+ query := promql.Query {
1960+ Start : req .from .Unix (),
1961+ End : req .to .Unix (),
1962+ Step : req .step ,
1963+ Expr : req .promQL ,
1964+ Options : promql.Options {
1965+ Version : req .version ,
1966+ Version3Start : r .Version3Start .Load (),
1967+ AvoidCache : req .avoidCache ,
1968+ Extend : req .excessPoints ,
1969+ ExplicitGrouping : true ,
1970+ ScreenWidth : req .screenWidth ,
1971+ Vars : req .vars ,
1972+ Compat : req .compat ,
1973+ TimeNow : time .Now ().Unix (),
1974+ },
1975+ }
1976+ if query .Expr == "" {
1977+ query .Expr , err = r .getPromQuery (req )
1978+ if err != nil {
19611979 respondJSON (r , nil , 0 , 0 , err )
19621980 return
19631981 }
1964- } else {
1965- limit = req .numResults
19661982 }
1967- ctx , cancel := context .WithTimeout (r .Context (), r .querySelectTimeout )
1968- defer cancel ()
1969- var offsets = make ([]int64 , 0 , len (req .shifts ))
1970- for _ , v := range req .shifts {
1971- offsets = append (offsets , - toSec (v ))
1983+ ev , err := r .promEngine .NewEvaluator (ctx , r , query )
1984+ if err != nil {
1985+ respondJSON (r , nil , 0 , 0 , err )
1986+ return
19721987 }
1973- ev , err := r .promEngine .NewEvaluator (
1974- ctx , r ,
1975- promql.Query {
1976- Start : req .from .Unix (),
1977- End : req .to .Unix (),
1978- Step : req .step ,
1979- Expr : req .promQL ,
1980- Options : promql.Options {
1981- Version : req .version ,
1982- Version3Start : r .Version3Start .Load (),
1983- AvoidCache : req .avoidCache ,
1984- Extend : req .excessPoints ,
1985- ExplicitGrouping : true ,
1986- QuerySequential : r .querySequential ,
1987- ScreenWidth : req .screenWidth ,
1988- MaxHost : req .maxHost ,
1989- Offsets : offsets ,
1990- Limit : limit ,
1991- Vars : req .vars ,
1992- Compat : req .compat ,
1993- },
1994- })
1988+ metric := ev .QueryMetric ()
1989+ if metric == nil {
1990+ respondJSON (r , nil , 0 , 0 , err )
1991+ return
1992+ }
1993+ query .Expr = fmt .Sprintf (`%s{@what="countraw,avg",@by="1,2",2=" 0",2=" %d"}` , format .BuiltinMetricNameBadges , metric .MetricID )
1994+ query .Options .Vars = nil
1995+ val , cancel , err := r .promEngine .Exec (ctx , r , query )
19951996 if err != nil {
19961997 respondJSON (r , nil , 0 , 0 , err )
19971998 return
19981999 }
1999- var res SeriesResponse
2000- if metric := ev .QueryMetric (); metric != nil {
2001- badges , cancel := r .queryBadges (ctx , req , metric )
2002- defer cancel ()
2000+ defer cancel ()
2001+ res := SeriesResponse {
2002+ DebugQueries : r .trace ,
2003+ }
2004+ if badges , _ := val .(* promql.TimeSeries ); badges != nil {
20032005 for _ , d := range badges .Series .Data {
20042006 if t , ok := d .Tags .ID2Tag ["2" ]; ! ok || t .SValue != metric .Name {
20052007 continue
0 commit comments