diff --git a/cmd/ingestor/main.go b/cmd/ingestor/main.go index 64204a6c..8e4c3164 100644 --- a/cmd/ingestor/main.go +++ b/cmd/ingestor/main.go @@ -14,6 +14,7 @@ import ( "os" "os/signal" "path/filepath" + "strconv" "strings" "syscall" "time" @@ -483,6 +484,13 @@ func toFloat64(v interface{}) (float64, bool) { case json.Number: f, err := n.Float64() return f, err == nil + case string: + f, err := strconv.ParseFloat(strings.TrimSpace(n), 64) + return f, err == nil + case uint: + return float64(n), true + case uint64: + return float64(n), true default: return 0, false } diff --git a/cmd/ingestor/main_test.go b/cmd/ingestor/main_test.go index 08b07efc..6454db59 100644 --- a/cmd/ingestor/main_test.go +++ b/cmd/ingestor/main_test.go @@ -22,7 +22,13 @@ func TestToFloat64(t *testing.T) { {"int64", int64(100), 100.0, true}, {"json.Number valid", json.Number("9.5"), 9.5, true}, {"json.Number invalid", json.Number("not_a_number"), 0, false}, - {"string unsupported", "hello", 0, false}, + {"string valid", "3.14", 3.14, true}, + {"string with spaces", " -7.5 ", -7.5, true}, + {"string integer", "42", 42.0, true}, + {"string invalid", "hello", 0, false}, + {"string empty", "", 0, false}, + {"uint", uint(10), 10.0, true}, + {"uint64", uint64(999), 999.0, true}, {"bool unsupported", true, 0, false}, {"nil unsupported", nil, 0, false}, {"slice unsupported", []int{1}, 0, false},