From 254fa641d181a58fab2c58d85d62a896c82e826d Mon Sep 17 00:00:00 2001 From: Cameron Sparr Date: Fri, 16 Sep 2016 16:15:10 +0100 Subject: [PATCH] Add configurable timeout to influxdb input closes #1773 --- CHANGELOG.md | 12 +++++++++++ plugins/inputs/influxdb/influxdb.go | 33 +++++++++++++++++++---------- 2 files changed, 34 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f51f3f2ca..d63f0a591 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,18 @@ - [#1628](https://github.com/influxdata/telegraf/issues/1628): Fix mongodb input panic on version 2.2. - [#1738](https://github.com/influxdata/telegraf/issues/1738): Fix unmarshal of influxdb metrics with null tags +- [#1733](https://github.com/influxdata/telegraf/issues/1733): Fix statsd scientific notation parsing +- [#1716](https://github.com/influxdata/telegraf/issues/1716): Sensors plugin strconv.ParseFloat: parsing "": invalid syntax +- [#1530](https://github.com/influxdata/telegraf/issues/1530): Fix prometheus_client reload panic +- [#1764](https://github.com/influxdata/telegraf/issues/1764): Fix kafka consumer panic when nil error is returned down errs channel. + +## v1.0.1 [unreleased] + +### Bugfixes + +- [#1775](https://github.com/influxdata/telegraf/issues/1775): Prometheus output: Fix bug with multi-batch writes. +- [#1738](https://github.com/influxdata/telegraf/issues/1738): Fix unmarshal of influxdb metrics with null tags. +- [#1773](https://github.com/influxdata/telegraf/issues/1773): Add configurable timeout to influxdb input plugin. ## v1.0 [2016-09-08] diff --git a/plugins/inputs/influxdb/influxdb.go b/plugins/inputs/influxdb/influxdb.go index 92da50d3e..4c3d46ad6 100644 --- a/plugins/inputs/influxdb/influxdb.go +++ b/plugins/inputs/influxdb/influxdb.go @@ -10,11 +10,16 @@ import ( "time" "github.com/influxdata/telegraf" + "github.com/influxdata/telegraf/internal" "github.com/influxdata/telegraf/plugins/inputs" ) type InfluxDB struct { URLs []string `toml:"urls"` + + Timeout internal.Duration + + client *http.Client } func (*InfluxDB) Description() string { @@ -32,6 +37,9 @@ func (*InfluxDB) SampleConfig() string { urls = [ "http://localhost:8086/debug/vars" ] + + ## http request & header timeout + timeout = "5s" ` } @@ -39,6 +47,16 @@ func (i *InfluxDB) Gather(acc telegraf.Accumulator) error { if len(i.URLs) == 0 { i.URLs = []string{"http://localhost:8086/debug/vars"} } + + if i.client == nil { + i.client = &http.Client{ + Transport: &http.Transport{ + ResponseHeaderTimeout: i.Timeout.Duration, + }, + Timeout: i.Timeout.Duration, + } + } + errorChannel := make(chan error, len(i.URLs)) var wg sync.WaitGroup @@ -104,15 +122,6 @@ type memstats struct { GCCPUFraction float64 `json:"GCCPUFraction"` } -var tr = &http.Transport{ - ResponseHeaderTimeout: time.Duration(3 * time.Second), -} - -var client = &http.Client{ - Transport: tr, - Timeout: time.Duration(4 * time.Second), -} - // Gathers data from a particular URL // Parameters: // acc : The telegraf Accumulator to use @@ -127,7 +136,7 @@ func (i *InfluxDB) gatherURL( shardCounter := 0 now := time.Now() - resp, err := client.Get(url) + resp, err := i.client.Get(url) if err != nil { return err } @@ -248,6 +257,8 @@ func (i *InfluxDB) gatherURL( func init() { inputs.Add("influxdb", func() telegraf.Input { - return &InfluxDB{} + return &InfluxDB{ + Timeout: internal.Duration(time.Second * 5), + } }) }