VictoriaMetrics/app/vmselect/prometheus/series_response.qtpl.go
Aliaksandr Valialkin 7d5d33fd71
lib/storage: return marshaled metric names from SearchMetricNames
Previously SearchMetricNames was returning unmarshaled metric names.
This wasn't great for vmstorage, which should spend additional CPU time
for marshaling the metric names before sending them to vmselect.

While at it, remove possible duplicate metric names, which could occur when
multiple samples for new time series are ingested via concurrent requests.

Also sort the metric names before returning them to the client.
This simplifies debugging of the returned metric names across repeated requests to /api/v1/series
2022-06-28 18:16:32 +03:00

108 lines
4.0 KiB
Go

// Code generated by qtc from "series_response.qtpl". DO NOT EDIT.
// See https://github.com/valyala/quicktemplate for details.
//line app/vmselect/prometheus/series_response.qtpl:1
package prometheus
//line app/vmselect/prometheus/series_response.qtpl:1
import (
"github.com/VictoriaMetrics/VictoriaMetrics/lib/querytracer"
"github.com/VictoriaMetrics/VictoriaMetrics/lib/storage"
)
// SeriesResponse generates response for /api/v1/series.See https://prometheus.io/docs/prometheus/latest/querying/api/#finding-series-by-label-matchers
//line app/vmselect/prometheus/series_response.qtpl:9
import (
qtio422016 "io"
qt422016 "github.com/valyala/quicktemplate"
)
//line app/vmselect/prometheus/series_response.qtpl:9
var (
_ = qtio422016.Copy
_ = qt422016.AcquireByteBuffer
)
//line app/vmselect/prometheus/series_response.qtpl:9
func StreamSeriesResponse(qw422016 *qt422016.Writer, isPartial bool, metricNames []string, qt *querytracer.Tracer, qtDone func()) {
//line app/vmselect/prometheus/series_response.qtpl:9
qw422016.N().S(`{"status":"success","isPartial":`)
//line app/vmselect/prometheus/series_response.qtpl:12
if isPartial {
//line app/vmselect/prometheus/series_response.qtpl:12
qw422016.N().S(`true`)
//line app/vmselect/prometheus/series_response.qtpl:12
} else {
//line app/vmselect/prometheus/series_response.qtpl:12
qw422016.N().S(`false`)
//line app/vmselect/prometheus/series_response.qtpl:12
}
//line app/vmselect/prometheus/series_response.qtpl:12
qw422016.N().S(`,"data":[`)
//line app/vmselect/prometheus/series_response.qtpl:14
var mn storage.MetricName
//line app/vmselect/prometheus/series_response.qtpl:15
for i, metricName := range metricNames {
//line app/vmselect/prometheus/series_response.qtpl:16
err := mn.UnmarshalString(metricName)
//line app/vmselect/prometheus/series_response.qtpl:17
if err != nil {
//line app/vmselect/prometheus/series_response.qtpl:18
qw422016.N().Q(err.Error())
//line app/vmselect/prometheus/series_response.qtpl:19
} else {
//line app/vmselect/prometheus/series_response.qtpl:20
streammetricNameObject(qw422016, &mn)
//line app/vmselect/prometheus/series_response.qtpl:21
}
//line app/vmselect/prometheus/series_response.qtpl:22
if i+1 < len(metricNames) {
//line app/vmselect/prometheus/series_response.qtpl:22
qw422016.N().S(`,`)
//line app/vmselect/prometheus/series_response.qtpl:22
}
//line app/vmselect/prometheus/series_response.qtpl:23
}
//line app/vmselect/prometheus/series_response.qtpl:23
qw422016.N().S(`]`)
//line app/vmselect/prometheus/series_response.qtpl:26
qt.Printf("generate response: series=%d", len(metricNames))
qtDone()
//line app/vmselect/prometheus/series_response.qtpl:29
streamdumpQueryTrace(qw422016, qt)
//line app/vmselect/prometheus/series_response.qtpl:29
qw422016.N().S(`}`)
//line app/vmselect/prometheus/series_response.qtpl:31
}
//line app/vmselect/prometheus/series_response.qtpl:31
func WriteSeriesResponse(qq422016 qtio422016.Writer, isPartial bool, metricNames []string, qt *querytracer.Tracer, qtDone func()) {
//line app/vmselect/prometheus/series_response.qtpl:31
qw422016 := qt422016.AcquireWriter(qq422016)
//line app/vmselect/prometheus/series_response.qtpl:31
StreamSeriesResponse(qw422016, isPartial, metricNames, qt, qtDone)
//line app/vmselect/prometheus/series_response.qtpl:31
qt422016.ReleaseWriter(qw422016)
//line app/vmselect/prometheus/series_response.qtpl:31
}
//line app/vmselect/prometheus/series_response.qtpl:31
func SeriesResponse(isPartial bool, metricNames []string, qt *querytracer.Tracer, qtDone func()) string {
//line app/vmselect/prometheus/series_response.qtpl:31
qb422016 := qt422016.AcquireByteBuffer()
//line app/vmselect/prometheus/series_response.qtpl:31
WriteSeriesResponse(qb422016, isPartial, metricNames, qt, qtDone)
//line app/vmselect/prometheus/series_response.qtpl:31
qs422016 := string(qb422016.B)
//line app/vmselect/prometheus/series_response.qtpl:31
qt422016.ReleaseByteBuffer(qb422016)
//line app/vmselect/prometheus/series_response.qtpl:31
return qs422016
//line app/vmselect/prometheus/series_response.qtpl:31
}