From 5d9ec5da642df82d8d5581de9589df76004d34c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Fri, 14 Apr 2017 23:04:58 -0700 Subject: [PATCH] Use ReadJSON everywhere, remove GetJSONFromURL --- alertmanager/alertmanager_test.go | 13 ++++++--- alertmanager/version.go | 2 +- mapper/v04/alerts.go | 2 +- mapper/v04/silences.go | 2 +- mapper/v05/alerts.go | 2 +- mapper/v05/silences.go | 2 +- transport/http.go | 41 ---------------------------- transport/http_test.go | 44 ------------------------------- 8 files changed, 14 insertions(+), 94 deletions(-) delete mode 100644 transport/http_test.go diff --git a/alertmanager/alertmanager_test.go b/alertmanager/alertmanager_test.go index ad76da2bc..8d385df3e 100644 --- a/alertmanager/alertmanager_test.go +++ b/alertmanager/alertmanager_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/cloudflare/unsee/alertmanager" + "github.com/cloudflare/unsee/config" "github.com/cloudflare/unsee/mock" log "github.com/Sirupsen/logrus" @@ -15,13 +16,15 @@ var testVersions = []string{"0.4", "0.5"} func TestGetAlerts(t *testing.T) { log.SetLevel(log.ErrorLevel) + config.Config.AlertmanagerURI = "http://localhost" + httpmock.Activate() defer httpmock.DeactivateAndReset() for _, version := range testVersions { httpmock.Reset() - mock.RegisterURL("api/v1/status", version, "status") - mock.RegisterURL("api/v1/alerts/groups", version, "alerts/groups") + mock.RegisterURL("http://localhost/api/v1/status", version, "status") + mock.RegisterURL("http://localhost/api/v1/alerts/groups", version, "alerts/groups") v := alertmanager.GetVersion() if !strings.HasPrefix(v, version) { @@ -40,13 +43,15 @@ func TestGetAlerts(t *testing.T) { func TestGetSilences(t *testing.T) { log.SetLevel(log.ErrorLevel) + config.Config.AlertmanagerURI = "http://localhost" + httpmock.Activate() defer httpmock.DeactivateAndReset() for _, version := range testVersions { httpmock.Reset() - mock.RegisterURL("api/v1/status", version, "status") - mock.RegisterURL("api/v1/silences", version, "silences") + mock.RegisterURL("http://localhost/api/v1/status", version, "status") + mock.RegisterURL("http://localhost/api/v1/silences", version, "silences") v := alertmanager.GetVersion() if !strings.HasPrefix(v, version) { diff --git a/alertmanager/version.go b/alertmanager/version.go index c0f3c1501..558d58f49 100644 --- a/alertmanager/version.go +++ b/alertmanager/version.go @@ -29,7 +29,7 @@ func GetVersion() string { return defaultVersion } ver := alertmanagerVersion{} - err = transport.GetJSONFromURL(url, config.Config.AlertmanagerTimeout, &ver) + err = transport.ReadJSON(url, config.Config.AlertmanagerTimeout, &ver) if err != nil { log.Errorf("%s request failed: %s", url, err.Error()) return defaultVersion diff --git a/mapper/v04/alerts.go b/mapper/v04/alerts.go index edb175c1b..131f35f25 100644 --- a/mapper/v04/alerts.go +++ b/mapper/v04/alerts.go @@ -62,7 +62,7 @@ func (m AlertMapper) GetAlerts() ([]models.AlertGroup, error) { return groups, err } - err = transport.GetJSONFromURL(url, config.Config.AlertmanagerTimeout, &resp) + err = transport.ReadJSON(url, config.Config.AlertmanagerTimeout, &resp) if err != nil { return groups, err } diff --git a/mapper/v04/silences.go b/mapper/v04/silences.go index 416d9ce0a..6d8396b96 100644 --- a/mapper/v04/silences.go +++ b/mapper/v04/silences.go @@ -66,7 +66,7 @@ func (m SilenceMapper) GetSilences() ([]models.Silence, error) { // Alertmanager 0.4 uses pagination for silences url = fmt.Sprintf("%s?limit=%d", url, math.MaxUint32) - err = transport.GetJSONFromURL(url, config.Config.AlertmanagerTimeout, &resp) + err = transport.ReadJSON(url, config.Config.AlertmanagerTimeout, &resp) if err != nil { return silences, err } diff --git a/mapper/v05/alerts.go b/mapper/v05/alerts.go index c1e039363..9308adcde 100644 --- a/mapper/v05/alerts.go +++ b/mapper/v05/alerts.go @@ -60,7 +60,7 @@ func (m AlertMapper) GetAlerts() ([]models.AlertGroup, error) { return groups, err } - err = transport.GetJSONFromURL(url, config.Config.AlertmanagerTimeout, &resp) + err = transport.ReadJSON(url, config.Config.AlertmanagerTimeout, &resp) if err != nil { return groups, err } diff --git a/mapper/v05/silences.go b/mapper/v05/silences.go index 7e56fd9ca..b2855ce14 100644 --- a/mapper/v05/silences.go +++ b/mapper/v05/silences.go @@ -57,7 +57,7 @@ func (m SilenceMapper) GetSilences() ([]models.Silence, error) { return silences, err } - err = transport.GetJSONFromURL(url, config.Config.AlertmanagerTimeout, &resp) + err = transport.ReadJSON(url, config.Config.AlertmanagerTimeout, &resp) if err != nil { return silences, err } diff --git a/transport/http.go b/transport/http.go index b438f0b48..875746ec8 100644 --- a/transport/http.go +++ b/transport/http.go @@ -2,7 +2,6 @@ package transport import ( "compress/gzip" - "encoding/json" "fmt" "io" "net/http" @@ -11,46 +10,6 @@ import ( log "github.com/Sirupsen/logrus" ) -// GetJSONFromURL allows to fetch Alertmanager data over HTTP transport and -// decode it onto provided data structure. -func GetJSONFromURL(url string, timeout time.Duration, target interface{}) error { - log.Infof("GET %s", url) - - c := &http.Client{ - Timeout: timeout, - } - - req, err := http.NewRequest("GET", url, nil) - if err != nil { - return err - } - req.Header.Add("Accept-Encoding", "gzip") - resp, err := c.Do(req) - if err != nil { - return err - } - - if resp.StatusCode != http.StatusOK { - return fmt.Errorf("Request to Alertmanager failed with %s", resp.Status) - } - - defer resp.Body.Close() - - var reader io.ReadCloser - switch resp.Header.Get("Content-Encoding") { - case "gzip": - reader, err = gzip.NewReader(resp.Body) - if err != nil { - return fmt.Errorf("Failed to decode gzipped content: %s", err.Error()) - } - defer reader.Close() - default: - reader = resp.Body - } - - return json.NewDecoder(reader).Decode(target) -} - type httpReader struct { URL string Timeout time.Duration diff --git a/transport/http_test.go b/transport/http_test.go deleted file mode 100644 index 6a879b7a5..000000000 --- a/transport/http_test.go +++ /dev/null @@ -1,44 +0,0 @@ -package transport_test - -import ( - "testing" - "time" - - "github.com/cloudflare/unsee/transport" - - log "github.com/Sirupsen/logrus" - httpmock "gopkg.in/jarcoal/httpmock.v1" -) - -type mockJSONResponse struct { - status string - integer int - yes bool - no bool -} - -func TestGetJSONFromURL(t *testing.T) { - log.SetLevel(log.ErrorLevel) - httpmock.Activate() - defer httpmock.DeactivateAndReset() - mockJSON := `{ - "response": "success", - "integer": 123, - "yes": true, - "no": false - }` - httpmock.RegisterResponder("GET", "http://localhost/", httpmock.NewStringResponder(200, mockJSON)) - - response := mockJSONResponse{} - err := transport.GetJSONFromURL("http://localhost/", time.Second, &response) - if err != nil { - t.Errorf("getJSONFromURL() failed: %s", err.Error()) - } - - httpmock.RegisterResponder("GET", "http://localhost/404", httpmock.NewStringResponder(404, "Not found")) - response = mockJSONResponse{} - err = transport.GetJSONFromURL("http://localhost/404", time.Second, &response) - if err == nil { - t.Errorf("getJSONFromURL() on invalid url didn't return 404, response: %v", response) - } -}