Implement new config_loader
This commit is contained in:
parent
4badddc9e6
commit
73c5509e9f
129
src/helpers/config_loader.go
Normal file
129
src/helpers/config_loader.go
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
package helpers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ConfigParameter struct {
|
||||||
|
EnvVarName string `json:"env_var_name"`
|
||||||
|
ConfFilePath string `json:"conf_file_path"`
|
||||||
|
DefaultValue string `json:"default_value"`
|
||||||
|
FailIfAbsent bool `json:"fail_if_absent"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Configuration struct {
|
||||||
|
VstpOn bool `json:"vstp_on"`
|
||||||
|
NrodUser string `json:"nrod_user"`
|
||||||
|
NrodPass string `json:"nrod_pass"`
|
||||||
|
DbHost string `json:"db_host"`
|
||||||
|
DbPass string `json:"db_pass"`
|
||||||
|
DbUser string `json:"db_user"`
|
||||||
|
DbPort string `json:"db_port"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadConfig() (*Configuration, error) {
|
||||||
|
configParams := map[string]ConfigParameter{
|
||||||
|
"vstp_on": {
|
||||||
|
EnvVarName: "OWL_VSTP_ON",
|
||||||
|
ConfFilePath: "/owl/conf/vstp/on",
|
||||||
|
DefaultValue: "on",
|
||||||
|
FailIfAbsent: false,
|
||||||
|
},
|
||||||
|
"nrod_user": {
|
||||||
|
EnvVarName: "OWL_NROD_USER",
|
||||||
|
ConfFilePath: "/owl/conf/nrod/user",
|
||||||
|
FailIfAbsent: true,
|
||||||
|
},
|
||||||
|
"nrod_pass": {
|
||||||
|
EnvVarName: "OWL_NROD_PASS",
|
||||||
|
ConfFilePath: "/owl/conf/nrod/pass",
|
||||||
|
FailIfAbsent: true,
|
||||||
|
},
|
||||||
|
"db_host": {
|
||||||
|
EnvVarName: "OWL_DB_HOST",
|
||||||
|
ConfFilePath: "/owl/conf/db/host",
|
||||||
|
DefaultValue: "localhost",
|
||||||
|
FailIfAbsent: false,
|
||||||
|
},
|
||||||
|
"db_port": {
|
||||||
|
EnvVarName: "OWL_DB_PORT",
|
||||||
|
ConfFilePath: "/owl/conf/db/port",
|
||||||
|
DefaultValue: "27017",
|
||||||
|
FailIfAbsent: false,
|
||||||
|
},
|
||||||
|
"db_user": {
|
||||||
|
EnvVarName: "OWL_DB_USER",
|
||||||
|
ConfFilePath: "/owl/conf/db/user",
|
||||||
|
FailIfAbsent: true,
|
||||||
|
},
|
||||||
|
"db_pass": {
|
||||||
|
EnvVarName: "OWL_DB_PASS",
|
||||||
|
ConfFilePath: "/owl/conf/db/pass",
|
||||||
|
FailIfAbsent: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
config := &Configuration{}
|
||||||
|
|
||||||
|
for key, param := range configParams {
|
||||||
|
if val, ok := os.LookupEnv(param.EnvVarName); ok {
|
||||||
|
config.setConfigValue(key, val)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if data, err := ioutil.ReadFile(param.ConfFilePath); err == nil {
|
||||||
|
config.setConfigValue(key, string(data))
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if param.DefaultValue != "" {
|
||||||
|
config.setConfigValue(key, param.DefaultValue)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if param.FailIfAbsent {
|
||||||
|
return nil, errors.New("Failed to load configuration: " + key + " is required but not set")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return config, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Configuration) setConfigValue(key, value string) {
|
||||||
|
switch key {
|
||||||
|
case "nrod_user":
|
||||||
|
c.NrodUser = value
|
||||||
|
case "nrod_pass":
|
||||||
|
c.NrodPass = value
|
||||||
|
case "db_host":
|
||||||
|
c.DbHost = value
|
||||||
|
case "db_port":
|
||||||
|
c.DbPort = value
|
||||||
|
case "db_user":
|
||||||
|
c.DbUser = value
|
||||||
|
case "db_pass":
|
||||||
|
c.DbPass = value
|
||||||
|
case "vstp_on":
|
||||||
|
if value == "on" {
|
||||||
|
c.VstpOn = true
|
||||||
|
} else {
|
||||||
|
c.VstpOn = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Configuration) PrintConfig() {
|
||||||
|
if os.Getenv("DEBUG") == "true" {
|
||||||
|
fmt.Println("Configuration:")
|
||||||
|
fmt.Println("VstpOn: ", c.VstpOn)
|
||||||
|
fmt.Println("NrodUser: ", c.NrodUser)
|
||||||
|
fmt.Println("NrodPass: ", c.NrodPass)
|
||||||
|
fmt.Println("DbHost: ", c.DbHost)
|
||||||
|
fmt.Println("DbUser: ", c.DbUser)
|
||||||
|
fmt.Println("DbPass: ", c.DbPass)
|
||||||
|
fmt.Println("DbPort: ", c.DbPort)
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"syscall"
|
"syscall"
|
||||||
@ -13,6 +14,14 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
|
cfg, err := helpers.LoadConfig()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error loading configuration", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
cfg.PrintConfig()
|
||||||
|
|
||||||
log.Msg.Info("Initialised OwlBoard timetable-mgr " + helpers.Version)
|
log.Msg.Info("Initialised OwlBoard timetable-mgr " + helpers.Version)
|
||||||
|
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
Loading…
Reference in New Issue
Block a user