diff --git a/CHANGELOG.md b/CHANGELOG.md index 078e600f5acc0..b944c6ac3b841 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## v0.3.0 [unreleased] +## v0.10.0 [unreleased] ### Release Notes - Linux packages have been taken out of `opt`, the binary is now in `/usr/bin` @@ -23,7 +23,7 @@ aggregated). ### Packaging change note: -RHEL/CentOS users upgrading from 0.2 to 0.3 will probably have their +RHEL/CentOS users upgrading from 0.2.x to 0.10.0 will probably have their configurations overwritten by the upgrade. There is a backup stored at /etc/telegraf/telegraf.conf.$(date +%s).backup. diff --git a/README.md b/README.md index e86750f184bb2..c405806f716e0 100644 --- a/README.md +++ b/README.md @@ -17,17 +17,17 @@ new plugins. ## Installation: -NOTE: Telegraf 0.3.x is **not** backwards-compatible with previous versions of +NOTE: Telegraf 0.10.x is **not** backwards-compatible with previous versions of telegraf, both in the database layout and the configuration file. 0.2.x will continue to be supported, see below for download links. -TODO: link to blog post about 0.3.x changes. +TODO: link to blog post about 0.10.x changes. ### Linux deb and rpm packages: Latest: -* http://get.influxdb.org/telegraf/telegraf_0.3.0_amd64.deb -* http://get.influxdb.org/telegraf/telegraf-0.3.0-1.x86_64.rpm +* http://get.influxdb.org/telegraf/telegraf_0.10.0_amd64.deb +* http://get.influxdb.org/telegraf/telegraf-0.10.0-1.x86_64.rpm 0.2.x: * http://get.influxdb.org/telegraf/telegraf_0.2.4_amd64.deb @@ -45,9 +45,9 @@ controlled via `systemctl [action] telegraf` ### Linux binaries: Latest: -* http://get.influxdb.org/telegraf/telegraf_linux_amd64_0.3.0.tar.gz -* http://get.influxdb.org/telegraf/telegraf_linux_386_0.3.0.tar.gz -* http://get.influxdb.org/telegraf/telegraf_linux_arm_0.3.0.tar.gz +* http://get.influxdb.org/telegraf/telegraf_linux_amd64_0.10.0.tar.gz +* http://get.influxdb.org/telegraf/telegraf_linux_386_0.10.0.tar.gz +* http://get.influxdb.org/telegraf/telegraf_linux_arm_0.10.0.tar.gz 0.2.x: * http://get.influxdb.org/telegraf/telegraf_linux_amd64_0.2.4.tar.gz diff --git a/plugins/inputs/httpjson/httpjson.go b/plugins/inputs/httpjson/httpjson.go index e31085e3ab4f8..5763fd6fab9b0 100644 --- a/plugins/inputs/httpjson/httpjson.go +++ b/plugins/inputs/httpjson/httpjson.go @@ -9,6 +9,7 @@ import ( "net/url" "strings" "sync" + "time" "github.com/influxdb/telegraf/internal" "github.com/influxdb/telegraf/plugins/inputs" @@ -119,7 +120,8 @@ func (h *HttpJson) gatherServer( acc inputs.Accumulator, serverURL string, ) error { - resp, err := h.sendRequest(serverURL) + resp, responseTime, err := h.sendRequest(serverURL) + if err != nil { return err } @@ -141,6 +143,9 @@ func (h *HttpJson) gatherServer( delete(jsonOut, tag) } + if responseTime >= 0 { + jsonOut["response_time"] = responseTime + } f := internal.JSONFlattener{} err = f.FlattenJSON("", jsonOut) if err != nil { @@ -164,11 +169,11 @@ func (h *HttpJson) gatherServer( // Returns: // string: body of the response // error : Any error that may have occurred -func (h *HttpJson) sendRequest(serverURL string) (string, error) { +func (h *HttpJson) sendRequest(serverURL string) (string, float64, error) { // Prepare URL requestURL, err := url.Parse(serverURL) if err != nil { - return "", fmt.Errorf("Invalid server URL \"%s\"", serverURL) + return "", -1, fmt.Errorf("Invalid server URL \"%s\"", serverURL) } params := url.Values{} @@ -180,19 +185,21 @@ func (h *HttpJson) sendRequest(serverURL string) (string, error) { // Create + send request req, err := http.NewRequest(h.Method, requestURL.String(), nil) if err != nil { - return "", err + return "", -1, err } + start := time.Now() resp, err := h.client.MakeRequest(req) if err != nil { - return "", err + return "", -1, err } - defer resp.Body.Close() defer resp.Body.Close() + responseTime := time.Since(start).Seconds() + body, err := ioutil.ReadAll(resp.Body) if err != nil { - return string(body), err + return string(body), responseTime, err } // Process response @@ -203,10 +210,10 @@ func (h *HttpJson) sendRequest(serverURL string) (string, error) { http.StatusText(resp.StatusCode), http.StatusOK, http.StatusText(http.StatusOK)) - return string(body), err + return string(body), responseTime, err } - return string(body), err + return string(body), responseTime, err } func init() { diff --git a/plugins/inputs/httpjson/httpjson_test.go b/plugins/inputs/httpjson/httpjson_test.go index 7e9ffd3312452..c9446621d35d7 100644 --- a/plugins/inputs/httpjson/httpjson_test.go +++ b/plugins/inputs/httpjson/httpjson_test.go @@ -14,7 +14,7 @@ import ( const validJSON = ` { "parent": { - "child": 3, + "child": 3.0, "ignored_child": "hi" }, "ignored_null": null, @@ -123,10 +123,16 @@ func TestHttpJson200(t *testing.T) { var acc testutil.Accumulator err := service.Gather(&acc) require.NoError(t, err) - assert.Equal(t, 4, acc.NFields()) + assert.Equal(t, 6, acc.NFields()) + // Set responsetime + for _, p := range acc.Points { + p.Fields["response_time"] = 1.0 + } + for _, srv := range service.Servers { tags := map[string]string{"server": srv} mname := "httpjson_" + service.Name + expectedFields["response_time"] = 1.0 acc.AssertContainsTaggedFields(t, mname, expectedFields, tags) } } @@ -185,11 +191,15 @@ func TestHttpJson200Tags(t *testing.T) { if service.Name == "other_webapp" { var acc testutil.Accumulator err := service.Gather(&acc) + // Set responsetime + for _, p := range acc.Points { + p.Fields["response_time"] = 1.0 + } require.NoError(t, err) - assert.Equal(t, 2, acc.NFields()) + assert.Equal(t, 4, acc.NFields()) for _, srv := range service.Servers { tags := map[string]string{"server": srv, "role": "master", "build": "123"} - fields := map[string]interface{}{"value": float64(15)} + fields := map[string]interface{}{"value": float64(15), "response_time": float64(1)} mname := "httpjson_" + service.Name acc.AssertContainsTaggedFields(t, mname, fields, tags) }