Get basic statistics from series volume requests (#9832)

The `series_volume` endpoint returns stats about the call. This PR wires
things up such that basic stats are returned:
- Execution time
- Number of responses
trevorwhitney/how-to-make-a-pr^2
Travis Patterson 3 years ago committed by GitHub
parent c129cfe93c
commit e2e695e8cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      pkg/querier/queryrange/codec.go
  2. 1
      pkg/querier/queryrange/roundtrip.go
  3. 21
      pkg/querier/queryrange/stats_test.go

@ -1055,6 +1055,16 @@ func paramsFromRequest(req queryrangebase.Request) (logql.Params, error) {
return &paramsRangeWrapper{
LokiRequest: r,
}, nil
case *logproto.VolumeRequest:
return &paramsRangeWrapper{
LokiRequest: &LokiRequest{
Query: r.GetQuery(),
Limit: uint32(r.GetLimit()),
Step: r.GetStep(),
StartTs: time.UnixMilli(r.GetStart()),
EndTs: time.UnixMilli(r.GetEnd()),
},
}, nil
case *LokiInstantRequest:
return &paramsInstantWrapper{
LokiInstantRequest: r,

@ -807,6 +807,7 @@ func volumeRangeTripperware(codec queryrangebase.Codec, nextTW queryrangebase.Tr
}
seriesVolumeMiddlewares := []queryrangebase.Middleware{
StatsCollectorMiddleware(),
NewSeriesVolumeMiddleware(),
}

@ -158,6 +158,27 @@ func Test_StatsHTTP(t *testing.T) {
require.Equal(t, streams, data.result)
},
},
{
"volume request",
http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
data := r.Context().Value(ctxKey).(*queryData)
data.recorded = true
data.params, _ = paramsFromRequest(&logproto.VolumeRequest{
Matchers: "foo",
Limit: 100,
})
data.statistics = &statsResult
data.result = streams
w.WriteHeader(http.StatusTeapot)
}),
func(t *testing.T, data *queryData) {
require.Equal(t, fmt.Sprintf("%d", http.StatusTeapot), data.status)
require.Equal(t, "foo", data.params.Query())
require.Equal(t, uint32(100), data.params.Limit())
require.Equal(t, statsResult, *data.statistics)
require.Equal(t, streams, data.result)
},
},
} {
t.Run(test.name, func(t *testing.T) {
statsHTTPMiddleware(metricRecorderFn(func(data *queryData) {

Loading…
Cancel
Save