package main import ( "flag" "log" "os" "strconv" "github.com/hashicorp/logutils" ) // getEnvString returns string from environment variable func getEnvString(env, def string) (val string) { //nolint:deadcode val = os.Getenv(env) if val == "" { return def } return } // getEnvInt returns int from environment variable func getEnvInt(env string, def int) (ret int) { val := os.Getenv(env) if val == "" { return def } ret, err := strconv.Atoi(val) if err != nil { log.Fatalf("[ERROR] Environment variable is not numeric: %v\n", env) } return } func setLogLevel(l int) { switch { case l <= 20: config.Log.SetMinLevel(logutils.LogLevel("ERROR")) case l > 20 && l <= 40: config.Log.SetMinLevel(logutils.LogLevel("WARNING")) case l > 40 && l <= 60: config.Log.SetMinLevel(logutils.LogLevel("INFO")) case l > 60 && l <= 80: config.Log.SetMinLevel(logutils.LogLevel("DEBUG")) case l > 80: config.Log.SetMinLevel(logutils.LogLevel("TRACE")) } } func initialize() { var tz string // log configuration flag.IntVar(&config.LogLevel, "log", getEnvInt("LOG_LEVEL", 0), "(LOG_LEVEL) Set the log verbosity.", ) // locality configuration flag.StringVar(&tz, "timezone", getEnvString("TIMEZONE", "America/Chicago"), "(TIMEZONE) Timezone for the sunrise/sunset calculation.", ) // local webserver configuration flag.IntVar(&config.WebSrvPort, "http-port", getEnvInt("HTTP_PORT", 8080), "(HTTP_PORT) Listen port for internal webserver") flag.StringVar(&config.WebSrvIP, "http-ip", getEnvString("HTTP_IP", "0.0.0.0"), "(HTTP_IP) Listen ip for internal webserver") flag.IntVar(&config.WebSrvIdleTimeout, "http-idle-timeout", getEnvInt("HTTP_IDLE_TIMEOUT", 2), "(HTTP_IDLE_TIMEOUT) Idle timeout for internal webserver") flag.IntVar(&config.WebSrvReadTimeout, "http-read-timeout", getEnvInt("HTTP_READ_TIMEOUT", 5), "(HTTP_READ_TIMEOUT) Read timeout for internal webserver") flag.IntVar(&config.WebSrvWriteTimeout, "http-write-timeout", getEnvInt("HTTP_WRITE_TIMEOUT", 2), "(HTTP_WRITE_TIMEOUT) Write timeout for internal webserver") flag.Parse() setLogLevel(config.LogLevel) log.SetOutput(config.Log) // print current configuration log.Printf("[DEBUG] configuration value set: LOG_LEVEL = %v\n", strconv.Itoa(config.LogLevel)) log.Printf("[DEBUG] configuration value set: HTTP_PORT = %v\n", strconv.Itoa(config.WebSrvPort)) log.Printf("[DEBUG] configuration value set: HTTP_IP = %v\n", config.WebSrvIP) log.Printf("[DEBUG] configuration value set: HTTP_IDLE_TIMEOUT = %v\n", strconv.Itoa(config.WebSrvIdleTimeout)) log.Printf("[DEBUG] configuration value set: HTTP_READ_TIMEOUT = %v\n", strconv.Itoa(config.WebSrvReadTimeout)) log.Printf("[DEBUG] configuration value set: HTTP_WRITE_TIMEOUT = %v\n", strconv.Itoa(config.WebSrvWriteTimeout)) log.Printf("[DEBUG] Initialization complete.") }