fix(@gif): fix retry when connection lost (#2520)
This commit is contained in:
parent
bd3f0f436b
commit
13dd602b3c
|
@ -31,13 +31,12 @@ const maxRetry = 3
|
||||||
const baseURL = "https://g.tenor.com/v1/"
|
const baseURL = "https://g.tenor.com/v1/"
|
||||||
|
|
||||||
func NewGifAPI(db *accounts.Database) *API {
|
func NewGifAPI(db *accounts.Database) *API {
|
||||||
return &API{db, &http.Client{Timeout: time.Minute}}
|
return &API{db}
|
||||||
}
|
}
|
||||||
|
|
||||||
// API is class with methods available over RPC.
|
// API is class with methods available over RPC.
|
||||||
type API struct {
|
type API struct {
|
||||||
db *accounts.Database
|
db *accounts.Database
|
||||||
httpClient *http.Client
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *API) SetTenorAPIKey(key string) (err error) {
|
func (api *API) SetTenorAPIKey(key string) (err error) {
|
||||||
|
@ -53,11 +52,21 @@ func (api *API) SetTenorAPIKey(key string) (err error) {
|
||||||
func (api *API) GetContentWithRetry(path string) (value string, err error) {
|
func (api *API) GetContentWithRetry(path string) (value string, err error) {
|
||||||
var currentRetry = 0
|
var currentRetry = 0
|
||||||
var response *http.Response
|
var response *http.Response
|
||||||
|
|
||||||
for currentRetry < maxRetry {
|
for currentRetry < maxRetry {
|
||||||
response, err = api.httpClient.Get(baseURL + path + defaultParams + tenorAPIKey)
|
transport := &http.Transport{
|
||||||
|
Proxy: http.ProxyFromEnvironment,
|
||||||
|
ResponseHeaderTimeout: time.Second * 1,
|
||||||
|
}
|
||||||
|
|
||||||
|
client := http.Client{
|
||||||
|
Timeout: 1 * time.Second,
|
||||||
|
Transport: transport,
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err = client.Get(baseURL + path + defaultParams + tenorAPIKey)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error("can't get content from path %s", path)
|
log.Error("can't get content from path %s with %s", path, err.Error())
|
||||||
currentRetry++
|
currentRetry++
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
} else {
|
} else {
|
||||||
|
@ -65,6 +74,9 @@ func (api *API) GetContentWithRetry(path string) (value string, err error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if response == nil {
|
||||||
|
return "", fmt.Errorf("Could not reach Tenor API")
|
||||||
|
}
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
|
|
||||||
if response.StatusCode != http.StatusOK {
|
if response.StatusCode != http.StatusOK {
|
||||||
|
|
Loading…
Reference in New Issue