From 96b9d8cebb70b8570b5c01e6faaa2f86177f2de1 Mon Sep 17 00:00:00 2001 From: Damien Grisonnet Date: Wed, 7 Dec 2022 10:46:14 +0100 Subject: [PATCH] model/textparse: associate correct token to errors In some cases, the Prometheus HTTP format parser was not returning the right token in the error output which made debugging impossible. Signed-off-by: Damien Grisonnet --- model/textparse/promparse.go | 6 +++--- model/textparse/promparse_test.go | 10 +++++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/model/textparse/promparse.go b/model/textparse/promparse.go index d503ff9a7..b137e5305 100644 --- a/model/textparse/promparse.go +++ b/model/textparse/promparse.go @@ -340,7 +340,7 @@ func (p *PromParser) Next() (Entry, error) { t2 = p.nextToken() } if t2 != tValue { - return EntryInvalid, parseError("expected value after metric", t) + return EntryInvalid, parseError("expected value after metric", t2) } if p.val, err = parseFloat(yoloString(p.l.buf())); err != nil { return EntryInvalid, err @@ -350,7 +350,7 @@ func (p *PromParser) Next() (Entry, error) { p.val = math.Float64frombits(value.NormalNaN) } p.hasTS = false - switch p.nextToken() { + switch t := p.nextToken(); t { case tLinebreak: break case tTimestamp: @@ -359,7 +359,7 @@ func (p *PromParser) Next() (Entry, error) { return EntryInvalid, err } if t2 := p.nextToken(); t2 != tLinebreak { - return EntryInvalid, parseError("expected next entry after timestamp", t) + return EntryInvalid, parseError("expected next entry after timestamp", t2) } default: return EntryInvalid, parseError("expected timestamp or new record", t) diff --git a/model/textparse/promparse_test.go b/model/textparse/promparse_test.go index dadad3449..6788b3c2e 100644 --- a/model/textparse/promparse_test.go +++ b/model/textparse/promparse_test.go @@ -219,7 +219,7 @@ func TestPromParseErrors(t *testing.T) { }{ { input: "a", - err: "expected value after metric, got \"MNAME\"", + err: "expected value after metric, got \"INVALID\"", }, { input: "a{b='c'} 1\n", @@ -263,7 +263,7 @@ func TestPromParseErrors(t *testing.T) { }, { input: "foo 0 1_2\n", - err: "expected next entry after timestamp, got \"MNAME\"", + err: "expected next entry after timestamp, got \"INVALID\"", }, { input: `{a="ok"} 1`, @@ -325,7 +325,11 @@ func TestPromNullByteHandling(t *testing.T) { }, { input: "a\x00{b=\"ddd\"} 1", - err: "expected value after metric, got \"MNAME\"", + err: "expected value after metric, got \"INVALID\"", + }, + { + input: "a 0 1\x00", + err: "expected next entry after timestamp, got \"INVALID\"", }, }