Use ReadJSON everywhere, remove GetJSONFromURL

This commit is contained in:
Łukasz Mierzwa
2017-04-16 08:31:07 -07:00
parent 940eb77c69
commit 5d9ec5da64
8 changed files with 14 additions and 94 deletions
+9 -4
View File
@@ -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) {
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
}
+1 -1
View File
@@ -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
}
+1 -1
View File
@@ -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
}
+1 -1
View File
@@ -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
}
-41
View File
@@ -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
-44
View File
@@ -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)
}
}