From da99777f6ff61d412a7645b868f8e84050319378 Mon Sep 17 00:00:00 2001
From: Daniel Nelson <danielnelson@users.noreply.github.com>
Date: Fri, 12 May 2017 15:34:05 -0700
Subject: [PATCH] Only split metrics if there is an udp output (#2799)

---
 plugins/outputs/influxdb/influxdb.go | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/plugins/outputs/influxdb/influxdb.go b/plugins/outputs/influxdb/influxdb.go
index d127d3fb..e44af7a7 100644
--- a/plugins/outputs/influxdb/influxdb.go
+++ b/plugins/outputs/influxdb/influxdb.go
@@ -2,6 +2,7 @@ package influxdb
 
 import (
 	"fmt"
+	"io"
 	"log"
 	"math/rand"
 	"strings"
@@ -41,7 +42,8 @@ type InfluxDB struct {
 	// Precision is only here for legacy support. It will be ignored.
 	Precision string
 
-	clients []client.Client
+	clients      []client.Client
+	splitPayload bool
 }
 
 var sampleConfig = `
@@ -109,6 +111,7 @@ func (i *InfluxDB) Connect() error {
 				return fmt.Errorf("Error creating UDP Client [%s]: %s", u, err)
 			}
 			i.clients = append(i.clients, c)
+			i.splitPayload = true
 		default:
 			// If URL doesn't start with "udp", assume HTTP client
 			config := client.HTTPConfig{
@@ -159,17 +162,26 @@ func (i *InfluxDB) Description() string {
 	return "Configuration for influxdb server to send metrics to"
 }
 
+func (i *InfluxDB) getReader(metrics []telegraf.Metric) io.Reader {
+	if !i.splitPayload {
+		return metric.NewReader(metrics)
+	}
+
+	splitData := make([]telegraf.Metric, 0)
+	for _, m := range metrics {
+		splitData = append(splitData, m.Split(i.UDPPayload)...)
+	}
+	return metric.NewReader(splitData)
+}
+
 // Write will 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 {
 	bufsize := 0
-	splitData := make([]telegraf.Metric, 0)
-
 	for _, m := range metrics {
 		bufsize += m.Len()
-		splitData = append(splitData, m.Split(i.UDPPayload)...)
 	}
-	r := metric.NewReader(splitData)
+	r := i.getReader(metrics)
 
 	// This will get set to nil if a successful write occurs
 	err := fmt.Errorf("Could not write to any InfluxDB server in cluster")
-- 
GitLab