config: Handle errors better
This commit is contained in:
parent
8997f54a8c
commit
55d5c9c529
4 changed files with 28 additions and 10 deletions
|
|
@ -69,6 +69,10 @@ GRAPHDB_ADMIN_PASSWORD=${GRAPHDB_ADMIN_PASSWORD}
|
||||||
MYSQL_ADMIN_USER=${MYSQL_ADMIN_USER}
|
MYSQL_ADMIN_USER=${MYSQL_ADMIN_USER}
|
||||||
MYSQL_ADMIN_PASSWORD=${MYSQL_ADMIN_PASSWORD}
|
MYSQL_ADMIN_PASSWORD=${MYSQL_ADMIN_PASSWORD}
|
||||||
|
|
||||||
|
# The admin user and password required to access the keycloak server and api
|
||||||
|
KEYCLOAK_ADMIN_USER=${KEYCLOAK_ADMIN_USER}
|
||||||
|
KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_ADMIN_PASSWORD}
|
||||||
|
|
||||||
# The admin user and password required to access the /dis/ server and api
|
# The admin user and password required to access the /dis/ server and api
|
||||||
DIS_ADMIN_USER=${DIS_ADMIN_USER}
|
DIS_ADMIN_USER=${DIS_ADMIN_USER}
|
||||||
DIS_ADMIN_PASSWORD=${DIS_ADMIN_PASSWORD}
|
DIS_ADMIN_PASSWORD=${DIS_ADMIN_PASSWORD}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"github.com/FAU-CDI/wisski-distillery/pkg/environment"
|
"github.com/FAU-CDI/wisski-distillery/pkg/environment"
|
||||||
"github.com/FAU-CDI/wisski-distillery/pkg/envreader"
|
"github.com/FAU-CDI/wisski-distillery/pkg/envreader"
|
||||||
"github.com/FAU-CDI/wisski-distillery/pkg/stringparser"
|
"github.com/FAU-CDI/wisski-distillery/pkg/stringparser"
|
||||||
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Unmarshal updates this configuration from the provided [io.Reader].
|
// Unmarshal updates this configuration from the provided [io.Reader].
|
||||||
|
|
@ -45,15 +46,14 @@ func (config *Config) Unmarshal(env environment.Environment, src io.Reader) erro
|
||||||
// read the value with a default
|
// read the value with a default
|
||||||
value, ok := values[tEnv]
|
value, ok := values[tEnv]
|
||||||
if !ok || value == "" {
|
if !ok || value == "" {
|
||||||
if tDefault == "" {
|
if tDefault != "" {
|
||||||
continue
|
value = tDefault
|
||||||
}
|
}
|
||||||
value = tDefault
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// parse the value!
|
// parse the value!
|
||||||
if err := stringparser.Parse(env, tParser, value, vField); err != nil {
|
if err := stringparser.Parse(env, tParser, value, vField); err != nil {
|
||||||
return err
|
return errors.Errorf("Config.Unmarshal: Setting %q, Parser %q: %s", tEnv, tParser, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,10 @@ type Component interface {
|
||||||
// Name should be implemented by the [ComponentBase] struct.
|
// Name should be implemented by the [ComponentBase] struct.
|
||||||
Name() string
|
Name() string
|
||||||
|
|
||||||
|
// ID returns a unique id of this component
|
||||||
|
// ID should be implemented by the [ComponentBase] struct.
|
||||||
|
ID() string
|
||||||
|
|
||||||
// getBase returns the underlying ComponentBase object of this Component.
|
// getBase returns the underlying ComponentBase object of this Component.
|
||||||
// It is used internally during initialization
|
// It is used internally during initialization
|
||||||
getBase() *Base
|
getBase() *Base
|
||||||
|
|
@ -27,8 +31,8 @@ type Component interface {
|
||||||
|
|
||||||
// Base is embedded into every Component
|
// Base is embedded into every Component
|
||||||
type Base struct {
|
type Base struct {
|
||||||
name string // name is the name of this component
|
name, id string // name and id of this component
|
||||||
Still // the underlying still of the distillery
|
Still // the underlying still of the distillery
|
||||||
}
|
}
|
||||||
|
|
||||||
//lint:ignore U1000 used to implement the private methods of [Component]
|
//lint:ignore U1000 used to implement the private methods of [Component]
|
||||||
|
|
@ -41,7 +45,11 @@ func (cb *Base) getBase() *Base {
|
||||||
func Init(component Component, core Still) Component {
|
func Init(component Component, core Still) Component {
|
||||||
base := component.getBase() // pointer to a struct
|
base := component.getBase() // pointer to a struct
|
||||||
base.Still = core
|
base.Still = core
|
||||||
base.name = strings.ToLower(reflect.TypeOf(component).Elem().Name())
|
|
||||||
|
tp := reflect.TypeOf(component).Elem()
|
||||||
|
base.name = strings.ToLower(tp.Name())
|
||||||
|
base.id = tp.PkgPath() + "." + tp.Name()
|
||||||
|
|
||||||
return component
|
return component
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -49,6 +57,10 @@ func (cb Base) Name() string {
|
||||||
return cb.name
|
return cb.name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cb Base) ID() string {
|
||||||
|
return cb.id
|
||||||
|
}
|
||||||
|
|
||||||
// Still represents the central part of a distillery.
|
// Still represents the central part of a distillery.
|
||||||
// It is used inside the main distillery struct, as well as every component via [ComponentBase].
|
// It is used inside the main distillery struct, as well as every component via [ComponentBase].
|
||||||
type Still struct {
|
type Still struct {
|
||||||
|
|
|
||||||
|
|
@ -8,19 +8,21 @@ import (
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var errUnknownParser = errors.New("unknown parser")
|
||||||
|
|
||||||
// Parse parses the provided value with the parser.
|
// Parse parses the provided value with the parser.
|
||||||
func Parse(env environment.Environment, name, value string, vField reflect.Value) error {
|
func Parse(env environment.Environment, name, value string, vField reflect.Value) error {
|
||||||
|
|
||||||
// use the validator
|
// use the validator
|
||||||
parser, ok := knownParsers[strings.ToLower(name)]
|
parser, ok := knownParsers[strings.ToLower(name)]
|
||||||
if parser == nil || !ok {
|
if parser == nil || !ok {
|
||||||
return errors.Errorf("unknown parser %q", name)
|
return errUnknownParser
|
||||||
}
|
}
|
||||||
|
|
||||||
// get the parsed value
|
// get the parsed value
|
||||||
checked, err := parser(env, value)
|
checked, err := parser(env, value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "parser %s returned error", name)
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the value of the field
|
// set the value of the field
|
||||||
|
|
@ -34,7 +36,7 @@ func Parse(env environment.Environment, name, value string, vField reflect.Value
|
||||||
|
|
||||||
// capture any error
|
// capture any error
|
||||||
if errSet != nil {
|
if errSet != nil {
|
||||||
return errors.Errorf("parser %s: set returned %v", name, errSet)
|
return errors.Errorf("set returned %v", name, errSet)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue