From c9751984b7254587a12b74dee898b72d152483d3 Mon Sep 17 00:00:00 2001 From: andig Date: Sun, 14 Apr 2024 16:12:02 +0200 Subject: [PATCH] chore: don't retry permanent errors --- tariff/amber.go | 2 +- tariff/awattar.go | 2 +- tariff/electricitymaps.go | 2 +- tariff/elering.go | 2 +- tariff/energinet.go | 2 +- tariff/entsoe.go | 11 ++--------- tariff/groupe-e.go | 9 +-------- tariff/gruenstromindex.go | 2 +- tariff/ngeso.go | 7 +------ tariff/octopus.go | 2 +- tariff/pun.go | 15 ++++++--------- tariff/smartenergy.go | 2 +- 12 files changed, 18 insertions(+), 40 deletions(-) diff --git a/tariff/amber.go b/tariff/amber.go index 474ea63f4..0a9b02c18 100644 --- a/tariff/amber.go +++ b/tariff/amber.go @@ -90,7 +90,7 @@ func (t *Amber) run(done chan error) { uri := fmt.Sprintf("%s&endDate=%s", t.uri, time.Now().AddDate(0, 0, 2).Format("2006-01-02")) if err := backoff.Retry(func() error { - return t.GetJSON(uri, &res) + return backoffPermanentError(t.GetJSON(uri, &res)) }, bo); err != nil { once.Do(func() { done <- err }) diff --git a/tariff/awattar.go b/tariff/awattar.go index 02344e737..0b2ac1f87 100644 --- a/tariff/awattar.go +++ b/tariff/awattar.go @@ -63,7 +63,7 @@ func (t *Awattar) run(done chan error) { var res awattar.Prices if err := backoff.Retry(func() error { - return client.GetJSON(t.uri, &res) + return backoffPermanentError(client.GetJSON(t.uri, &res)) }, bo); err != nil { once.Do(func() { done <- err }) diff --git a/tariff/electricitymaps.go b/tariff/electricitymaps.go index 43ccecff5..718934c6a 100644 --- a/tariff/electricitymaps.go +++ b/tariff/electricitymaps.go @@ -87,7 +87,7 @@ func (t *ElectricityMaps) run(done chan error) { var res CarbonIntensity if err := backoff.Retry(func() error { - return t.GetJSON(uri, &res) + return backoffPermanentError(t.GetJSON(uri, &res)) }, bo); err != nil { if res.Error != "" { err = errors.New(res.Error) diff --git a/tariff/elering.go b/tariff/elering.go index 7ff5bc73e..91ba8b53e 100644 --- a/tariff/elering.go +++ b/tariff/elering.go @@ -72,7 +72,7 @@ func (t *Elering) run(done chan error) { url.QueryEscape(ts.Add(48*time.Hour).Format(time.RFC3339))) if err := backoff.Retry(func() error { - return client.GetJSON(uri, &res) + return backoffPermanentError(client.GetJSON(uri, &res)) }, bo); err != nil { once.Do(func() { done <- err }) diff --git a/tariff/energinet.go b/tariff/energinet.go index eac20df90..ac672216f 100644 --- a/tariff/energinet.go +++ b/tariff/energinet.go @@ -72,7 +72,7 @@ func (t *Energinet) run(done chan error) { t.region) if err := backoff.Retry(func() error { - return client.GetJSON(uri, &res) + return backoffPermanentError(client.GetJSON(uri, &res)) }, bo); err != nil { once.Do(func() { done <- err }) diff --git a/tariff/entsoe.go b/tariff/entsoe.go index 9511aad84..415eaf7b5 100644 --- a/tariff/entsoe.go +++ b/tariff/entsoe.go @@ -4,7 +4,6 @@ import ( "bytes" "encoding/xml" "errors" - "net/http" "slices" "strings" "sync" @@ -96,14 +95,8 @@ func (t *Entsoe) run(done chan error) { if err := backoff.Retry(func() error { // Request the next 24 hours of data. data, err := t.DoBody(entsoe.DayAheadPricesRequest(t.domain, time.Hour*24)) - - var se request.StatusError - if errors.As(err, &se) { - if se.StatusCode() == http.StatusBadRequest { - return backoff.Permanent(se) - } - - return se + if err != nil { + return backoffPermanentError(err) } var doc entsoe.Document diff --git a/tariff/groupe-e.go b/tariff/groupe-e.go index 6c13d9537..0e465d2eb 100644 --- a/tariff/groupe-e.go +++ b/tariff/groupe-e.go @@ -1,9 +1,7 @@ package tariff import ( - "errors" "fmt" - "net/http" "slices" "sync" "time" @@ -56,12 +54,7 @@ func (t *GroupeE) run(done chan error) { uri := fmt.Sprintf("https://api.tariffs.groupe-e.ch/v1/tariffs?start_timestamp=%s&end_timestamp=%s", start.Format(time.RFC3339), start.Add(48*time.Hour).Format(time.RFC3339)) if err := backoff.Retry(func() error { - err := client.GetJSON(uri, &res) - var se request.StatusError - if errors.As(err, &se) && se.HasStatus(http.StatusBadRequest) { - return backoff.Permanent(se) - } - return err + return backoffPermanentError(client.GetJSON(uri, &res)) }, bo); err != nil { once.Do(func() { done <- err }) diff --git a/tariff/gruenstromindex.go b/tariff/gruenstromindex.go index abccf6956..b655177d1 100644 --- a/tariff/gruenstromindex.go +++ b/tariff/gruenstromindex.go @@ -97,7 +97,7 @@ func (t *GrünStromIndex) run(done chan error) { var res gsiForecast err := backoff.Retry(func() error { - return client.GetJSON(uri, &res) + return backoffPermanentError(client.GetJSON(uri, &res)) }, bo) if err == nil && res.Err { diff --git a/tariff/ngeso.go b/tariff/ngeso.go index 71b7c87c2..f761495dd 100644 --- a/tariff/ngeso.go +++ b/tariff/ngeso.go @@ -2,7 +2,6 @@ package tariff import ( "errors" - "net/http" "slices" "sync" "time" @@ -79,11 +78,7 @@ func (t *Ngeso) run(done chan error) { for ; true; <-tick.C { res, err := backoff.RetryWithData(func() (ngeso.CarbonForecastResponse, error) { res, err := tReq.DoRequest(client) - var se request.StatusError - if errors.As(err, &se) && se.StatusCode() == http.StatusBadRequest { - return nil, backoff.Permanent(se) - } - return res, err + return res, backoffPermanentError(err) }, bo) if err != nil { once.Do(func() { done <- err }) diff --git a/tariff/octopus.go b/tariff/octopus.go index a1b31835a..b79bf947d 100644 --- a/tariff/octopus.go +++ b/tariff/octopus.go @@ -67,7 +67,7 @@ func (t *Octopus) run(done chan error) { var res octopus.UnitRates if err := backoff.Retry(func() error { - return client.GetJSON(t.uri, &res) + return backoffPermanentError(client.GetJSON(t.uri, &res)) }, bo); err != nil { once.Do(func() { done <- err }) diff --git a/tariff/pun.go b/tariff/pun.go index 9cc720a10..4f1538b84 100644 --- a/tariff/pun.go +++ b/tariff/pun.go @@ -97,21 +97,18 @@ func (t *Pun) run(done chan error) { continue } - var tomorrow api.Rates - if err := backoff.Retry(func() error { - var err error - - tomorrow, err = t.getData(time.Now().AddDate(0, 0, 1)) - - return err - }, bo); err != nil { + res, err := backoff.RetryWithData(func() (api.Rates, error) { + res, err := t.getData(time.Now().AddDate(0, 0, 1)) + return res, backoffPermanentError(err) + }, bo) + if err != nil { once.Do(func() { done <- err }) t.log.ERROR.Println(err) continue } // merge today and tomorrow data - data := append(today, tomorrow...) + data := append(today, res...) t.data.Set(data) once.Do(func() { close(done) }) diff --git a/tariff/smartenergy.go b/tariff/smartenergy.go index de532ba51..d7e84a00a 100644 --- a/tariff/smartenergy.go +++ b/tariff/smartenergy.go @@ -56,7 +56,7 @@ func (t *SmartEnergy) run(done chan error) { var res smartenergy.Prices if err := backoff.Retry(func() error { - return client.GetJSON(smartenergy.URI, &res) + return backoffPermanentError(client.GetJSON(smartenergy.URI, &res)) }, bo); err != nil { once.Do(func() { done <- err })