diff --git a/plugins/inputs/httpjson/httpjson.go b/plugins/inputs/httpjson/httpjson.go index d5dddd7d4..fb19a9c1d 100644 --- a/plugins/inputs/httpjson/httpjson.go +++ b/plugins/inputs/httpjson/httpjson.go @@ -23,7 +23,8 @@ type HttpJson struct { TagKeys []string Parameters map[string]string Headers map[string]string - client HTTPClient + + client HTTPClient } type HTTPClient interface { diff --git a/plugins/inputs/httpjson/httpjson_test.go b/plugins/inputs/httpjson/httpjson_test.go index f5f81c7c3..972ffb83c 100644 --- a/plugins/inputs/httpjson/httpjson_test.go +++ b/plugins/inputs/httpjson/httpjson_test.go @@ -1,8 +1,10 @@ package httpjson import ( + "fmt" "io/ioutil" "net/http" + "net/http/httptest" "strings" "testing" @@ -27,6 +29,75 @@ const validJSON = ` "another_list": [4] }` +const validJSON2 = `{ + "user":{ + "hash_rate":0, + "expected_24h_rewards":0, + "total_rewards":0.000595109232, + "paid_rewards":0, + "unpaid_rewards":0.000595109232, + "past_24h_rewards":0, + "total_work":"5172625408", + "blocks_found":0 + }, + "workers":{ + "brminer.1":{ + "hash_rate":0, + "hash_rate_24h":0, + "valid_shares":"6176", + "stale_shares":"0", + "invalid_shares":"0", + "rewards":4.5506464e-5, + "rewards_24h":0, + "reset_time":1455409950 + }, + "brminer.2":{ + "hash_rate":0, + "hash_rate_24h":0, + "valid_shares":"0", + "stale_shares":"0", + "invalid_shares":"0", + "rewards":0, + "rewards_24h":0, + "reset_time":1455936726 + }, + "brminer.3":{ + "hash_rate":0, + "hash_rate_24h":0, + "valid_shares":"0", + "stale_shares":"0", + "invalid_shares":"0", + "rewards":0, + "rewards_24h":0, + "reset_time":1455936733 + } + }, + "pool":{ + "hash_rate":114100000, + "active_users":843, + "total_work":"5015346808842682368", + "pps_ratio":1.04, + "pps_rate":7.655e-9 + }, + "network":{ + "hash_rate":1426117703, + "block_number":944895, + "time_per_block":156, + "difficulty":51825.72835216, + "next_difficulty":51916.15249019, + "retarget_time":95053 + }, + "market":{ + "ltc_btc":0.00798, + "ltc_usd":3.37801, + "ltc_eur":3.113, + "ltc_gbp":2.32807, + "ltc_rub":241.796, + "ltc_cny":21.3883, + "btc_usd":422.852 + } +}` + const validJSONTags = ` { "value": 15, @@ -149,6 +220,73 @@ func TestHttpJson200(t *testing.T) { } } +// Test litecoin sample output +func TestHttpJsonLiteCoin(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + fmt.Fprintln(w, validJSON2) + })) + defer ts.Close() + + a := HttpJson{ + Servers: []string{ts.URL}, + Name: "", + Method: "GET", + client: RealHTTPClient{client: &http.Client{}}, + } + + var acc testutil.Accumulator + err := a.Gather(&acc) + require.NoError(t, err) + + // remove response_time from gathered fields because it's non-deterministic + delete(acc.Metrics[0].Fields, "response_time") + + fields := map[string]interface{}{ + "market_btc_usd": float64(422.852), + "market_ltc_btc": float64(0.00798), + "market_ltc_cny": float64(21.3883), + "market_ltc_eur": float64(3.113), + "market_ltc_gbp": float64(2.32807), + "market_ltc_rub": float64(241.796), + "market_ltc_usd": float64(3.37801), + "network_block_number": float64(944895), + "network_difficulty": float64(51825.72835216), + "network_hash_rate": float64(1.426117703e+09), + "network_next_difficulty": float64(51916.15249019), + "network_retarget_time": float64(95053), + "network_time_per_block": float64(156), + "pool_active_users": float64(843), + "pool_hash_rate": float64(1.141e+08), + "pool_pps_rate": float64(7.655e-09), + "pool_pps_ratio": float64(1.04), + "user_blocks_found": float64(0), + "user_expected_24h_rewards": float64(0), + "user_hash_rate": float64(0), + "user_paid_rewards": float64(0), + "user_past_24h_rewards": float64(0), + "user_total_rewards": float64(0.000595109232), + "user_unpaid_rewards": float64(0.000595109232), + "workers_brminer.1_hash_rate": float64(0), + "workers_brminer.1_hash_rate_24h": float64(0), + "workers_brminer.1_reset_time": float64(1.45540995e+09), + "workers_brminer.1_rewards": float64(4.5506464e-05), + "workers_brminer.1_rewards_24h": float64(0), + "workers_brminer.2_hash_rate": float64(0), + "workers_brminer.2_hash_rate_24h": float64(0), + "workers_brminer.2_reset_time": float64(1.455936726e+09), + "workers_brminer.2_rewards": float64(0), + "workers_brminer.2_rewards_24h": float64(0), + "workers_brminer.3_hash_rate": float64(0), + "workers_brminer.3_hash_rate_24h": float64(0), + "workers_brminer.3_reset_time": float64(1.455936733e+09), + "workers_brminer.3_rewards": float64(0), + "workers_brminer.3_rewards_24h": float64(0), + } + + acc.AssertContainsFields(t, "httpjson", fields) +} + // Test response to HTTP 500 func TestHttpJson500(t *testing.T) { httpjson := genMockHttpJson(validJSON, 500) diff --git a/testutil/accumulator.go b/testutil/accumulator.go index cb56d8d28..9b6fb2373 100644 --- a/testutil/accumulator.go +++ b/testutil/accumulator.go @@ -133,13 +133,7 @@ func (a *Accumulator) AssertContainsTaggedFields( } if p.Measurement == measurement { - if !reflect.DeepEqual(fields, p.Fields) { - pActual, _ := json.MarshalIndent(p.Fields, "", " ") - pExp, _ := json.MarshalIndent(fields, "", " ") - msg := fmt.Sprintf("Actual:\n%s\n(%T) \nExpected:\n%s\n(%T)", - string(pActual), p.Fields, string(pExp), fields) - assert.Fail(t, msg) - } + assert.Equal(t, fields, p.Fields) return } } @@ -156,13 +150,7 @@ func (a *Accumulator) AssertContainsFields( defer a.Unlock() for _, p := range a.Metrics { if p.Measurement == measurement { - if !reflect.DeepEqual(fields, p.Fields) { - pActual, _ := json.MarshalIndent(p.Fields, "", " ") - pExp, _ := json.MarshalIndent(fields, "", " ") - msg := fmt.Sprintf("Actual:\n%s\n(%T) \nExpected:\n%s\n(%T)", - string(pActual), p.Fields, string(pExp), fields) - assert.Fail(t, msg) - } + assert.Equal(t, fields, p.Fields) return } }