Use prefix base detection for ints in grok parser (#6434)
This commit is contained in:
parent
24d5a93e63
commit
f080b58834
|
@ -248,7 +248,7 @@ func (p *Parser) ParseLine(line string) (telegraf.Metric, error) {
|
||||||
case MEASUREMENT:
|
case MEASUREMENT:
|
||||||
p.Measurement = v
|
p.Measurement = v
|
||||||
case INT:
|
case INT:
|
||||||
iv, err := strconv.ParseInt(v, 10, 64)
|
iv, err := strconv.ParseInt(v, 0, 64)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("E! Error parsing %s to int: %s", v, err)
|
log.Printf("E! Error parsing %s to int: %s", v, err)
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -649,6 +649,31 @@ func TestParseErrors_WrongTimeLayout(t *testing.T) {
|
||||||
testutil.MustMetric("grok", map[string]string{}, map[string]interface{}{}, time.Unix(0, 0)))
|
testutil.MustMetric("grok", map[string]string{}, map[string]interface{}{}, time.Unix(0, 0)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParseInteger_Base16(t *testing.T) {
|
||||||
|
p := &Parser{
|
||||||
|
Patterns: []string{"%{TEST_LOG_C}"},
|
||||||
|
CustomPatterns: `
|
||||||
|
DURATION %{NUMBER}[nuµm]?s
|
||||||
|
BASE10OR16NUM (?:%{BASE10NUM}|%{BASE16NUM})
|
||||||
|
TEST_LOG_C %{NUMBER:myfloat} %{BASE10OR16NUM:response_code:int} %{IPORHOST:clientip} %{DURATION:rt}
|
||||||
|
`,
|
||||||
|
}
|
||||||
|
assert.NoError(t, p.Compile())
|
||||||
|
|
||||||
|
metricA, err := p.ParseLine(`1.25 0xc8 192.168.1.1 5.432µs`)
|
||||||
|
require.NotNil(t, metricA)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t,
|
||||||
|
map[string]interface{}{
|
||||||
|
"clientip": "192.168.1.1",
|
||||||
|
"response_code": int64(200),
|
||||||
|
"myfloat": "1.25",
|
||||||
|
"rt": "5.432µs",
|
||||||
|
},
|
||||||
|
metricA.Fields())
|
||||||
|
assert.Equal(t, map[string]string{}, metricA.Tags())
|
||||||
|
}
|
||||||
|
|
||||||
func TestTsModder(t *testing.T) {
|
func TestTsModder(t *testing.T) {
|
||||||
tsm := &tsModder{}
|
tsm := &tsModder{}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue