diff --git a/go.mod b/go.mod index 3a25a60..6962d02 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,9 @@ go 1.16 require ( github.com/gorilla/mux v1.8.0 + github.com/hashicorp/go-cleanhttp v0.5.1 + github.com/hashicorp/go-retryablehttp v0.6.8 github.com/rs/zerolog v1.21.0 - github.com/stretchr/testify v1.7.0 // indirect - willnorris.com/go/microformats v1.1.1 // indirect + github.com/stretchr/testify v1.7.0 + willnorris.com/go/microformats v1.1.1 ) diff --git a/go.sum b/go.sum index 87eef9f..3ee2b39 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,20 @@ github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg= github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-retryablehttp v0.6.8 h1:92lWxgpa+fF3FozM4B3UZtHZMJX8T5XT+TFdCxsPyWs= +github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -13,8 +22,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.21.0 h1:Q3vdXlfLNT+OftyBHsU0Y445MD+8m8axjKgf2si0QcM= github.com/rs/zerolog v1.21.0/go.mod h1:ZPhntP/xmq1nnND05hhpAh2QMhSsA4UN3MGZ6O2J3hM= -github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -44,6 +53,7 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/rest/client.go b/rest/client.go index fdf7540..651592b 100644 --- a/rest/client.go +++ b/rest/client.go @@ -2,10 +2,13 @@ package rest import ( "fmt" + "github.com/hashicorp/go-cleanhttp" + "github.com/hashicorp/go-retryablehttp" "io/ioutil" "net/http" "net/url" "strings" + "time" ) type Client interface { @@ -18,8 +21,21 @@ type Client interface { type HttpClient struct { } +var ( + // do not use retryablehttp default impl - inject own logger and retry policies + jammingHttp = &retryablehttp.Client{ + HTTPClient: cleanhttp.DefaultPooledClient(), + Logger: &zeroLogWrapper{}, + RetryWaitMin: 1 * time.Second, + RetryWaitMax: 30 * time.Second, + RetryMax: 5, + CheckRetry: retryablehttp.DefaultRetryPolicy, + Backoff: retryablehttp.DefaultBackoff, + } +) + func (client *HttpClient) PostForm(url string, formData url.Values) error { - resp, err := http.PostForm(url, formData) + resp, err := jammingHttp.PostForm(url, formData) if err != nil { return err } @@ -30,7 +46,7 @@ func (client *HttpClient) PostForm(url string, formData url.Values) error { } func (client *HttpClient) Post(url string, contenType string, body string) error { - resp, err := http.Post(url, contenType, strings.NewReader(body)) + resp, err := jammingHttp.Post(url, contenType, strings.NewReader(body)) if err != nil { return err } @@ -73,5 +89,5 @@ func isStatusOk(resp *http.Response) bool { } func (client *HttpClient) Get(url string) (*http.Response, error) { - return http.Get(url) + return jammingHttp.Get(url) } diff --git a/rest/zerologwrapper.go b/rest/zerologwrapper.go new file mode 100644 index 0000000..87d76ee --- /dev/null +++ b/rest/zerologwrapper.go @@ -0,0 +1,19 @@ +package rest + +import "github.com/rs/zerolog/log" + +type zeroLogWrapper struct{} + +func (l *zeroLogWrapper) Error(msg string, keysAndValues ...interface{}) { + log.Error().Msgf(msg, keysAndValues...) +} +func (l *zeroLogWrapper) Info(msg string, keysAndValues ...interface{}) { + log.Info().Msgf(msg, keysAndValues...) +} +func (l *zeroLogWrapper) Debug(msg string, keysAndValues ...interface{}) { + // no thanks. + // log.Debug().Msgf(msg, keysAndValues...) +} +func (l *zeroLogWrapper) Warn(msg string, keysAndValues ...interface{}) { + log.Warn().Msgf(msg, keysAndValues...) +}