Files
dttmr-api/internal/config/config.go
T

56 lines
1.4 KiB
Go

package config
import (
"flag"
"log/slog"
"os"
"strconv"
)
type Config struct {
Environment string
Port int
OTLPEndpoint string
DatabaseURL string
}
func Load() *Config {
envFlag := flag.String("env", "development", "environment to use")
portFlag := flag.Int("port", 8080, "port to listen on")
otlpEndpointFlag := flag.String("otlp-endpoint", "localhost:4317", "otlp endpoint")
databaseUrlFlag := flag.String("database-url", "postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable&timezone=utc", "database connection string")
flag.Parse()
cfg := &Config{
Environment: *envFlag,
Port: *portFlag,
OTLPEndpoint: *otlpEndpointFlag,
DatabaseURL: *databaseUrlFlag,
}
assignStringFromEnv("DTTMR_ENVIRONMENT", &cfg.Environment)
assignIntFromEnv("DTTMR_PORT", &cfg.Port)
assignStringFromEnv("DTTMR_OTLP_ENDPOINT", &cfg.OTLPEndpoint)
assignStringFromEnv("DTTMR_DATABASE_URL", &cfg.DatabaseURL)
return cfg
}
func assignStringFromEnv(key string, target *string) {
if val, exists := os.LookupEnv(key); exists {
*target = val
}
}
func assignIntFromEnv(key string, target *int) {
if val, exists := os.LookupEnv(key); exists {
parsed, err := strconv.Atoi(val)
if err != nil {
slog.Error("failed to parse environment variable", slog.String("var", key), slog.Any("error", err))
} else {
*target = parsed
}
}
}