package config import ( log "github.com/sirupsen/logrus" "os" "strconv" ) type Config struct { LogLevel string NumCPUs int CheckPeriod int TasksCfg TasksConfig GrpcCfg GrpcConfig } type GrpcConfig struct { ServerHost string ServerPort string ApiClientHost string ApiClientPort string SurugayaScrapperHost string SurugayaScrapperPort string } type TasksConfig struct { RetryCount int RetryMinutes int } func NewConfig() *Config { return &Config{ LogLevel: getEnv("APP_LOG_LEVEL", "debug"), NumCPUs: getEnvInt("APP_NUMCPUS", -1), CheckPeriod: getEnvInt("APP_CHECK_PERIOD", 6), GrpcCfg: GrpcConfig{ ServerHost: getEnv("GRPC_SERVER_HOST", "0.0.0.0"), ServerPort: getEnv("GRPC_SERVER_PORT", "9060"), ApiClientHost: getEnv("GRPC_API_CLIENT_HOST", "0.0.0.0"), ApiClientPort: getEnv("GRPC_API_CLIENT_PORT", "9050"), SurugayaScrapperHost: getEnv("GRPC_SURUGAYA_SCRAPPER_HOST", "0.0.0.0"), SurugayaScrapperPort: getEnv("GRPC_SURUGAYA_SCRAPPER_PORT", "9070"), }, TasksCfg: TasksConfig{ RetryCount: getEnvInt("TASK_RETRY_COUNT", 3), RetryMinutes: getEnvInt("TASK_RETRY_MINUTES", 5), }, } } func getEnv(key, fallback string) string { if value, ok := os.LookupEnv(key); ok { return value } return fallback } func getEnvInt(key string, fallback int) int { if value, ok := os.LookupEnv(key); ok { num, err := strconv.Atoi(value) if err != nil { log.WithField("default", -1).Warn("Config | Can't parse value as int") return fallback } return num } return fallback }