forked from NethermindEth/sedge
/
request.go
67 lines (56 loc) · 1.7 KB
/
request.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
Copyright 2022 Nethermind
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package utils
import (
"net/http"
"time"
"github.com/cenkalti/backoff/v4"
log "github.com/sirupsen/logrus"
)
/*
GetRequest :
Make a GET request to the given URL. Uses exponential retries with backoff.
params :-
a. url string
URL to make the request to
b. retryDuration time.Duration
Duration to wait between retries
returns :-
a. http.Response
Response from the request
b. error
Error if any
*/
func GetRequest(url string, retryDuration time.Duration) (*http.Response, error) {
logFields := log.Fields{"Method": "GetRequest"}
var response *http.Response
// Adding exponential retry
b := backoff.NewExponentialBackOff()
b.MaxElapsedTime = retryDuration
err := backoff.Retry(func() (err error) {
// To make a request with custom headers, use NewRequest and Client.Do.
response, err = http.Get(url)
if err != nil {
log.WithFields(logFields).Errorf("request failed. Error: %v", err)
log.WithFields(logFields).Info("Retrying request")
return err
} else if response.StatusCode != 200 {
log.WithFields(logFields).Errorf("bad response, got: %d", response.StatusCode)
}
return nil
}, b)
if err != nil {
return nil, err
}
return response, nil
}