v0.5.0: Backup bugfixes + monitoring page with metrics store
- Fix "Helyi mentés" showing "–" after controller restart by synthesizing
LastBackup from snapshot history and LastDBDump from dump files on disk
- New monitoring page (/monitoring) with system info, metrics charts, and
container resource overview
- SQLite metrics store (modernc.org/sqlite, pure Go, no CGO) with 60s
collection interval and 30-day auto-prune
- REST API endpoints: /api/metrics/system, /api/metrics/containers/summary,
/api/metrics/containers/{name}, /api/metrics/sysinfo
- Chart.js 4.4.7 embedded locally for offline environments
- System info provider reads hostname, OS, kernel, CPU, uptime from /proc
- Docker compose updated with /etc/os-release host mount
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,7 @@ import (
|
||||
"gitea.dooplex.hu/admin/felhom-controller/internal/api"
|
||||
"gitea.dooplex.hu/admin/felhom-controller/internal/backup"
|
||||
"gitea.dooplex.hu/admin/felhom-controller/internal/config"
|
||||
"gitea.dooplex.hu/admin/felhom-controller/internal/metrics"
|
||||
"gitea.dooplex.hu/admin/felhom-controller/internal/monitor"
|
||||
"gitea.dooplex.hu/admin/felhom-controller/internal/scheduler"
|
||||
"gitea.dooplex.hu/admin/felhom-controller/internal/stacks"
|
||||
@@ -74,6 +75,23 @@ func main() {
|
||||
cpuCollector.Start(ctx)
|
||||
defer cpuCollector.Stop()
|
||||
|
||||
// --- Initialize metrics store + collector ---
|
||||
metricsDBPath := "/opt/docker/felhom-controller/data/metrics.db"
|
||||
metricsStore, err := metrics.NewMetricsStore(metricsDBPath, logger)
|
||||
if err != nil {
|
||||
logger.Printf("[WARN] Failed to initialize metrics store: %v — monitoring disabled", err)
|
||||
} else {
|
||||
logger.Printf("[INFO] Metrics store opened at %s", metricsDBPath)
|
||||
}
|
||||
|
||||
if metricsStore != nil {
|
||||
defer metricsStore.Close()
|
||||
metricsCollector := metrics.NewMetricsCollector(metricsStore, cpuCollector, cfg.Paths.HDDPath, logger)
|
||||
metricsCollector.Start(ctx)
|
||||
defer metricsCollector.Stop()
|
||||
logger.Println("[INFO] Metrics collector started (60s interval)")
|
||||
}
|
||||
|
||||
// --- Initialize health pinger ---
|
||||
pinger := monitor.NewPinger(&cfg.Monitoring, logger)
|
||||
|
||||
@@ -135,6 +153,18 @@ func main() {
|
||||
})
|
||||
}
|
||||
|
||||
// Metrics prune — daily at 04:00
|
||||
if metricsStore != nil {
|
||||
sched.Daily("metrics-prune", "04:00", func(ctx context.Context) error {
|
||||
deleted, err := metricsStore.Prune(30 * 24 * time.Hour)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
logger.Printf("[INFO] Pruned %d old metric rows", deleted)
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
sched.Start(ctx)
|
||||
defer sched.Stop()
|
||||
|
||||
@@ -148,7 +178,7 @@ func main() {
|
||||
}
|
||||
|
||||
// --- Initialize API router ---
|
||||
apiRouter := api.NewRouter(cfg, stackMgr, syncer, cpuCollector, backupMgr, logger)
|
||||
apiRouter := api.NewRouter(cfg, stackMgr, syncer, cpuCollector, backupMgr, metricsStore, logger)
|
||||
|
||||
// --- Initialize web server ---
|
||||
webServer := web.NewServer(cfg, stackMgr, cpuCollector, backupMgr, sched, logger, Version)
|
||||
|
||||
Reference in New Issue
Block a user