From 38e644ff12bb5880d28e6ee0f6d62c560e092fc5 Mon Sep 17 00:00:00 2001 From: Daniel Nelson Date: Fri, 12 Oct 2018 14:37:30 -0700 Subject: [PATCH] Support uint fields in aerospike input (#4851) --- plugins/inputs/aerospike/aerospike.go | 32 ++++++++-------------- plugins/inputs/aerospike/aerospike_test.go | 15 ++++------ 2 files changed, 17 insertions(+), 30 deletions(-) diff --git a/plugins/inputs/aerospike/aerospike.go b/plugins/inputs/aerospike/aerospike.go index 3caee7e7d..d4c4fce85 100644 --- a/plugins/inputs/aerospike/aerospike.go +++ b/plugins/inputs/aerospike/aerospike.go @@ -2,8 +2,6 @@ package aerospike import ( "crypto/tls" - "errors" - "log" "net" "strconv" "strings" @@ -120,12 +118,8 @@ func (a *Aerospike) gatherServer(hostport string, acc telegraf.Accumulator) erro return err } for k, v := range stats { - val, err := parseValue(v) - if err == nil { - fields[strings.Replace(k, "-", "_", -1)] = val - } else { - log.Printf("I! skipping aerospike field %v with int64 overflow: %q", k, v) - } + val := parseValue(v) + fields[strings.Replace(k, "-", "_", -1)] = val } acc.AddFields("aerospike_node", fields, tags, time.Now()) @@ -152,12 +146,8 @@ func (a *Aerospike) gatherServer(hostport string, acc telegraf.Accumulator) erro if len(parts) < 2 { continue } - val, err := parseValue(parts[1]) - if err == nil { - nFields[strings.Replace(parts[0], "-", "_", -1)] = val - } else { - log.Printf("I! skipping aerospike field %v with int64 overflow: %q", parts[0], parts[1]) - } + val := parseValue(parts[1]) + nFields[strings.Replace(parts[0], "-", "_", -1)] = val } acc.AddFields("aerospike_namespace", nFields, nTags, time.Now()) } @@ -165,16 +155,16 @@ func (a *Aerospike) gatherServer(hostport string, acc telegraf.Accumulator) erro return nil } -func parseValue(v string) (interface{}, error) { +func parseValue(v string) interface{} { if parsed, err := strconv.ParseInt(v, 10, 64); err == nil { - return parsed, nil - } else if _, err := strconv.ParseUint(v, 10, 64); err == nil { - // int64 overflow, yet valid uint64 - return nil, errors.New("Number is too large") + return parsed + } else if parsed, err := strconv.ParseUint(v, 10, 64); err == nil { + return parsed } else if parsed, err := strconv.ParseBool(v); err == nil { - return parsed, nil + return parsed } else { - return v, nil + // leave as string + return v } } diff --git a/plugins/inputs/aerospike/aerospike_test.go b/plugins/inputs/aerospike/aerospike_test.go index 078e148f5..724102195 100644 --- a/plugins/inputs/aerospike/aerospike_test.go +++ b/plugins/inputs/aerospike/aerospike_test.go @@ -52,17 +52,14 @@ func TestAerospikeStatisticsPartialErr(t *testing.T) { func TestAerospikeParseValue(t *testing.T) { // uint64 with value bigger than int64 max - val, err := parseValue("18446744041841121751") - assert.Nil(t, val) - assert.Error(t, err) + val := parseValue("18446744041841121751") + require.Equal(t, uint64(18446744041841121751), val) // int values - val, err = parseValue("42") - assert.NoError(t, err) - assert.Equal(t, val, int64(42), "must be parsed as int") + val = parseValue("42") + require.Equal(t, val, int64(42), "must be parsed as int") // string values - val, err = parseValue("BB977942A2CA502") - assert.NoError(t, err) - assert.Equal(t, val, `BB977942A2CA502`, "must be left as string") + val = parseValue("BB977942A2CA502") + require.Equal(t, val, `BB977942A2CA502`, "must be left as string") }