diff --git a/plugins/inputs/tail/tail_test.go b/plugins/inputs/tail/tail_test.go index 88d63f723..3b12ae080 100644 --- a/plugins/inputs/tail/tail_test.go +++ b/plugins/inputs/tail/tail_test.go @@ -211,8 +211,7 @@ cpu,42 "path": tmpfile.Name(), }, map[string]interface{}{ - "time_idle": 42, - "measurement": "cpu", + "time_idle": 42, }, time.Unix(0, 0)), testutil.MustMetric("cpu", @@ -220,8 +219,7 @@ cpu,42 "path": tmpfile.Name(), }, map[string]interface{}{ - "time_idle": 42, - "measurement": "cpu", + "time_idle": 42, }, time.Unix(0, 0)), } diff --git a/plugins/parsers/csv/README.md b/plugins/parsers/csv/README.md index 9ca34d288..2189c8ce7 100644 --- a/plugins/parsers/csv/README.md +++ b/plugins/parsers/csv/README.md @@ -56,11 +56,13 @@ values. ## will be added as fields. csv_tag_columns = [] - ## The column to extract the name of the metric from + ## The column to extract the name of the metric from. Will not be + ## included as field in metric. csv_measurement_column = "" ## The column to extract time information for the metric - ## `csv_timestamp_format` must be specified if this is used + ## `csv_timestamp_format` must be specified if this is used. + ## Will not be included as field in metric. csv_timestamp_column = "" ## The format of time data extracted from `csv_timestamp_column` diff --git a/plugins/parsers/csv/parser.go b/plugins/parsers/csv/parser.go index 848a51699..7f8076917 100644 --- a/plugins/parsers/csv/parser.go +++ b/plugins/parsers/csv/parser.go @@ -216,6 +216,10 @@ outer: return nil, err } + // Exclude `TimestampColumn` and `MeasurementColumn` + delete(recordFields, p.TimestampColumn) + delete(recordFields, p.MeasurementColumn) + m, err := metric.New(measurementName, tags, recordFields, metricTime) if err != nil { return nil, err diff --git a/plugins/parsers/csv/parser_test.go b/plugins/parsers/csv/parser_test.go index e39a5df70..c0ef5f1cb 100644 --- a/plugins/parsers/csv/parser_test.go +++ b/plugins/parsers/csv/parser_test.go @@ -281,10 +281,10 @@ hello,80,test_name2` expectedFields := map[string]interface{}{ "line2": int64(80), - "line3": "test_name2", } metrics, err := p.Parse([]byte(testCSV)) require.NoError(t, err) + require.Equal(t, "test_name2", metrics[0].Name()) require.Equal(t, expectedFields, metrics[0].Fields()) } @@ -364,7 +364,64 @@ func TestTimestampUnixFloatPrecision(t *testing.T) { map[string]string{}, map[string]interface{}{ "value": 42, - "time": 1551129661.954561233, + }, + time.Unix(1551129661, 954561233), + ), + } + + metrics, err := p.Parse([]byte(data)) + require.NoError(t, err) + testutil.RequireMetricsEqual(t, expected, metrics) +} + +func TestSkipMeasurementColumn(t *testing.T) { + p := Parser{ + MetricName: "csv", + HeaderRowCount: 1, + TimestampColumn: "timestamp", + TimestampFormat: "unix", + TimeFunc: DefaultTime, + TrimSpace: true, + } + data := `id,value,timestamp + 1,5,1551129661.954561233` + + expected := []telegraf.Metric{ + testutil.MustMetric( + "csv", + map[string]string{}, + map[string]interface{}{ + "id": 1, + "value": 5, + }, + time.Unix(1551129661, 954561233), + ), + } + + metrics, err := p.Parse([]byte(data)) + require.NoError(t, err) + testutil.RequireMetricsEqual(t, expected, metrics) +} + +func TestSkipTimestampColumn(t *testing.T) { + p := Parser{ + MetricName: "csv", + HeaderRowCount: 1, + TimestampColumn: "timestamp", + TimestampFormat: "unix", + TimeFunc: DefaultTime, + TrimSpace: true, + } + data := `id,value,timestamp + 1,5,1551129661.954561233` + + expected := []telegraf.Metric{ + testutil.MustMetric( + "csv", + map[string]string{}, + map[string]interface{}{ + "id": 1, + "value": 5, }, time.Unix(1551129661, 954561233), ),