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 <dgrisonn@redhat.com>
This commit is contained in:
parent
49f775d8a0
commit
96b9d8cebb
|
@ -340,7 +340,7 @@ func (p *PromParser) Next() (Entry, error) {
|
||||||
t2 = p.nextToken()
|
t2 = p.nextToken()
|
||||||
}
|
}
|
||||||
if t2 != tValue {
|
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 {
|
if p.val, err = parseFloat(yoloString(p.l.buf())); err != nil {
|
||||||
return EntryInvalid, err
|
return EntryInvalid, err
|
||||||
|
@ -350,7 +350,7 @@ func (p *PromParser) Next() (Entry, error) {
|
||||||
p.val = math.Float64frombits(value.NormalNaN)
|
p.val = math.Float64frombits(value.NormalNaN)
|
||||||
}
|
}
|
||||||
p.hasTS = false
|
p.hasTS = false
|
||||||
switch p.nextToken() {
|
switch t := p.nextToken(); t {
|
||||||
case tLinebreak:
|
case tLinebreak:
|
||||||
break
|
break
|
||||||
case tTimestamp:
|
case tTimestamp:
|
||||||
|
@ -359,7 +359,7 @@ func (p *PromParser) Next() (Entry, error) {
|
||||||
return EntryInvalid, err
|
return EntryInvalid, err
|
||||||
}
|
}
|
||||||
if t2 := p.nextToken(); t2 != tLinebreak {
|
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:
|
default:
|
||||||
return EntryInvalid, parseError("expected timestamp or new record", t)
|
return EntryInvalid, parseError("expected timestamp or new record", t)
|
||||||
|
|
|
@ -219,7 +219,7 @@ func TestPromParseErrors(t *testing.T) {
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
input: "a",
|
input: "a",
|
||||||
err: "expected value after metric, got \"MNAME\"",
|
err: "expected value after metric, got \"INVALID\"",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "a{b='c'} 1\n",
|
input: "a{b='c'} 1\n",
|
||||||
|
@ -263,7 +263,7 @@ func TestPromParseErrors(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "foo 0 1_2\n",
|
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`,
|
input: `{a="ok"} 1`,
|
||||||
|
@ -325,7 +325,11 @@ func TestPromNullByteHandling(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "a\x00{b=\"ddd\"} 1",
|
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\"",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue