feat: cache errored request

This commit is contained in:
Simon Ding
2024-08-13 11:05:46 +08:00
parent 32914344d1
commit b487c81865
2 changed files with 22 additions and 13 deletions

View File

@@ -5,4 +5,4 @@ import (
"time"
)
var cc = cache.NewCache[string, Response](time.Minute * 30)
var cc = cache.NewCache[string, *Response](time.Minute * 30)

View File

@@ -135,19 +135,10 @@ func Search(indexer *db.TorznabInfo, keyWord string) ([]Result, error) {
cacheRes, ok := cc.Get(key)
if !ok {
resp, err := http.DefaultClient.Do(req)
res, err := doRequest(req)
if err != nil {
return nil, errors.Wrap(err, "do http")
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
return nil, errors.Wrap(err, "read http body")
}
var res Response
err = xml.Unmarshal(data, &res)
if err != nil {
return nil, errors.Wrapf(err, "xml unmarshal data: %v", string(data))
cc.Set(key, &Response{})
return nil, errors.Wrap(err, "do http request")
}
cacheRes = res
cc.Set(key, cacheRes)
@@ -155,6 +146,24 @@ func Search(indexer *db.TorznabInfo, keyWord string) ([]Result, error) {
return cacheRes.ToResults(indexer), nil
}
func doRequest(req *http.Request) (*Response, error) {
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, errors.Wrap(err, "do http")
}
defer resp.Body.Close()
data, err := io.ReadAll(resp.Body)
if err != nil {
return nil, errors.Wrap(err, "read http body")
}
var res Response
err = xml.Unmarshal(data, &res)
if err != nil {
return nil, errors.Wrapf(err, "xml unmarshal data: %v", string(data))
}
return &res, nil
}
type Result struct {
Name string `json:"name"`
Link string `json:"link"`