mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
Export "null" in jsonl instead of NaN (#2518)
* Export "null" in jsonl instead of NaN The NaN appeared because of staleness markers that were added for compatibility. I think it's better to use json `null`, implemented here. Also maybe it also makes sense to add a flag like `?skip-staleness-markers=true` to `/export`, to skip nulls at all? * Update app/vmselect/prometheus/export.qtpl * app/vmselect/prometheus/export.qtpl.go: `make quicktemplate-gen` * docs/CHANGELOG.md: document the change Co-authored-by: Aliaksandr Valialkin <valyala@victoriametrics.com>
This commit is contained in:
parent
5f41c48e4f
commit
e6ee235707
3 changed files with 272 additions and 261 deletions
|
@ -1,5 +1,6 @@
|
||||||
{% import (
|
{% import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"math"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -100,7 +101,7 @@
|
||||||
{%f= values[0] %}
|
{%f= values[0] %}
|
||||||
{% code values = values[1:] %}
|
{% code values = values[1:] %}
|
||||||
{% for _, v := range values %}
|
{% for _, v := range values %}
|
||||||
,{%f= v %}
|
,{% if math.IsNaN(v) %}null{% else %}{%f= v %}{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
],
|
],
|
||||||
|
|
|
@ -7,6 +7,7 @@ package prometheus
|
||||||
//line app/vmselect/prometheus/export.qtpl:1
|
//line app/vmselect/prometheus/export.qtpl:1
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"math"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -14,558 +15,566 @@ import (
|
||||||
"github.com/valyala/quicktemplate"
|
"github.com/valyala/quicktemplate"
|
||||||
)
|
)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:12
|
//line app/vmselect/prometheus/export.qtpl:13
|
||||||
import (
|
import (
|
||||||
qtio422016 "io"
|
qtio422016 "io"
|
||||||
|
|
||||||
qt422016 "github.com/valyala/quicktemplate"
|
qt422016 "github.com/valyala/quicktemplate"
|
||||||
)
|
)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:12
|
//line app/vmselect/prometheus/export.qtpl:13
|
||||||
var (
|
var (
|
||||||
_ = qtio422016.Copy
|
_ = qtio422016.Copy
|
||||||
_ = qt422016.AcquireByteBuffer
|
_ = qt422016.AcquireByteBuffer
|
||||||
)
|
)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:12
|
//line app/vmselect/prometheus/export.qtpl:13
|
||||||
func StreamExportCSVLine(qw422016 *qt422016.Writer, xb *exportBlock, fieldNames []string) {
|
func StreamExportCSVLine(qw422016 *qt422016.Writer, xb *exportBlock, fieldNames []string) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:13
|
|
||||||
if len(xb.timestamps) == 0 || len(fieldNames) == 0 {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:13
|
|
||||||
return
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:13
|
|
||||||
}
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:14
|
//line app/vmselect/prometheus/export.qtpl:14
|
||||||
for i, timestamp := range xb.timestamps {
|
if len(xb.timestamps) == 0 || len(fieldNames) == 0 {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:14
|
||||||
|
return
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:14
|
||||||
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:15
|
//line app/vmselect/prometheus/export.qtpl:15
|
||||||
|
for i, timestamp := range xb.timestamps {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:16
|
||||||
value := xb.values[i]
|
value := xb.values[i]
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:16
|
//line app/vmselect/prometheus/export.qtpl:17
|
||||||
streamexportCSVField(qw422016, xb.mn, fieldNames[0], timestamp, value)
|
streamexportCSVField(qw422016, xb.mn, fieldNames[0], timestamp, value)
|
||||||
//line app/vmselect/prometheus/export.qtpl:17
|
//line app/vmselect/prometheus/export.qtpl:18
|
||||||
for _, fieldName := range fieldNames[1:] {
|
for _, fieldName := range fieldNames[1:] {
|
||||||
//line app/vmselect/prometheus/export.qtpl:17
|
//line app/vmselect/prometheus/export.qtpl:18
|
||||||
qw422016.N().S(`,`)
|
qw422016.N().S(`,`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:19
|
|
||||||
streamexportCSVField(qw422016, xb.mn, fieldName, timestamp, value)
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:20
|
//line app/vmselect/prometheus/export.qtpl:20
|
||||||
}
|
streamexportCSVField(qw422016, xb.mn, fieldName, timestamp, value)
|
||||||
//line app/vmselect/prometheus/export.qtpl:21
|
//line app/vmselect/prometheus/export.qtpl:21
|
||||||
|
}
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:22
|
||||||
qw422016.N().S(`
|
qw422016.N().S(`
|
||||||
`)
|
`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:22
|
|
||||||
}
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:23
|
||||||
|
}
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
func WriteExportCSVLine(qq422016 qtio422016.Writer, xb *exportBlock, fieldNames []string) {
|
func WriteExportCSVLine(qq422016 qtio422016.Writer, xb *exportBlock, fieldNames []string) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
StreamExportCSVLine(qw422016, xb, fieldNames)
|
StreamExportCSVLine(qw422016, xb, fieldNames)
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
func ExportCSVLine(xb *exportBlock, fieldNames []string) string {
|
func ExportCSVLine(xb *exportBlock, fieldNames []string) string {
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
WriteExportCSVLine(qb422016, xb, fieldNames)
|
WriteExportCSVLine(qb422016, xb, fieldNames)
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
return qs422016
|
return qs422016
|
||||||
//line app/vmselect/prometheus/export.qtpl:23
|
//line app/vmselect/prometheus/export.qtpl:24
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:25
|
|
||||||
func streamexportCSVField(qw422016 *qt422016.Writer, mn *storage.MetricName, fieldName string, timestamp int64, value float64) {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:26
|
//line app/vmselect/prometheus/export.qtpl:26
|
||||||
if fieldName == "__value__" {
|
func streamexportCSVField(qw422016 *qt422016.Writer, mn *storage.MetricName, fieldName string, timestamp int64, value float64) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:27
|
//line app/vmselect/prometheus/export.qtpl:27
|
||||||
qw422016.N().F(value)
|
if fieldName == "__value__" {
|
||||||
//line app/vmselect/prometheus/export.qtpl:28
|
//line app/vmselect/prometheus/export.qtpl:28
|
||||||
return
|
qw422016.N().F(value)
|
||||||
//line app/vmselect/prometheus/export.qtpl:29
|
//line app/vmselect/prometheus/export.qtpl:29
|
||||||
}
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:30
|
|
||||||
if fieldName == "__timestamp__" {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:31
|
|
||||||
qw422016.N().DL(timestamp)
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:32
|
|
||||||
return
|
return
|
||||||
//line app/vmselect/prometheus/export.qtpl:33
|
//line app/vmselect/prometheus/export.qtpl:30
|
||||||
}
|
}
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:31
|
||||||
|
if fieldName == "__timestamp__" {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:32
|
||||||
|
qw422016.N().DL(timestamp)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:33
|
||||||
|
return
|
||||||
//line app/vmselect/prometheus/export.qtpl:34
|
//line app/vmselect/prometheus/export.qtpl:34
|
||||||
if strings.HasPrefix(fieldName, "__timestamp__:") {
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:35
|
//line app/vmselect/prometheus/export.qtpl:35
|
||||||
|
if strings.HasPrefix(fieldName, "__timestamp__:") {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:36
|
||||||
timeFormat := fieldName[len("__timestamp__:"):]
|
timeFormat := fieldName[len("__timestamp__:"):]
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:36
|
|
||||||
switch timeFormat {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:37
|
//line app/vmselect/prometheus/export.qtpl:37
|
||||||
case "unix_s":
|
switch timeFormat {
|
||||||
//line app/vmselect/prometheus/export.qtpl:38
|
//line app/vmselect/prometheus/export.qtpl:38
|
||||||
qw422016.N().DL(timestamp / 1000)
|
case "unix_s":
|
||||||
//line app/vmselect/prometheus/export.qtpl:39
|
//line app/vmselect/prometheus/export.qtpl:39
|
||||||
case "unix_ms":
|
qw422016.N().DL(timestamp / 1000)
|
||||||
//line app/vmselect/prometheus/export.qtpl:40
|
//line app/vmselect/prometheus/export.qtpl:40
|
||||||
qw422016.N().DL(timestamp)
|
case "unix_ms":
|
||||||
//line app/vmselect/prometheus/export.qtpl:41
|
//line app/vmselect/prometheus/export.qtpl:41
|
||||||
case "unix_ns":
|
qw422016.N().DL(timestamp)
|
||||||
//line app/vmselect/prometheus/export.qtpl:42
|
//line app/vmselect/prometheus/export.qtpl:42
|
||||||
qw422016.N().DL(timestamp * 1e6)
|
case "unix_ns":
|
||||||
//line app/vmselect/prometheus/export.qtpl:43
|
//line app/vmselect/prometheus/export.qtpl:43
|
||||||
|
qw422016.N().DL(timestamp * 1e6)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:44
|
||||||
case "rfc3339":
|
case "rfc3339":
|
||||||
//line app/vmselect/prometheus/export.qtpl:45
|
//line app/vmselect/prometheus/export.qtpl:46
|
||||||
bb := quicktemplate.AcquireByteBuffer()
|
bb := quicktemplate.AcquireByteBuffer()
|
||||||
bb.B = time.Unix(timestamp/1000, (timestamp%1000)*1e6).AppendFormat(bb.B[:0], time.RFC3339)
|
bb.B = time.Unix(timestamp/1000, (timestamp%1000)*1e6).AppendFormat(bb.B[:0], time.RFC3339)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:48
|
//line app/vmselect/prometheus/export.qtpl:49
|
||||||
qw422016.N().Z(bb.B)
|
qw422016.N().Z(bb.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:50
|
//line app/vmselect/prometheus/export.qtpl:51
|
||||||
quicktemplate.ReleaseByteBuffer(bb)
|
quicktemplate.ReleaseByteBuffer(bb)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:52
|
|
||||||
default:
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:53
|
//line app/vmselect/prometheus/export.qtpl:53
|
||||||
|
default:
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:54
|
||||||
if strings.HasPrefix(timeFormat, "custom:") {
|
if strings.HasPrefix(timeFormat, "custom:") {
|
||||||
//line app/vmselect/prometheus/export.qtpl:55
|
//line app/vmselect/prometheus/export.qtpl:56
|
||||||
layout := timeFormat[len("custom:"):]
|
layout := timeFormat[len("custom:"):]
|
||||||
bb := quicktemplate.AcquireByteBuffer()
|
bb := quicktemplate.AcquireByteBuffer()
|
||||||
bb.B = time.Unix(timestamp/1000, (timestamp%1000)*1e6).AppendFormat(bb.B[:0], layout)
|
bb.B = time.Unix(timestamp/1000, (timestamp%1000)*1e6).AppendFormat(bb.B[:0], layout)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:59
|
|
||||||
if bytes.ContainsAny(bb.B, `"`+",\n") {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:60
|
//line app/vmselect/prometheus/export.qtpl:60
|
||||||
qw422016.E().QZ(bb.B)
|
if bytes.ContainsAny(bb.B, `"`+",\n") {
|
||||||
//line app/vmselect/prometheus/export.qtpl:61
|
//line app/vmselect/prometheus/export.qtpl:61
|
||||||
} else {
|
qw422016.E().QZ(bb.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:62
|
//line app/vmselect/prometheus/export.qtpl:62
|
||||||
qw422016.N().Z(bb.B)
|
} else {
|
||||||
//line app/vmselect/prometheus/export.qtpl:63
|
//line app/vmselect/prometheus/export.qtpl:63
|
||||||
|
qw422016.N().Z(bb.B)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:64
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:65
|
//line app/vmselect/prometheus/export.qtpl:66
|
||||||
quicktemplate.ReleaseByteBuffer(bb)
|
quicktemplate.ReleaseByteBuffer(bb)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:67
|
|
||||||
} else {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:67
|
|
||||||
qw422016.N().S(`Unsupported timeFormat=`)
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:68
|
//line app/vmselect/prometheus/export.qtpl:68
|
||||||
qw422016.N().S(timeFormat)
|
} else {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:68
|
||||||
|
qw422016.N().S(`Unsupported timeFormat=`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:69
|
//line app/vmselect/prometheus/export.qtpl:69
|
||||||
}
|
qw422016.N().S(timeFormat)
|
||||||
//line app/vmselect/prometheus/export.qtpl:70
|
//line app/vmselect/prometheus/export.qtpl:70
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:71
|
//line app/vmselect/prometheus/export.qtpl:71
|
||||||
return
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:72
|
//line app/vmselect/prometheus/export.qtpl:72
|
||||||
}
|
return
|
||||||
//line app/vmselect/prometheus/export.qtpl:73
|
//line app/vmselect/prometheus/export.qtpl:73
|
||||||
|
}
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:74
|
||||||
v := mn.GetTagValue(fieldName)
|
v := mn.GetTagValue(fieldName)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:74
|
|
||||||
if bytes.ContainsAny(v, `"`+",\n") {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:75
|
//line app/vmselect/prometheus/export.qtpl:75
|
||||||
qw422016.N().QZ(v)
|
if bytes.ContainsAny(v, `"`+",\n") {
|
||||||
//line app/vmselect/prometheus/export.qtpl:76
|
//line app/vmselect/prometheus/export.qtpl:76
|
||||||
} else {
|
qw422016.N().QZ(v)
|
||||||
//line app/vmselect/prometheus/export.qtpl:77
|
//line app/vmselect/prometheus/export.qtpl:77
|
||||||
qw422016.N().Z(v)
|
} else {
|
||||||
//line app/vmselect/prometheus/export.qtpl:78
|
//line app/vmselect/prometheus/export.qtpl:78
|
||||||
}
|
qw422016.N().Z(v)
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:79
|
||||||
|
}
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
func writeexportCSVField(qq422016 qtio422016.Writer, mn *storage.MetricName, fieldName string, timestamp int64, value float64) {
|
func writeexportCSVField(qq422016 qtio422016.Writer, mn *storage.MetricName, fieldName string, timestamp int64, value float64) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
streamexportCSVField(qw422016, mn, fieldName, timestamp, value)
|
streamexportCSVField(qw422016, mn, fieldName, timestamp, value)
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
func exportCSVField(mn *storage.MetricName, fieldName string, timestamp int64, value float64) string {
|
func exportCSVField(mn *storage.MetricName, fieldName string, timestamp int64, value float64) string {
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
writeexportCSVField(qb422016, mn, fieldName, timestamp, value)
|
writeexportCSVField(qb422016, mn, fieldName, timestamp, value)
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
return qs422016
|
return qs422016
|
||||||
//line app/vmselect/prometheus/export.qtpl:79
|
//line app/vmselect/prometheus/export.qtpl:80
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:81
|
//line app/vmselect/prometheus/export.qtpl:82
|
||||||
func StreamExportPrometheusLine(qw422016 *qt422016.Writer, xb *exportBlock) {
|
func StreamExportPrometheusLine(qw422016 *qt422016.Writer, xb *exportBlock) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:82
|
|
||||||
if len(xb.timestamps) == 0 {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:82
|
|
||||||
return
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:82
|
|
||||||
}
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:83
|
//line app/vmselect/prometheus/export.qtpl:83
|
||||||
|
if len(xb.timestamps) == 0 {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:83
|
||||||
|
return
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:83
|
||||||
|
}
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:84
|
||||||
bb := quicktemplate.AcquireByteBuffer()
|
bb := quicktemplate.AcquireByteBuffer()
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:84
|
//line app/vmselect/prometheus/export.qtpl:85
|
||||||
writeprometheusMetricName(bb, xb.mn)
|
writeprometheusMetricName(bb, xb.mn)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:85
|
//line app/vmselect/prometheus/export.qtpl:86
|
||||||
for i, ts := range xb.timestamps {
|
for i, ts := range xb.timestamps {
|
||||||
//line app/vmselect/prometheus/export.qtpl:86
|
//line app/vmselect/prometheus/export.qtpl:87
|
||||||
qw422016.N().Z(bb.B)
|
qw422016.N().Z(bb.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:86
|
|
||||||
qw422016.N().S(` `)
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:87
|
//line app/vmselect/prometheus/export.qtpl:87
|
||||||
|
qw422016.N().S(` `)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:88
|
||||||
qw422016.N().F(xb.values[i])
|
qw422016.N().F(xb.values[i])
|
||||||
//line app/vmselect/prometheus/export.qtpl:87
|
//line app/vmselect/prometheus/export.qtpl:88
|
||||||
qw422016.N().S(` `)
|
qw422016.N().S(` `)
|
||||||
//line app/vmselect/prometheus/export.qtpl:88
|
//line app/vmselect/prometheus/export.qtpl:89
|
||||||
qw422016.N().DL(ts)
|
qw422016.N().DL(ts)
|
||||||
//line app/vmselect/prometheus/export.qtpl:88
|
//line app/vmselect/prometheus/export.qtpl:89
|
||||||
qw422016.N().S(`
|
qw422016.N().S(`
|
||||||
`)
|
`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:89
|
|
||||||
}
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:90
|
//line app/vmselect/prometheus/export.qtpl:90
|
||||||
|
}
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:91
|
||||||
quicktemplate.ReleaseByteBuffer(bb)
|
quicktemplate.ReleaseByteBuffer(bb)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
func WriteExportPrometheusLine(qq422016 qtio422016.Writer, xb *exportBlock) {
|
func WriteExportPrometheusLine(qq422016 qtio422016.Writer, xb *exportBlock) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
StreamExportPrometheusLine(qw422016, xb)
|
StreamExportPrometheusLine(qw422016, xb)
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
func ExportPrometheusLine(xb *exportBlock) string {
|
func ExportPrometheusLine(xb *exportBlock) string {
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
WriteExportPrometheusLine(qb422016, xb)
|
WriteExportPrometheusLine(qb422016, xb)
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
return qs422016
|
return qs422016
|
||||||
//line app/vmselect/prometheus/export.qtpl:91
|
//line app/vmselect/prometheus/export.qtpl:92
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:93
|
//line app/vmselect/prometheus/export.qtpl:94
|
||||||
func StreamExportJSONLine(qw422016 *qt422016.Writer, xb *exportBlock) {
|
func StreamExportJSONLine(qw422016 *qt422016.Writer, xb *exportBlock) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:94
|
//line app/vmselect/prometheus/export.qtpl:95
|
||||||
if len(xb.timestamps) == 0 {
|
if len(xb.timestamps) == 0 {
|
||||||
//line app/vmselect/prometheus/export.qtpl:94
|
//line app/vmselect/prometheus/export.qtpl:95
|
||||||
return
|
return
|
||||||
//line app/vmselect/prometheus/export.qtpl:94
|
//line app/vmselect/prometheus/export.qtpl:95
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:94
|
//line app/vmselect/prometheus/export.qtpl:95
|
||||||
qw422016.N().S(`{"metric":`)
|
qw422016.N().S(`{"metric":`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:96
|
//line app/vmselect/prometheus/export.qtpl:97
|
||||||
streammetricNameObject(qw422016, xb.mn)
|
streammetricNameObject(qw422016, xb.mn)
|
||||||
//line app/vmselect/prometheus/export.qtpl:96
|
//line app/vmselect/prometheus/export.qtpl:97
|
||||||
qw422016.N().S(`,"values":[`)
|
qw422016.N().S(`,"values":[`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:98
|
|
||||||
if len(xb.values) > 0 {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:99
|
//line app/vmselect/prometheus/export.qtpl:99
|
||||||
|
if len(xb.values) > 0 {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:100
|
||||||
values := xb.values
|
values := xb.values
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:100
|
|
||||||
qw422016.N().F(values[0])
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:101
|
//line app/vmselect/prometheus/export.qtpl:101
|
||||||
|
qw422016.N().F(values[0])
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:102
|
||||||
values = values[1:]
|
values = values[1:]
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:102
|
|
||||||
for _, v := range values {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:102
|
|
||||||
qw422016.N().S(`,`)
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:103
|
//line app/vmselect/prometheus/export.qtpl:103
|
||||||
qw422016.N().F(v)
|
for _, v := range values {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:103
|
||||||
|
qw422016.N().S(`,`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:104
|
//line app/vmselect/prometheus/export.qtpl:104
|
||||||
|
if math.IsNaN(v) {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:104
|
||||||
|
qw422016.N().S(`null`)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:104
|
||||||
|
} else {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:104
|
||||||
|
qw422016.N().F(v)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:104
|
||||||
|
}
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:105
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:105
|
//line app/vmselect/prometheus/export.qtpl:106
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:105
|
//line app/vmselect/prometheus/export.qtpl:106
|
||||||
qw422016.N().S(`],"timestamps":[`)
|
qw422016.N().S(`],"timestamps":[`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:108
|
|
||||||
if len(xb.timestamps) > 0 {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:109
|
//line app/vmselect/prometheus/export.qtpl:109
|
||||||
|
if len(xb.timestamps) > 0 {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:110
|
||||||
timestamps := xb.timestamps
|
timestamps := xb.timestamps
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:110
|
|
||||||
qw422016.N().DL(timestamps[0])
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:111
|
//line app/vmselect/prometheus/export.qtpl:111
|
||||||
|
qw422016.N().DL(timestamps[0])
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:112
|
||||||
timestamps = timestamps[1:]
|
timestamps = timestamps[1:]
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:112
|
|
||||||
for _, ts := range timestamps {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:112
|
|
||||||
qw422016.N().S(`,`)
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:113
|
//line app/vmselect/prometheus/export.qtpl:113
|
||||||
qw422016.N().DL(ts)
|
for _, ts := range timestamps {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:113
|
||||||
|
qw422016.N().S(`,`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:114
|
//line app/vmselect/prometheus/export.qtpl:114
|
||||||
|
qw422016.N().DL(ts)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:115
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:115
|
//line app/vmselect/prometheus/export.qtpl:116
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:115
|
//line app/vmselect/prometheus/export.qtpl:116
|
||||||
qw422016.N().S(`]}`)
|
qw422016.N().S(`]}`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:117
|
//line app/vmselect/prometheus/export.qtpl:118
|
||||||
qw422016.N().S(`
|
qw422016.N().S(`
|
||||||
`)
|
`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
func WriteExportJSONLine(qq422016 qtio422016.Writer, xb *exportBlock) {
|
func WriteExportJSONLine(qq422016 qtio422016.Writer, xb *exportBlock) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
StreamExportJSONLine(qw422016, xb)
|
StreamExportJSONLine(qw422016, xb)
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
func ExportJSONLine(xb *exportBlock) string {
|
func ExportJSONLine(xb *exportBlock) string {
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
WriteExportJSONLine(qb422016, xb)
|
WriteExportJSONLine(qb422016, xb)
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
return qs422016
|
return qs422016
|
||||||
//line app/vmselect/prometheus/export.qtpl:118
|
//line app/vmselect/prometheus/export.qtpl:119
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:120
|
//line app/vmselect/prometheus/export.qtpl:121
|
||||||
func StreamExportPromAPILine(qw422016 *qt422016.Writer, xb *exportBlock) {
|
func StreamExportPromAPILine(qw422016 *qt422016.Writer, xb *exportBlock) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:120
|
//line app/vmselect/prometheus/export.qtpl:121
|
||||||
qw422016.N().S(`{"metric":`)
|
qw422016.N().S(`{"metric":`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:122
|
//line app/vmselect/prometheus/export.qtpl:123
|
||||||
streammetricNameObject(qw422016, xb.mn)
|
streammetricNameObject(qw422016, xb.mn)
|
||||||
//line app/vmselect/prometheus/export.qtpl:122
|
//line app/vmselect/prometheus/export.qtpl:123
|
||||||
qw422016.N().S(`,"values":`)
|
qw422016.N().S(`,"values":`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:123
|
//line app/vmselect/prometheus/export.qtpl:124
|
||||||
streamvaluesWithTimestamps(qw422016, xb.values, xb.timestamps)
|
streamvaluesWithTimestamps(qw422016, xb.values, xb.timestamps)
|
||||||
//line app/vmselect/prometheus/export.qtpl:123
|
//line app/vmselect/prometheus/export.qtpl:124
|
||||||
qw422016.N().S(`}`)
|
qw422016.N().S(`}`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
func WriteExportPromAPILine(qq422016 qtio422016.Writer, xb *exportBlock) {
|
func WriteExportPromAPILine(qq422016 qtio422016.Writer, xb *exportBlock) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
StreamExportPromAPILine(qw422016, xb)
|
StreamExportPromAPILine(qw422016, xb)
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
func ExportPromAPILine(xb *exportBlock) string {
|
func ExportPromAPILine(xb *exportBlock) string {
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
WriteExportPromAPILine(qb422016, xb)
|
WriteExportPromAPILine(qb422016, xb)
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
return qs422016
|
return qs422016
|
||||||
//line app/vmselect/prometheus/export.qtpl:125
|
//line app/vmselect/prometheus/export.qtpl:126
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:127
|
//line app/vmselect/prometheus/export.qtpl:128
|
||||||
func StreamExportPromAPIResponse(qw422016 *qt422016.Writer, resultsCh <-chan *quicktemplate.ByteBuffer) {
|
func StreamExportPromAPIResponse(qw422016 *qt422016.Writer, resultsCh <-chan *quicktemplate.ByteBuffer) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:127
|
//line app/vmselect/prometheus/export.qtpl:128
|
||||||
qw422016.N().S(`{"status":"success","data":{"resultType":"matrix","result":[`)
|
qw422016.N().S(`{"status":"success","data":{"resultType":"matrix","result":[`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:133
|
//line app/vmselect/prometheus/export.qtpl:134
|
||||||
bb, ok := <-resultsCh
|
bb, ok := <-resultsCh
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:134
|
|
||||||
if ok {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:135
|
//line app/vmselect/prometheus/export.qtpl:135
|
||||||
qw422016.N().Z(bb.B)
|
if ok {
|
||||||
//line app/vmselect/prometheus/export.qtpl:136
|
//line app/vmselect/prometheus/export.qtpl:136
|
||||||
|
qw422016.N().Z(bb.B)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:137
|
||||||
quicktemplate.ReleaseByteBuffer(bb)
|
quicktemplate.ReleaseByteBuffer(bb)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:137
|
|
||||||
for bb := range resultsCh {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:137
|
|
||||||
qw422016.N().S(`,`)
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:138
|
//line app/vmselect/prometheus/export.qtpl:138
|
||||||
qw422016.N().Z(bb.B)
|
for bb := range resultsCh {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:138
|
||||||
|
qw422016.N().S(`,`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:139
|
//line app/vmselect/prometheus/export.qtpl:139
|
||||||
|
qw422016.N().Z(bb.B)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:140
|
||||||
quicktemplate.ReleaseByteBuffer(bb)
|
quicktemplate.ReleaseByteBuffer(bb)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:140
|
//line app/vmselect/prometheus/export.qtpl:141
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:141
|
//line app/vmselect/prometheus/export.qtpl:142
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:141
|
//line app/vmselect/prometheus/export.qtpl:142
|
||||||
qw422016.N().S(`]}}`)
|
qw422016.N().S(`]}}`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
func WriteExportPromAPIResponse(qq422016 qtio422016.Writer, resultsCh <-chan *quicktemplate.ByteBuffer) {
|
func WriteExportPromAPIResponse(qq422016 qtio422016.Writer, resultsCh <-chan *quicktemplate.ByteBuffer) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
StreamExportPromAPIResponse(qw422016, resultsCh)
|
StreamExportPromAPIResponse(qw422016, resultsCh)
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
func ExportPromAPIResponse(resultsCh <-chan *quicktemplate.ByteBuffer) string {
|
func ExportPromAPIResponse(resultsCh <-chan *quicktemplate.ByteBuffer) string {
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
WriteExportPromAPIResponse(qb422016, resultsCh)
|
WriteExportPromAPIResponse(qb422016, resultsCh)
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
return qs422016
|
return qs422016
|
||||||
//line app/vmselect/prometheus/export.qtpl:145
|
//line app/vmselect/prometheus/export.qtpl:146
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:147
|
|
||||||
func StreamExportStdResponse(qw422016 *qt422016.Writer, resultsCh <-chan *quicktemplate.ByteBuffer) {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:148
|
//line app/vmselect/prometheus/export.qtpl:148
|
||||||
for bb := range resultsCh {
|
func StreamExportStdResponse(qw422016 *qt422016.Writer, resultsCh <-chan *quicktemplate.ByteBuffer) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:149
|
//line app/vmselect/prometheus/export.qtpl:149
|
||||||
qw422016.N().Z(bb.B)
|
for bb := range resultsCh {
|
||||||
//line app/vmselect/prometheus/export.qtpl:150
|
//line app/vmselect/prometheus/export.qtpl:150
|
||||||
|
qw422016.N().Z(bb.B)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:151
|
||||||
quicktemplate.ReleaseByteBuffer(bb)
|
quicktemplate.ReleaseByteBuffer(bb)
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:151
|
//line app/vmselect/prometheus/export.qtpl:152
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
func WriteExportStdResponse(qq422016 qtio422016.Writer, resultsCh <-chan *quicktemplate.ByteBuffer) {
|
func WriteExportStdResponse(qq422016 qtio422016.Writer, resultsCh <-chan *quicktemplate.ByteBuffer) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
StreamExportStdResponse(qw422016, resultsCh)
|
StreamExportStdResponse(qw422016, resultsCh)
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
func ExportStdResponse(resultsCh <-chan *quicktemplate.ByteBuffer) string {
|
func ExportStdResponse(resultsCh <-chan *quicktemplate.ByteBuffer) string {
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
WriteExportStdResponse(qb422016, resultsCh)
|
WriteExportStdResponse(qb422016, resultsCh)
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
return qs422016
|
return qs422016
|
||||||
//line app/vmselect/prometheus/export.qtpl:152
|
//line app/vmselect/prometheus/export.qtpl:153
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:154
|
|
||||||
func streamprometheusMetricName(qw422016 *qt422016.Writer, mn *storage.MetricName) {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:155
|
//line app/vmselect/prometheus/export.qtpl:155
|
||||||
|
func streamprometheusMetricName(qw422016 *qt422016.Writer, mn *storage.MetricName) {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:156
|
||||||
qw422016.N().Z(mn.MetricGroup)
|
qw422016.N().Z(mn.MetricGroup)
|
||||||
//line app/vmselect/prometheus/export.qtpl:156
|
//line app/vmselect/prometheus/export.qtpl:157
|
||||||
if len(mn.Tags) > 0 {
|
if len(mn.Tags) > 0 {
|
||||||
//line app/vmselect/prometheus/export.qtpl:156
|
//line app/vmselect/prometheus/export.qtpl:157
|
||||||
qw422016.N().S(`{`)
|
qw422016.N().S(`{`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:158
|
//line app/vmselect/prometheus/export.qtpl:159
|
||||||
tags := mn.Tags
|
tags := mn.Tags
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:159
|
|
||||||
qw422016.N().Z(tags[0].Key)
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:159
|
|
||||||
qw422016.N().S(`=`)
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:159
|
|
||||||
qw422016.N().QZ(tags[0].Value)
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:160
|
//line app/vmselect/prometheus/export.qtpl:160
|
||||||
|
qw422016.N().Z(tags[0].Key)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:160
|
||||||
|
qw422016.N().S(`=`)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:160
|
||||||
|
qw422016.N().QZ(tags[0].Value)
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:161
|
||||||
tags = tags[1:]
|
tags = tags[1:]
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:161
|
|
||||||
for i := range tags {
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:162
|
//line app/vmselect/prometheus/export.qtpl:162
|
||||||
|
for i := range tags {
|
||||||
|
//line app/vmselect/prometheus/export.qtpl:163
|
||||||
tag := &tags[i]
|
tag := &tags[i]
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:162
|
//line app/vmselect/prometheus/export.qtpl:163
|
||||||
qw422016.N().S(`,`)
|
qw422016.N().S(`,`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:163
|
//line app/vmselect/prometheus/export.qtpl:164
|
||||||
qw422016.N().Z(tag.Key)
|
qw422016.N().Z(tag.Key)
|
||||||
//line app/vmselect/prometheus/export.qtpl:163
|
//line app/vmselect/prometheus/export.qtpl:164
|
||||||
qw422016.N().S(`=`)
|
qw422016.N().S(`=`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:163
|
//line app/vmselect/prometheus/export.qtpl:164
|
||||||
qw422016.N().QZ(tag.Value)
|
qw422016.N().QZ(tag.Value)
|
||||||
//line app/vmselect/prometheus/export.qtpl:164
|
//line app/vmselect/prometheus/export.qtpl:165
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:164
|
//line app/vmselect/prometheus/export.qtpl:165
|
||||||
qw422016.N().S(`}`)
|
qw422016.N().S(`}`)
|
||||||
//line app/vmselect/prometheus/export.qtpl:166
|
//line app/vmselect/prometheus/export.qtpl:167
|
||||||
}
|
}
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
func writeprometheusMetricName(qq422016 qtio422016.Writer, mn *storage.MetricName) {
|
func writeprometheusMetricName(qq422016 qtio422016.Writer, mn *storage.MetricName) {
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
qw422016 := qt422016.AcquireWriter(qq422016)
|
qw422016 := qt422016.AcquireWriter(qq422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
streamprometheusMetricName(qw422016, mn)
|
streamprometheusMetricName(qw422016, mn)
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
qt422016.ReleaseWriter(qw422016)
|
qt422016.ReleaseWriter(qw422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
}
|
}
|
||||||
|
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
func prometheusMetricName(mn *storage.MetricName) string {
|
func prometheusMetricName(mn *storage.MetricName) string {
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
qb422016 := qt422016.AcquireByteBuffer()
|
qb422016 := qt422016.AcquireByteBuffer()
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
writeprometheusMetricName(qb422016, mn)
|
writeprometheusMetricName(qb422016, mn)
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
qs422016 := string(qb422016.B)
|
qs422016 := string(qb422016.B)
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
qt422016.ReleaseByteBuffer(qb422016)
|
qt422016.ReleaseByteBuffer(qb422016)
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
return qs422016
|
return qs422016
|
||||||
//line app/vmselect/prometheus/export.qtpl:167
|
//line app/vmselect/prometheus/export.qtpl:168
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ The following tip changes can be tested by building VictoriaMetrics components f
|
||||||
* FEATURE: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): add `drop_common_labels()` function, which drops common `label="name"` pairs from the passed time series. See [these docs](https://docs.victoriametrics.com/MetricsQL.html#drop_common_labels).
|
* FEATURE: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): add `drop_common_labels()` function, which drops common `label="name"` pairs from the passed time series. See [these docs](https://docs.victoriametrics.com/MetricsQL.html#drop_common_labels).
|
||||||
* FEATURE: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): add `tlast_change_over_time(m[d])` function, which returns the timestamp of the last change of `m` on the given lookbehind window `d`. See [these docs](https://docs.victoriametrics.com/MetricsQL.html#tlast_change_over_time).
|
* FEATURE: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): add `tlast_change_over_time(m[d])` function, which returns the timestamp of the last change of `m` on the given lookbehind window `d`. See [these docs](https://docs.victoriametrics.com/MetricsQL.html#tlast_change_over_time).
|
||||||
|
|
||||||
|
* BUGFIX: export staleness markers as `null` values from [JSON export API](https://docs.victoriametrics.com/#how-to-export-data-in-json-line-format). Previously they were exported as `NaN` values. This could break the exported JSON parsing, since `NaN` values aren't supported by [JSON specification](https://www.json.org/).
|
||||||
* BUGFIX: [vmctl](https://docs.victoriametrics.com/vmctl.html): return non-zero exit code on error. This allows handling `vmctl` errors in shell scripts. Previously `vmctl` was returning 0 exit code on error. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2322).
|
* BUGFIX: [vmctl](https://docs.victoriametrics.com/vmctl.html): return non-zero exit code on error. This allows handling `vmctl` errors in shell scripts. Previously `vmctl` was returning 0 exit code on error. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/2322).
|
||||||
* BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): properly show `scrape_timeout` and `scrape_interval` options at `http://vmagent:8429/config` page. Previously these options weren't displayed even if they were set in `-promscrape.config`.
|
* BUGFIX: [vmagent](https://docs.victoriametrics.com/vmagent.html): properly show `scrape_timeout` and `scrape_interval` options at `http://vmagent:8429/config` page. Previously these options weren't displayed even if they were set in `-promscrape.config`.
|
||||||
* BUGFIX: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): properly handle joins on time series filtered by values. For example, `kube_pod_container_resource_requests{resource="cpu"} * on (namespace,pod) group_left() (kube_pod_status_phase{phase=~"Pending|Running"}==1)`. This query could result in `duplicate time series on the right side` error even if `==1` filter leaves only a single time series per `(namespace,pod)` labels. Now such query is properly executed.
|
* BUGFIX: [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html): properly handle joins on time series filtered by values. For example, `kube_pod_container_resource_requests{resource="cpu"} * on (namespace,pod) group_left() (kube_pod_status_phase{phase=~"Pending|Running"}==1)`. This query could result in `duplicate time series on the right side` error even if `==1` filter leaves only a single time series per `(namespace,pod)` labels. Now such query is properly executed.
|
||||||
|
|
Loading…
Reference in a new issue