64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package platform
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
DatabaseModePostgres = "postgres"
|
|
DatabaseModeMemory = "memory"
|
|
)
|
|
|
|
type Config struct {
|
|
HTTPAddress string
|
|
DatabaseMode string
|
|
DatabaseURL string
|
|
StaticDir string
|
|
LogLevelName string
|
|
}
|
|
|
|
func LoadConfig() (Config, error) {
|
|
cfg := Config{
|
|
HTTPAddress: valueOrDefault("SENSE_HTTP_ADDRESS", "127.0.0.1:18080"),
|
|
DatabaseMode: strings.ToLower(valueOrDefault("SENSE_DATABASE_MODE", DatabaseModePostgres)),
|
|
DatabaseURL: strings.TrimSpace(os.Getenv("SENSE_DATABASE_URL")),
|
|
StaticDir: strings.TrimSpace(os.Getenv("SENSE_UI_STATIC_DIR")),
|
|
LogLevelName: strings.ToLower(valueOrDefault("SENSE_LOG_LEVEL", "info")),
|
|
}
|
|
|
|
switch cfg.DatabaseMode {
|
|
case DatabaseModePostgres:
|
|
if cfg.DatabaseURL == "" {
|
|
return Config{}, fmt.Errorf("SENSE_DATABASE_URL is required when SENSE_DATABASE_MODE=postgres")
|
|
}
|
|
case DatabaseModeMemory:
|
|
// Explicitly limited to local smoke tests and automated tests.
|
|
default:
|
|
return Config{}, fmt.Errorf("unsupported SENSE_DATABASE_MODE %q", cfg.DatabaseMode)
|
|
}
|
|
return cfg, nil
|
|
}
|
|
|
|
func (c Config) LogLevel() slog.Level {
|
|
switch c.LogLevelName {
|
|
case "debug":
|
|
return slog.LevelDebug
|
|
case "warn":
|
|
return slog.LevelWarn
|
|
case "error":
|
|
return slog.LevelError
|
|
default:
|
|
return slog.LevelInfo
|
|
}
|
|
}
|
|
|
|
func valueOrDefault(key, fallback string) string {
|
|
if value := strings.TrimSpace(os.Getenv(key)); value != "" {
|
|
return value
|
|
}
|
|
return fallback
|
|
}
|