chore: log retries - revert me (#20311)
This commit is contained in:
parent
b4988f4d7b
commit
02938e00d0
2 changed files with 29 additions and 2 deletions
|
|
@ -9,6 +9,7 @@ import (
|
|||
"text/tabwriter"
|
||||
"time"
|
||||
|
||||
"github.com/cenkalti/backoff/v4"
|
||||
"github.com/evcc-io/evcc/api"
|
||||
"github.com/fatih/structs"
|
||||
)
|
||||
|
|
@ -34,6 +35,11 @@ func (d *dumper) DumpWithHeader(name string, device interface{}) {
|
|||
}
|
||||
}
|
||||
|
||||
// bo returns an exponential backoff for reading meter power quickly
|
||||
func bo() *backoff.ExponentialBackOff {
|
||||
return backoff.NewExponentialBackOff(backoff.WithInitialInterval(20*time.Millisecond), backoff.WithMaxElapsedTime(time.Second))
|
||||
}
|
||||
|
||||
func (d *dumper) Dump(name string, v interface{}) {
|
||||
w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0)
|
||||
|
||||
|
|
@ -45,7 +51,15 @@ func (d *dumper) Dump(name string, v interface{}) {
|
|||
// meter
|
||||
|
||||
if v, ok := v.(api.Meter); ok {
|
||||
if power, err := v.CurrentPower(); err != nil {
|
||||
power, err := backoff.RetryWithData(func() (float64, error) {
|
||||
f, err := v.CurrentPower()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
return f, err
|
||||
}, bo())
|
||||
|
||||
if err != nil {
|
||||
fmt.Fprintf(w, "Power:\t%v\n", err)
|
||||
} else {
|
||||
fmt.Fprintf(w, "Power:\t%.0fW\n", power)
|
||||
|
|
|
|||
15
core/site.go
15
core/site.go
|
|
@ -1,6 +1,7 @@
|
|||
package core
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"fmt"
|
||||
"math"
|
||||
|
|
@ -484,10 +485,22 @@ func (site *Site) collectMeters(key string, meters []config.Device[api.Meter]) [
|
|||
meter := dev.Instance()
|
||||
|
||||
// power
|
||||
power, err := backoff.RetryWithData(meter.CurrentPower, bo())
|
||||
var b bytes.Buffer
|
||||
start := time.Now()
|
||||
power, err := backoff.RetryWithData(func() (float64, error) {
|
||||
f, err := meter.CurrentPower()
|
||||
if err != nil {
|
||||
fmt.Fprintf(&b, "%v !! %v\n", time.Now(), err)
|
||||
}
|
||||
return f, err
|
||||
}, bo())
|
||||
if err == nil {
|
||||
site.log.DEBUG.Printf("%s %d power: %.0fW", key, i+1, power)
|
||||
} else {
|
||||
if b.Len() > 0 {
|
||||
site.log.ERROR.Println(start, "!!")
|
||||
site.log.ERROR.Println(b.String())
|
||||
}
|
||||
site.log.ERROR.Printf("%s %d power: %v", key, i+1, err)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue