53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
package core
|
|
|
|
import (
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// This struct represents and holds all configurable parameters
|
|
type Configuration struct {
|
|
Collectors struct {
|
|
TcpCollectorPort string `mapstructure:"porttcp"`
|
|
SerialCollectorPort string `mapstructure:"portserial"`
|
|
} `mapstructure:"Collectors"`
|
|
Webserver struct {
|
|
Port string `mapstructure:"port"`
|
|
} `mapstructure:"webserver"`
|
|
Pipeline struct {
|
|
PublishIntervalMs int `mapstructure:"publishintervalms"`
|
|
SyncUpdateIntervalMs int `mapstructure:"syncupdateintervalms"`
|
|
} `mapstructure:"pipeline"`
|
|
Debuglevel string `mapstructure:"debuglevel"`
|
|
}
|
|
|
|
// Call this function to load configuration from gpsconfig.yml
|
|
func ConfigurationFromFile() *Configuration {
|
|
viper.SetDefault("collectors.porttcp", ":3010")
|
|
viper.SetDefault("collectors.portserial", "/dev/tty.usbmodem14201")
|
|
viper.SetDefault("webserver.port", ":3011")
|
|
viper.SetDefault("pipeline.publishIntervalMs", 50)
|
|
viper.SetDefault("pipeline.syncUpdateIntervalMs", 494)
|
|
viper.SetDefault("debuglevel", "INFO")
|
|
|
|
viper.SetConfigName("gpsconfig") // name of config file (without extension)
|
|
viper.SetConfigType("yaml")
|
|
viper.AddConfigPath(".")
|
|
viper.AddConfigPath("./../../")
|
|
if err := viper.ReadInConfig(); err != nil {
|
|
logrus.Warn("couldn't find config file. using standard configuration")
|
|
}
|
|
|
|
c := Configuration{}
|
|
if err := viper.Unmarshal(&c); err != nil {
|
|
logrus.Debug("couldn't load config...")
|
|
logrus.Error(err)
|
|
}
|
|
lvl, err := logrus.ParseLevel(c.Debuglevel)
|
|
if err != nil {
|
|
logrus.Error(err)
|
|
}
|
|
logrus.SetLevel(lvl)
|
|
return &c
|
|
}
|