84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type Config struct {
|
|
Addr string
|
|
DataPath string
|
|
PollInterval time.Duration
|
|
LokiURL string
|
|
LokiTenantID string
|
|
LokiUsername string
|
|
LokiPassword string
|
|
DryRunActions bool
|
|
AnalysisProvider string
|
|
AnalysisEndpoint string
|
|
AnalysisToken string
|
|
OllamaURL string
|
|
OllamaModel string
|
|
AuthUsername string
|
|
AuthPassword string
|
|
}
|
|
|
|
func Load() Config {
|
|
return Config{
|
|
Addr: env("LOG_GUARDIAN_ADDR", ":8080"),
|
|
DataPath: env("LOG_GUARDIAN_DATA_PATH", "/data/config.json"),
|
|
PollInterval: durationEnv("LOG_GUARDIAN_POLL_INTERVAL", 1*time.Minute),
|
|
LokiURL: trimRightSlash(env("LOKI_URL", "http://loki:3100")),
|
|
LokiTenantID: env("LOKI_TENANT_ID", ""),
|
|
LokiUsername: env("LOKI_USERNAME", ""),
|
|
LokiPassword: env("LOKI_PASSWORD", ""),
|
|
DryRunActions: boolEnv("LOG_GUARDIAN_DRY_RUN_ACTIONS", true),
|
|
AnalysisProvider: env("LOG_GUARDIAN_ANALYSIS_PROVIDER", "none"),
|
|
AnalysisEndpoint: env("LOG_GUARDIAN_ANALYSIS_ENDPOINT", ""),
|
|
AnalysisToken: env("LOG_GUARDIAN_ANALYSIS_TOKEN", ""),
|
|
OllamaURL: trimRightSlash(env("LOG_GUARDIAN_OLLAMA_URL", "http://ollama:11434")),
|
|
OllamaModel: env("LOG_GUARDIAN_OLLAMA_MODEL", "llama3.1"),
|
|
AuthUsername: env("LOG_GUARDIAN_AUTH_USERNAME", ""),
|
|
AuthPassword: env("LOG_GUARDIAN_AUTH_PASSWORD", ""),
|
|
}
|
|
}
|
|
|
|
func env(key, fallback string) string {
|
|
if value := os.Getenv(key); value != "" {
|
|
return value
|
|
}
|
|
return fallback
|
|
}
|
|
|
|
func boolEnv(key string, fallback bool) bool {
|
|
value := os.Getenv(key)
|
|
if value == "" {
|
|
return fallback
|
|
}
|
|
parsed, err := strconv.ParseBool(value)
|
|
if err != nil {
|
|
return fallback
|
|
}
|
|
return parsed
|
|
}
|
|
|
|
func durationEnv(key string, fallback time.Duration) time.Duration {
|
|
value := os.Getenv(key)
|
|
if value == "" {
|
|
return fallback
|
|
}
|
|
parsed, err := time.ParseDuration(value)
|
|
if err != nil {
|
|
return fallback
|
|
}
|
|
return parsed
|
|
}
|
|
|
|
func trimRightSlash(value string) string {
|
|
for len(value) > 1 && value[len(value)-1] == '/' {
|
|
value = value[:len(value)-1]
|
|
}
|
|
return value
|
|
}
|