chore: don't retry permanent errors

This commit is contained in:
andig 2024-04-14 16:12:02 +02:00
parent ab412b41b4
commit c9751984b7
12 changed files with 18 additions and 40 deletions

View file

@ -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 })

View file

@ -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 })

View file

@ -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)

View file

@ -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 })

View file

@ -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 })

View file

@ -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

View file

@ -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 })

View file

@ -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 {

View file

@ -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 })

View file

@ -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 })

View file

@ -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) })

View file

@ -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 })