package config import ( "fmt" "os" "time" ) type Config struct { HTTPAddr string WSAddr string MQTTHost string MQTTUser string MQTTPass string MQTTClientID string KafkaURL string DBHost string DBUser string DBPass string DBName string HTTPClientID string ClientSecret string HTTPUsername string HTTPPassword string HTTPAudience string ConfigPath string APIBaseURL string APIAuthURL string // TLSInsecureSkipVerify enables skipping TLS cert verification (e.g. for dev); default false. TLSInsecureSkipVerify bool } func getEnv(key, def string) string { if v := os.Getenv(key); v != "" { return v } return def } func getEnvBool(key string, defaultVal bool) bool { switch os.Getenv(key) { case "1", "true", "TRUE", "yes": return true case "0", "false", "FALSE", "no": return false } return defaultVal } func getEnvPanic(key string) string { if v := os.Getenv(key); v != "" { return v } panic(fmt.Sprintf("environment variable %s is not set", key)) } func Load() *Config { return &Config{ HTTPAddr: getEnv("HTTP_HOST_PATH", "0.0.0.0:1902"), WSAddr: getEnv("HTTPWS_HOST_PATH", "0.0.0.0:8088"), MQTTHost: getEnv("MQTT_HOST", "192.168.1.101"), MQTTUser: getEnvPanic("MQTT_USERNAME"), MQTTPass: getEnvPanic("MQTT_PASSWORD"), MQTTClientID: getEnvPanic("MQTT_CLIENT_ID"), KafkaURL: getEnv("KAFKA_URL", "127.0.0.1:9092"), DBHost: getEnv("DBHost", "127.0.0.1"), DBUser: getEnvPanic("DBUser"), DBPass: getEnvPanic("DBPass"), DBName: getEnv("DBName", "go_crud_db"), HTTPClientID: getEnvPanic("HTTPClientID"), ClientSecret: getEnvPanic("ClientSecret"), HTTPUsername: getEnvPanic("HTTPUsername"), HTTPPassword: getEnvPanic("HTTPPassword"), HTTPAudience: getEnvPanic("HTTPAudience"), ConfigPath: getEnv("CONFIG_PATH", "/app/cmd/server/config.json"), APIBaseURL: getEnv("API_BASE_URL", "https://10.251.0.30:5050"), TLSInsecureSkipVerify: getEnvBool("TLS_INSECURE_SKIP_VERIFY", false), } } func LoadDecoder() *Config { return &Config{ KafkaURL: getEnv("KAFKA_URL", "127.0.0.1:9092"), } } func LoadServer() *Config { return &Config{ KafkaURL: getEnv("KAFKA_URL", "127.0.0.1:9092"), HTTPAddr: getEnv("HTTP_HOST_PATH", "0.0.0.0:1902"), DBHost: getEnv("DBHost", "127.0.0.1"), DBUser: getEnvPanic("DBUser"), DBPass: getEnvPanic("DBPass"), DBName: getEnv("DBName", "go_crud_db"), HTTPClientID: getEnvPanic("HTTPClientID"), ClientSecret: getEnvPanic("ClientSecret"), HTTPUsername: getEnvPanic("HTTPUsername"), HTTPPassword: getEnvPanic("HTTPPassword"), HTTPAudience: getEnvPanic("HTTPAudience"), ConfigPath: getEnv("CONFIG_PATH", "/app/cmd/server/config.json"), APIBaseURL: getEnv("API_BASE_URL", "https://10.251.0.30:5050"), APIAuthURL: getEnv("API_AUTH_URL", "https://10.251.0.30:10002"), TLSInsecureSkipVerify: getEnvBool("TLS_INSECURE_SKIP_VERIFY", false), } } func LoadBridge() *Config { return &Config{ KafkaURL: getEnv("KAFKA_URL", "127.0.0.1:9092"), MQTTHost: getEnv("MQTT_HOST", "192.168.1.101"), MQTTUser: getEnvPanic("MQTT_USERNAME"), MQTTPass: getEnvPanic("MQTT_PASSWORD"), MQTTClientID: getEnvPanic("MQTT_CLIENT_ID"), } } func LoadLocation() *Config { return &Config{ KafkaURL: getEnv("KAFKA_URL", "127.0.0.1:9092"), TLSInsecureSkipVerify: getEnvBool("TLS_INSECURE_SKIP_VERIFY", false), } } const ( SMALL_CHANNEL_SIZE = 200 MEDIUM_CHANNEL_SIZE = 500 LARGE_CHANNEL_SIZE = 2000 SMALL_TICKER_INTERVAL = 1 * time.Second MEDIUM_TICKER_INTERVAL = 2 * time.Second LARGE_TICKER_INTERVAL = 5 * time.Second )