Add more context to configuration errors to simplify diagnosis

This commit is contained in:
andig 2020-08-13 15:58:05 +02:00
parent a0bdee5c96
commit 8eca79a675
4 changed files with 30 additions and 0 deletions

View file

@ -5,6 +5,7 @@ import (
"strings"
"github.com/andig/evcc/api"
"github.com/pkg/errors"
)
type apiFunction string
@ -38,5 +39,9 @@ func NewFromConfig(typ string, other map[string]interface{}) (charger api.Charge
return nil, fmt.Errorf("invalid charger type: %s", typ)
}
if err != nil {
err = errors.Wrap(err, fmt.Sprintf("cannot create %s charger", typ))
}
return charger, err
}

View file

@ -90,6 +90,11 @@ func (cp *ConfigProvider) configureMeters(conf config) {
if err != nil {
log.FATAL.Fatal(err)
}
if _, exists := cp.meters[cc.Name]; exists {
log.FATAL.Fatalf("duplicate meter name: %s already defined and must be unique", cc.Name)
}
cp.meters[cc.Name] = m
}
}
@ -101,6 +106,11 @@ func (cp *ConfigProvider) configureChargers(conf config) {
if err != nil {
log.FATAL.Fatal(err)
}
if _, exists := cp.chargers[cc.Name]; exists {
log.FATAL.Fatalf("duplicate charger name: %s already defined and must be unique", cc.Name)
}
cp.chargers[cc.Name] = c
}
}
@ -112,6 +122,11 @@ func (cp *ConfigProvider) configureVehicles(conf config) {
if err != nil {
log.FATAL.Fatal(err)
}
if _, exists := cp.vehicles[cc.Name]; exists {
log.FATAL.Fatalf("duplicate vehicle name: %s already defined and must be unique", cc.Name)
}
cp.vehicles[cc.Name] = v
}
}

View file

@ -5,6 +5,7 @@ import (
"strings"
"github.com/andig/evcc/api"
"github.com/pkg/errors"
)
// NewFromConfig creates meter from configuration
@ -22,5 +23,9 @@ func NewFromConfig(typ string, other map[string]interface{}) (meter api.Meter, e
err = fmt.Errorf("invalid meter type: %s", typ)
}
if err != nil {
err = errors.Wrap(err, fmt.Sprintf("cannot create %s meter", typ))
}
return meter, err
}

View file

@ -5,6 +5,7 @@ import (
"strings"
"github.com/andig/evcc/api"
"github.com/pkg/errors"
)
// NewFromConfig creates vehicle from configuration
@ -28,5 +29,9 @@ func NewFromConfig(typ string, other map[string]interface{}) (v api.Vehicle, err
err = fmt.Errorf("invalid vehicle type: %s", typ)
}
if err != nil {
err = errors.Wrap(err, fmt.Sprintf("cannot create %s vehicle", typ))
}
return
}