{% import ( "github.com/VictoriaMetrics/VictoriaMetrics/app/vmselect/netstorage" "github.com/VictoriaMetrics/VictoriaMetrics/app/vmselect/promql" "github.com/VictoriaMetrics/VictoriaMetrics/lib/querytracer" ) %} {% stripspace %} QueryResponse generates response for /api/v1/query. See https://prometheus.io/docs/prometheus/latest/querying/api/#instant-queries {% func QueryResponse(isPartial bool, rs []netstorage.Result, qt *querytracer.Tracer, qtDone func(), qs *promql.QueryStats) %} { {% code seriesCount := len(rs) %} "status":"success", "isPartial":{% if isPartial %}true{% else %}false{% endif %}, "data":{ "resultType":"vector", "result":[ {% if len(rs) > 0 %} { "metric": {%= metricNameObject(&rs[0].MetricName) %}, "value": {%= metricRow(rs[0].Timestamps[0], rs[0].Values[0]) %} } {% code rs = rs[1:] %} {% for i := range rs %} {% code r := &rs[i] %} ,{ "metric": {%= metricNameObject(&r.MetricName) %}, "value": {%= metricRow(r.Timestamps[0], r.Values[0]) %} } {% endfor %} {% endif %} ] }, "stats":{ {% code // seriesFetched is string instead of int because of historical reasons. // It cannot be converted to int without breaking backwards compatibility at vmalert :( %} "seriesFetched": "{%dl qs.SeriesFetched.Load() %}", "executionTimeMsec": {%dl qs.ExecutionTimeMsec.Load() %} } {% code qt.Printf("generate /api/v1/query response for series=%d", seriesCount) qtDone() %} {%= dumpQueryTrace(qt) %} } {% endfunc %} {% endstripspace %}