cli/pkg/lab/config.go
Claude 50da0adcb7 feat: integrate lab dashboard as core lab serve
Port the standalone lab dashboard (lab.lthn.io) into the core CLI as
pkg/lab/ with collectors, handlers, and HTML templates. The dashboard
monitors machines, Docker containers, Forgejo, HuggingFace models,
training runs, and InfluxDB metrics with SSE live updates.

New command: core lab serve --bind :8080

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 05:53:52 +00:00

84 lines
1.8 KiB
Go

package lab
import (
"os"
"strconv"
)
type Config struct {
Addr string
PrometheusURL string
PrometheusInterval int
ForgeURL string
ForgeToken string
ForgeInterval int
HFAuthor string
HFInterval int
M3Host string
M3User string
M3SSHKey string
M3APIURL string
M3Interval int
TrainingDataDir string
TrainingInterval int
DockerInterval int
InfluxURL string
InfluxToken string
InfluxDB string
InfluxInterval int
}
func LoadConfig() *Config {
return &Config{
Addr: env("ADDR", ":8080"),
PrometheusURL: env("PROMETHEUS_URL", "http://prometheus:9090"),
PrometheusInterval: envInt("PROMETHEUS_INTERVAL", 15),
ForgeURL: env("FORGE_URL", "https://forge.lthn.io"),
ForgeToken: env("FORGE_TOKEN", ""),
ForgeInterval: envInt("FORGE_INTERVAL", 60),
HFAuthor: env("HF_AUTHOR", "lthn"),
HFInterval: envInt("HF_INTERVAL", 300),
M3Host: env("M3_HOST", "10.69.69.108"),
M3User: env("M3_USER", "claude"),
M3SSHKey: env("M3_SSH_KEY", "/root/.ssh/id_ed25519"),
M3APIURL: env("M3_API_URL", "http://10.69.69.108:9800"),
M3Interval: envInt("M3_INTERVAL", 30),
TrainingDataDir: env("TRAINING_DATA_DIR", "/data/training"),
TrainingInterval: envInt("TRAINING_INTERVAL", 60),
DockerInterval: envInt("DOCKER_INTERVAL", 30),
InfluxURL: env("INFLUX_URL", "http://localhost:8181"),
InfluxToken: env("INFLUX_TOKEN", ""),
InfluxDB: env("INFLUX_DB", "training"),
InfluxInterval: envInt("INFLUX_INTERVAL", 60),
}
}
func env(key, fallback string) string {
if v := os.Getenv(key); v != "" {
return v
}
return fallback
}
func envInt(key string, fallback int) int {
if v := os.Getenv(key); v != "" {
if n, err := strconv.Atoi(v); err == nil {
return n
}
}
return fallback
}