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 }