From a13d19c58255be6e296a7fb01b7bd836985808cb Mon Sep 17 00:00:00 2001 From: "Dragostin Yanev (netixen)" Date: Thu, 18 Feb 2016 21:21:20 +0200 Subject: [PATCH] pugins/outputs/influxdb: Prevent runtime panic. - Check and return error from NewBatchPoints to prevent runtime panic if user provides an unparsable precision time unit in config. - Provide correct sample config precision examples. - Update etc/telegraf.conf precision comment. closes #715 --- CHANGELOG.md | 1 + etc/telegraf.conf | 2 +- plugins/outputs/influxdb/influxdb.go | 9 ++++++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68dfb8dcc..e8fd5d8f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ and is in the `[agent]` config section. - [#662](https://github.com/influxdata/telegraf/pull/667): Change `[tags]` to `[global_tags]` to fix multiple-plugin tags bug. - [#642](https://github.com/influxdata/telegraf/issues/642): Riemann output plugin issues. - [#394](https://github.com/influxdata/telegraf/issues/394): Support HTTP POST. Thanks @gabelev! +- [#715](https://github.com/influxdata/telegraf/pull/715): Fix influxdb precision config panic. Thanks @netixen! ## v0.10.2 [2016-02-04] diff --git a/etc/telegraf.conf b/etc/telegraf.conf index 5095f3bdf..037f730bf 100644 --- a/etc/telegraf.conf +++ b/etc/telegraf.conf @@ -63,7 +63,7 @@ urls = ["http://localhost:8086"] # required # The target database for metrics (telegraf will create it if not exists) database = "telegraf" # required - # Precision of writes, valid values are n, u, ms, s, m, and h + # Precision of writes, valid values are "ns", "us" (or "µs"), "ms", "s", "m", "h". # note: using second precision greatly helps InfluxDB compression precision = "s" diff --git a/plugins/outputs/influxdb/influxdb.go b/plugins/outputs/influxdb/influxdb.go index 52fd8039b..cb235f903 100644 --- a/plugins/outputs/influxdb/influxdb.go +++ b/plugins/outputs/influxdb/influxdb.go @@ -48,7 +48,7 @@ var sampleConfig = ` urls = ["http://localhost:8086"] # required ### The target database for metrics (telegraf will create it if not exists) database = "telegraf" # required - ### Precision of writes, valid values are n, u, ms, s, m, and h + ### Precision of writes, valid values are "ns", "us" (or "µs"), "ms", "s", "m", "h". ### note: using "s" precision greatly improves InfluxDB compression precision = "s" @@ -156,17 +156,20 @@ func (i *InfluxDB) Description() string { // Choose a random server in the cluster to write to until a successful write // occurs, logging each unsuccessful. If all servers fail, return error. func (i *InfluxDB) Write(metrics []telegraf.Metric) error { - bp, _ := client.NewBatchPoints(client.BatchPointsConfig{ + bp, err := client.NewBatchPoints(client.BatchPointsConfig{ Database: i.Database, Precision: i.Precision, }) + if err != nil { + return err + } for _, metric := range metrics { bp.AddPoint(metric.Point()) } // This will get set to nil if a successful write occurs - err := errors.New("Could not write to any InfluxDB server in cluster") + err = errors.New("Could not write to any InfluxDB server in cluster") p := rand.Perm(len(i.conns)) for _, n := range p {