Change ApplyEnvVars strategy for all config components

Get jsonConfig from Config, apply env vars to it, load jsonConfig
back into Config.

License: MIT
Signed-off-by: Robert Ignat <robert.ignat91@gmail.com>
This commit is contained in:
Robert Ignat 2019-02-15 19:07:20 +02:00
parent 47252f8e62
commit 168cf76224
12 changed files with 139 additions and 55 deletions

View File

@ -157,9 +157,12 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &jsonConfig{} jcfg, err := cfg.toJSONConfig()
if err != nil {
return err
}
err := envconfig.Process(envConfigKey, jcfg) err = envconfig.Process(envConfigKey, jcfg)
if err != nil { if err != nil {
return err return err
} }
@ -262,6 +265,16 @@ func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error {
// ToJSON generates a human-friendly JSON representation of this Config. // ToJSON generates a human-friendly JSON representation of this Config.
func (cfg *Config) ToJSON() (raw []byte, err error) { func (cfg *Config) ToJSON() (raw []byte, err error) {
jcfg, err := cfg.toJSONConfig()
if err != nil {
return
}
raw, err = config.DefaultJSONMarshal(jcfg)
return
}
func (cfg *Config) toJSONConfig() (jcfg *jsonConfig, err error) {
// Multiaddress String() may panic // Multiaddress String() may panic
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
@ -269,7 +282,7 @@ func (cfg *Config) ToJSON() (raw []byte, err error) {
} }
}() }()
jcfg := &jsonConfig{} jcfg = &jsonConfig{}
// Set all configuration fields // Set all configuration fields
jcfg.ListenMultiaddress = cfg.ListenAddr.String() jcfg.ListenMultiaddress = cfg.ListenAddr.String()
@ -284,6 +297,5 @@ func (cfg *Config) ToJSON() (raw []byte, err error) {
jcfg.ExtractHeadersPath = cfg.ExtractHeadersPath jcfg.ExtractHeadersPath = cfg.ExtractHeadersPath
jcfg.ExtractHeadersTTL = cfg.ExtractHeadersTTL.String() jcfg.ExtractHeadersTTL = cfg.ExtractHeadersTTL.String()
raw, err = config.DefaultJSONMarshal(jcfg)
return return
} }

View File

@ -184,9 +184,12 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &jsonConfig{} jcfg, err := cfg.toJSONConfig()
if err != nil {
return err
}
err := envconfig.Process(envConfigKey, jcfg) err = envconfig.Process(envConfigKey, jcfg)
if err != nil { if err != nil {
return err return err
} }
@ -372,6 +375,16 @@ func (cfg *Config) loadLibp2pOptions(jcfg *jsonConfig) error {
// ToJSON produce a human-friendly JSON representation of the Config // ToJSON produce a human-friendly JSON representation of the Config
// object. // object.
func (cfg *Config) ToJSON() (raw []byte, err error) { func (cfg *Config) ToJSON() (raw []byte, err error) {
jcfg, err := cfg.toJSONConfig()
if err != nil {
return
}
raw, err = config.DefaultJSONMarshal(jcfg)
return
}
func (cfg *Config) toJSONConfig() (jcfg *jsonConfig, err error) {
// Multiaddress String() may panic // Multiaddress String() may panic
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
@ -379,7 +392,7 @@ func (cfg *Config) ToJSON() (raw []byte, err error) {
} }
}() }()
jcfg := &jsonConfig{ jcfg = &jsonConfig{
HTTPListenMultiaddress: cfg.HTTPListenAddr.String(), HTTPListenMultiaddress: cfg.HTTPListenAddr.String(),
SSLCertFile: cfg.pathSSLCertFile, SSLCertFile: cfg.pathSSLCertFile,
SSLKeyFile: cfg.pathSSLKeyFile, SSLKeyFile: cfg.pathSSLKeyFile,
@ -411,7 +424,6 @@ func (cfg *Config) ToJSON() (raw []byte, err error) {
jcfg.Libp2pListenMultiaddress = cfg.Libp2pListenAddr.String() jcfg.Libp2pListenMultiaddress = cfg.Libp2pListenAddr.String()
} }
raw, err = config.DefaultJSONMarshal(jcfg)
return return
} }

View File

@ -189,9 +189,12 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &configJSON{} jcfg, err := cfg.toConfigJSON()
if err != nil {
return err
}
err := envconfig.Process(cfg.ConfigKey(), jcfg) err = envconfig.Process(cfg.ConfigKey(), jcfg)
if err != nil { if err != nil {
return err return err
} }
@ -386,6 +389,16 @@ func (cfg *Config) applyConfigJSON(jcfg *configJSON) error {
// ToJSON generates a human-friendly version of Config. // ToJSON generates a human-friendly version of Config.
func (cfg *Config) ToJSON() (raw []byte, err error) { func (cfg *Config) ToJSON() (raw []byte, err error) {
jcfg, err := cfg.toConfigJSON()
if err != nil {
return
}
raw, err = json.MarshalIndent(jcfg, "", " ")
return
}
func (cfg *Config) toConfigJSON() (jcfg *configJSON, err error) {
// Multiaddress String() may panic // Multiaddress String() may panic
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
@ -393,7 +406,7 @@ func (cfg *Config) ToJSON() (raw []byte, err error) {
} }
}() }()
jcfg := &configJSON{} jcfg = &configJSON{}
// Private Key // Private Key
pkeyBytes, err := cfg.PrivateKey.Bytes() pkeyBytes, err := cfg.PrivateKey.Bytes()
@ -418,7 +431,6 @@ func (cfg *Config) ToJSON() (raw []byte, err error) {
jcfg.DisableRepinning = cfg.DisableRepinning jcfg.DisableRepinning = cfg.DisableRepinning
jcfg.PeerstoreFile = cfg.PeerstoreFile jcfg.PeerstoreFile = cfg.PeerstoreFile
raw, err = json.MarshalIndent(jcfg, "", " ")
return return
} }

View File

@ -236,7 +236,13 @@ func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error {
// ToJSON returns the pretty JSON representation of a Config. // ToJSON returns the pretty JSON representation of a Config.
func (cfg *Config) ToJSON() ([]byte, error) { func (cfg *Config) ToJSON() ([]byte, error) {
jcfg := &jsonConfig{ jcfg := cfg.toJSONConfig()
return config.DefaultJSONMarshal(jcfg)
}
func (cfg *Config) toJSONConfig() *jsonConfig {
return &jsonConfig{
DataFolder: cfg.DataFolder, DataFolder: cfg.DataFolder,
InitPeerset: api.PeersToStrings(cfg.InitPeerset), InitPeerset: api.PeersToStrings(cfg.InitPeerset),
WaitForLeaderTimeout: cfg.WaitForLeaderTimeout.String(), WaitForLeaderTimeout: cfg.WaitForLeaderTimeout.String(),
@ -253,8 +259,6 @@ func (cfg *Config) ToJSON() ([]byte, error) {
SnapshotThreshold: cfg.RaftConfig.SnapshotThreshold, SnapshotThreshold: cfg.RaftConfig.SnapshotThreshold,
LeaderLeaseTimeout: cfg.RaftConfig.LeaderLeaseTimeout.String(), LeaderLeaseTimeout: cfg.RaftConfig.LeaderLeaseTimeout.String(),
} }
return config.DefaultJSONMarshal(jcfg)
} }
// Default initializes this configuration with working defaults. // Default initializes this configuration with working defaults.
@ -281,7 +285,7 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
err := envconfig.Process(envConfigKey, jcfg) err := envconfig.Process(envConfigKey, jcfg)
if err != nil { if err != nil {

View File

@ -58,7 +58,7 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
err := envconfig.Process(envConfigKey, jcfg) err := envconfig.Process(envConfigKey, jcfg)
if err != nil { if err != nil {
@ -115,11 +115,15 @@ func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error {
// ToJSON generates a JSON-formatted human-friendly representation of this // ToJSON generates a JSON-formatted human-friendly representation of this
// Config. // Config.
func (cfg *Config) ToJSON() (raw []byte, err error) { func (cfg *Config) ToJSON() (raw []byte, err error) {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
jcfg.MetricTTL = cfg.MetricTTL.String()
jcfg.Type = cfg.Type.String()
raw, err = config.DefaultJSONMarshal(jcfg) raw, err = config.DefaultJSONMarshal(jcfg)
return return
} }
func (cfg *Config) toJSONConfig() *jsonConfig {
return &jsonConfig{
MetricTTL: cfg.MetricTTL.String(),
Type: cfg.Type.String(),
}
}

View File

@ -43,7 +43,7 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
err := envconfig.Process(envConfigKey, jcfg) err := envconfig.Process(envConfigKey, jcfg)
if err != nil { if err != nil {
@ -85,9 +85,13 @@ func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error {
// ToJSON generates a human-friendly JSON representation of this Config. // ToJSON generates a human-friendly JSON representation of this Config.
func (cfg *Config) ToJSON() ([]byte, error) { func (cfg *Config) ToJSON() ([]byte, error) {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
jcfg.MetricTTL = cfg.MetricTTL.String()
return config.DefaultJSONMarshal(jcfg) return config.DefaultJSONMarshal(jcfg)
} }
func (cfg *Config) toJSONConfig() *jsonConfig {
return &jsonConfig{
MetricTTL: cfg.MetricTTL.String(),
}
}

View File

@ -95,9 +95,12 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &jsonConfig{} jcfg, err := cfg.toJSONConfig()
if err != nil {
return err
}
err := envconfig.Process(envConfigKey, jcfg) err = envconfig.Process(envConfigKey, jcfg)
if err != nil { if err != nil {
return err return err
} }
@ -178,6 +181,16 @@ func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error {
// ToJSON generates a human-friendly JSON representation of this Config. // ToJSON generates a human-friendly JSON representation of this Config.
func (cfg *Config) ToJSON() (raw []byte, err error) { func (cfg *Config) ToJSON() (raw []byte, err error) {
jcfg, err := cfg.toJSONConfig()
if err != nil {
return
}
raw, err = config.DefaultJSONMarshal(jcfg)
return
}
func (cfg *Config) toJSONConfig() (jcfg *jsonConfig, err error) {
// Multiaddress String() may panic // Multiaddress String() may panic
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
@ -185,7 +198,7 @@ func (cfg *Config) ToJSON() (raw []byte, err error) {
} }
}() }()
jcfg := &jsonConfig{} jcfg = &jsonConfig{}
// Set all configuration fields // Set all configuration fields
jcfg.NodeMultiaddress = cfg.NodeAddr.String() jcfg.NodeMultiaddress = cfg.NodeAddr.String()
@ -195,6 +208,5 @@ func (cfg *Config) ToJSON() (raw []byte, err error) {
jcfg.PinTimeout = cfg.PinTimeout.String() jcfg.PinTimeout = cfg.PinTimeout.String()
jcfg.UnpinTimeout = cfg.UnpinTimeout.String() jcfg.UnpinTimeout = cfg.UnpinTimeout.String()
raw, err = config.DefaultJSONMarshal(jcfg)
return return
} }

View File

@ -42,7 +42,7 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
err := envconfig.Process(envConfigKey, jcfg) err := envconfig.Process(envConfigKey, jcfg)
if err != nil { if err != nil {
@ -85,9 +85,13 @@ func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error {
// ToJSON generates a human-friendly JSON representation of this Config. // ToJSON generates a human-friendly JSON representation of this Config.
func (cfg *Config) ToJSON() ([]byte, error) { func (cfg *Config) ToJSON() ([]byte, error) {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
jcfg.CheckInterval = cfg.CheckInterval.String()
return json.MarshalIndent(jcfg, "", " ") return json.MarshalIndent(jcfg, "", " ")
} }
func (cfg *Config) toJSONConfig() *jsonConfig {
return &jsonConfig{
CheckInterval: cfg.CheckInterval.String(),
}
}

View File

@ -42,7 +42,7 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
err := envconfig.Process(envConfigKey, jcfg) err := envconfig.Process(envConfigKey, jcfg)
if err != nil { if err != nil {
@ -85,9 +85,13 @@ func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error {
// ToJSON generates a human-friendly JSON representation of this Config. // ToJSON generates a human-friendly JSON representation of this Config.
func (cfg *Config) ToJSON() ([]byte, error) { func (cfg *Config) ToJSON() ([]byte, error) {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
jcfg.CheckInterval = cfg.CheckInterval.String()
return json.MarshalIndent(jcfg, "", " ") return json.MarshalIndent(jcfg, "", " ")
} }
func (cfg *Config) toJSONConfig() *jsonConfig {
return &jsonConfig{
CheckInterval: cfg.CheckInterval.String(),
}
}

View File

@ -62,7 +62,7 @@ func (cfg *MetricsConfig) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *MetricsConfig) ApplyEnvVars() error { func (cfg *MetricsConfig) ApplyEnvVars() error {
jcfg := &jsonMetricsConfig{} jcfg := cfg.toJSONConfig()
err := envconfig.Process(metricsEnvConfigKey, jcfg) err := envconfig.Process(metricsEnvConfigKey, jcfg)
if err != nil { if err != nil {
@ -130,13 +130,17 @@ func (cfg *MetricsConfig) loadMetricsOptions(jcfg *jsonMetricsConfig) error {
// ToJSON generates a human-friendly JSON representation of this Config. // ToJSON generates a human-friendly JSON representation of this Config.
func (cfg *MetricsConfig) ToJSON() ([]byte, error) { func (cfg *MetricsConfig) ToJSON() ([]byte, error) {
jcfg := &jsonMetricsConfig{ jcfg := cfg.toJSONConfig()
return config.DefaultJSONMarshal(jcfg)
}
func (cfg *MetricsConfig) toJSONConfig() *jsonMetricsConfig {
return &jsonMetricsConfig{
EnableStats: cfg.EnableStats, EnableStats: cfg.EnableStats,
PrometheusEndpoint: cfg.PrometheusEndpoint.String(), PrometheusEndpoint: cfg.PrometheusEndpoint.String(),
ReportingInterval: cfg.ReportingInterval.String(), ReportingInterval: cfg.ReportingInterval.String(),
} }
return config.DefaultJSONMarshal(jcfg)
} }
// TracingConfig configures tracing. // TracingConfig configures tracing.
@ -174,7 +178,7 @@ func (cfg *TracingConfig) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *TracingConfig) ApplyEnvVars() error { func (cfg *TracingConfig) ApplyEnvVars() error {
jcfg := &jsonTracingConfig{} jcfg := cfg.toJSONConfig()
err := envconfig.Process(tracingEnvConfigKey, jcfg) err := envconfig.Process(tracingEnvConfigKey, jcfg)
if err != nil { if err != nil {
@ -237,12 +241,16 @@ func (cfg *TracingConfig) loadTracingOptions(jcfg *jsonTracingConfig) error {
// ToJSON generates a human-friendly JSON representation of this Config. // ToJSON generates a human-friendly JSON representation of this Config.
func (cfg *TracingConfig) ToJSON() ([]byte, error) { func (cfg *TracingConfig) ToJSON() ([]byte, error) {
jcfg := &jsonTracingConfig{ jcfg := cfg.toJSONConfig()
return config.DefaultJSONMarshal(jcfg)
}
func (cfg *TracingConfig) toJSONConfig() *jsonTracingConfig {
return &jsonTracingConfig{
EnableTracing: cfg.EnableTracing, EnableTracing: cfg.EnableTracing,
JaegerAgentEndpoint: cfg.JaegerAgentEndpoint.String(), JaegerAgentEndpoint: cfg.JaegerAgentEndpoint.String(),
SamplingProb: cfg.SamplingProb, SamplingProb: cfg.SamplingProb,
ServiceName: cfg.ServiceName, ServiceName: cfg.ServiceName,
} }
return config.DefaultJSONMarshal(jcfg)
} }

View File

@ -50,7 +50,7 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
err := envconfig.Process(envConfigKey, jcfg) err := envconfig.Process(envConfigKey, jcfg)
if err != nil { if err != nil {
@ -97,10 +97,14 @@ func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error {
// ToJSON generates a human-friendly JSON representation of this Config. // ToJSON generates a human-friendly JSON representation of this Config.
func (cfg *Config) ToJSON() ([]byte, error) { func (cfg *Config) ToJSON() ([]byte, error) {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
jcfg.MaxPinQueueSize = cfg.MaxPinQueueSize
jcfg.ConcurrentPins = cfg.ConcurrentPins
return config.DefaultJSONMarshal(jcfg) return config.DefaultJSONMarshal(jcfg)
} }
func (cfg *Config) toJSONConfig() *jsonConfig {
return &jsonConfig{
MaxPinQueueSize: cfg.MaxPinQueueSize,
ConcurrentPins: cfg.ConcurrentPins,
}
}

View File

@ -50,7 +50,7 @@ func (cfg *Config) Default() error {
// ApplyEnvVars fills in any Config fields found // ApplyEnvVars fills in any Config fields found
// as environment variables. // as environment variables.
func (cfg *Config) ApplyEnvVars() error { func (cfg *Config) ApplyEnvVars() error {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
err := envconfig.Process(envConfigKey, jcfg) err := envconfig.Process(envConfigKey, jcfg)
if err != nil { if err != nil {
@ -97,10 +97,14 @@ func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error {
// ToJSON generates a human-friendly JSON representation of this Config. // ToJSON generates a human-friendly JSON representation of this Config.
func (cfg *Config) ToJSON() ([]byte, error) { func (cfg *Config) ToJSON() ([]byte, error) {
jcfg := &jsonConfig{} jcfg := cfg.toJSONConfig()
jcfg.MaxPinQueueSize = cfg.MaxPinQueueSize
jcfg.ConcurrentPins = cfg.ConcurrentPins
return config.DefaultJSONMarshal(jcfg) return config.DefaultJSONMarshal(jcfg)
} }
func (cfg *Config) toJSONConfig() *jsonConfig {
return &jsonConfig{
MaxPinQueueSize: cfg.MaxPinQueueSize,
ConcurrentPins: cfg.ConcurrentPins,
}
}