From 56d04910efad301682c94c6cfc40ed028307121b Mon Sep 17 00:00:00 2001 From: Dimitri Saingre Date: Mon, 11 Mar 2019 16:37:19 +0100 Subject: [PATCH 1/2] add string hexa to integer converter + test --- plugins/processors/converter/converter.go | 20 +++++++++++++++---- .../processors/converter/converter_test.go | 4 +++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/plugins/processors/converter/converter.go b/plugins/processors/converter/converter.go index 3c9b74f3fe165..c4b69a4d2bdb2 100644 --- a/plugins/processors/converter/converter.go +++ b/plugins/processors/converter/converter.go @@ -5,6 +5,7 @@ import ( "log" "math" "strconv" + "strings" "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/filter" @@ -345,11 +346,22 @@ func toInteger(v interface{}) (int64, bool) { return 0, true } case string: - result, err := strconv.ParseFloat(value, 64) - if err != nil { - return 0, false + if strings.HasPrefix(value, "0x") { + result, err := strconv.ParseInt(value, 0, 64) + + if err != nil { + return 0, false + } + return result, true + + } else { + result, err := strconv.ParseFloat(value, 64) + + if err != nil { + return 0, false + } + return toInteger(result) } - return toInteger(result) } return 0, false } diff --git a/plugins/processors/converter/converter_test.go b/plugins/processors/converter/converter_test.go index 1b00cedf93935..f6a621413f5e4 100644 --- a/plugins/processors/converter/converter_test.go +++ b/plugins/processors/converter/converter_test.go @@ -129,7 +129,7 @@ func TestConverter(t *testing.T) { converter: &Converter{ Fields: &Conversion{ String: []string{"a"}, - Integer: []string{"b", "b1", "b2"}, + Integer: []string{"b", "b1", "b2", "b3"}, Unsigned: []string{"c", "c1", "c2"}, Boolean: []string{"d"}, Float: []string{"e"}, @@ -145,6 +145,7 @@ func TestConverter(t *testing.T) { "b": "42", "b1": "42.2", "b2": "42.5", + "b3": "0x2A", "c": "42", "c1": "42.2", "c2": "42.5", @@ -166,6 +167,7 @@ func TestConverter(t *testing.T) { "b": int64(42), "b1": int64(42), "b2": int64(43), + "b3": int64(42), "c": uint64(42), "c1": uint64(42), "c2": uint64(43), From 86b85c49cc36c3fb7d4649999d077956e858f936 Mon Sep 17 00:00:00 2001 From: Dimitri Saingre Date: Mon, 11 Mar 2019 21:30:03 +0100 Subject: [PATCH 2/2] refactoring + add string hexa to uint conversion --- plugins/processors/converter/converter.go | 24 +++++++++---------- .../processors/converter/converter_test.go | 4 +++- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/plugins/processors/converter/converter.go b/plugins/processors/converter/converter.go index c4b69a4d2bdb2..db240abf4d742 100644 --- a/plugins/processors/converter/converter.go +++ b/plugins/processors/converter/converter.go @@ -5,7 +5,6 @@ import ( "log" "math" "strconv" - "strings" "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/filter" @@ -346,22 +345,16 @@ func toInteger(v interface{}) (int64, bool) { return 0, true } case string: - if strings.HasPrefix(value, "0x") { - result, err := strconv.ParseInt(value, 0, 64) + result, err := strconv.ParseInt(value, 0, 64) - if err != nil { - return 0, false - } - return result, true - - } else { + if err != nil { result, err := strconv.ParseFloat(value, 64) - if err != nil { return 0, false } return toInteger(result) } + return result, true } return 0, false } @@ -391,11 +384,16 @@ func toUnsigned(v interface{}) (uint64, bool) { return 0, true } case string: - result, err := strconv.ParseFloat(value, 64) + result, err := strconv.ParseUint(value, 0, 64) + if err != nil { - return 0, false + result, err := strconv.ParseFloat(value, 64) + if err != nil { + return 0, false + } + return toUnsigned(result) } - return toUnsigned(result) + return result, true } return 0, false } diff --git a/plugins/processors/converter/converter_test.go b/plugins/processors/converter/converter_test.go index f6a621413f5e4..1d60a40fb2ab4 100644 --- a/plugins/processors/converter/converter_test.go +++ b/plugins/processors/converter/converter_test.go @@ -130,7 +130,7 @@ func TestConverter(t *testing.T) { Fields: &Conversion{ String: []string{"a"}, Integer: []string{"b", "b1", "b2", "b3"}, - Unsigned: []string{"c", "c1", "c2"}, + Unsigned: []string{"c", "c1", "c2", "c3"}, Boolean: []string{"d"}, Float: []string{"e"}, Tag: []string{"f"}, @@ -149,6 +149,7 @@ func TestConverter(t *testing.T) { "c": "42", "c1": "42.2", "c2": "42.5", + "c3": "0x2A", "d": "true", "e": "42.0", "f": "foo", @@ -171,6 +172,7 @@ func TestConverter(t *testing.T) { "c": uint64(42), "c1": uint64(42), "c2": uint64(43), + "c3": uint64(42), "d": true, "e": 42.0, },