mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-12-19 15:06:25 +01:00
7d5d33fd71
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
33 lines
965 B
Plaintext
33 lines
965 B
Plaintext
{% import (
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/storage"
|
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/querytracer"
|
|
) %}
|
|
|
|
{% stripspace %}
|
|
SeriesResponse generates response for /api/v1/series.
|
|
See https://prometheus.io/docs/prometheus/latest/querying/api/#finding-series-by-label-matchers
|
|
{% func SeriesResponse(isPartial bool, metricNames []string, qt *querytracer.Tracer, qtDone func()) %}
|
|
{
|
|
"status":"success",
|
|
"isPartial":{% if isPartial %}true{% else %}false{% endif %},
|
|
"data":[
|
|
{% code var mn storage.MetricName %}
|
|
{% for i, metricName := range metricNames %}
|
|
{% code err := mn.UnmarshalString(metricName) %}
|
|
{% if err != nil %}
|
|
{%q= err.Error() %}
|
|
{% else %}
|
|
{%= metricNameObject(&mn) %}
|
|
{% endif %}
|
|
{% if i+1 < len(metricNames) %},{% endif %}
|
|
{% endfor %}
|
|
]
|
|
{% code
|
|
qt.Printf("generate response: series=%d", len(metricNames))
|
|
qtDone()
|
|
%}
|
|
{%= dumpQueryTrace(qt) %}
|
|
}
|
|
{% endfunc %}
|
|
{% endstripspace %}
|