From ceb5777849bf99f4186b21a8ebf4fe3a17ccdb60 Mon Sep 17 00:00:00 2001 From: andig Date: Fri, 8 Mar 2024 14:04:22 +0100 Subject: [PATCH] chore: simplify --- tariff/ngeso.go | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/tariff/ngeso.go b/tariff/ngeso.go index a04a7d984..bd51d4721 100644 --- a/tariff/ngeso.go +++ b/tariff/ngeso.go @@ -76,26 +76,23 @@ func (t *Ngeso) run(done chan error) { // Data updated by ESO every half hour, but we only need data every hour to stay current. for ; true; <-time.Tick(time.Hour) { - var carbonResponse ngeso.CarbonForecastResponse - if err := backoff.Retry(func() error { - var err error - carbonResponse, err = tReq.DoRequest(client) - - // Consider whether errors.As would be more appropriate if this needs to start dealing with wrapped errors. - if se, ok := err.(request.StatusError); ok && se.HasStatus(http.StatusBadRequest) { - // Catch cases where we're sending completely incorrect data (usually the result of a bad region). - return backoff.Permanent(se) + res, err := backoff.RetryWithData(func() (ngeso.CarbonForecastResponse, error) { + res, err := tReq.DoRequest(client) + var se request.StatusError + if errors.As(err, &se) && se.HasStatus(http.StatusBadRequest) { + return nil, backoff.Permanent(se) } - return err - }, bo); err != nil { + return res, err + }, bo) + if err != nil { once.Do(func() { done <- err }) t.log.ERROR.Println(err) continue } - data := make(api.Rates, 0, len(carbonResponse.Results())) - for _, r := range carbonResponse.Results() { + data := make(api.Rates, 0, len(res.Results())) + for _, r := range res.Results() { ar := api.Rate{ Start: r.ValidityStart.Time, End: r.ValidityEnd.Time,