From a13d19c58255be6e296a7fb01b7bd836985808cb Mon Sep 17 00:00:00 2001
From: "Dragostin Yanev (netixen)" <dyanev+github@netixen.com>
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 68dfb8dc..e8fd5d8f 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 5095f3bd..037f730b 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 52fd8039..cb235f90 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 {
-- 
GitLab