feat(importer): add Uptime Kuma backup converter with CLI and API

Convert Kuma monitorList/notificationList to go-upkeep Backup format.
Maps all monitor types (http, ping, port, dns, group), ntfy notifications
with auth, parent IDs, and alert assignments. Available via --import-kuma
flag and POST /api/import/kuma endpoint.
This commit is contained in:
2026-05-14 17:30:17 -04:00
parent a1f22af179
commit 6d92df4f46
3 changed files with 227 additions and 1 deletions
+16
View File
@@ -4,6 +4,7 @@ import (
"flag"
"fmt"
"go-upkeep/internal/cluster"
"go-upkeep/internal/importer"
"go-upkeep/internal/models"
"go-upkeep/internal/monitor"
"go-upkeep/internal/server"
@@ -75,6 +76,7 @@ func main() {
flagDBType := flag.String("db-type", dbType, "Database type")
flagDSN := flag.String("dsn", dbDSN, "Database DSN")
demo := flag.Bool("demo", false, "Seed demo data")
importKuma := flag.String("import-kuma", "", "Import Uptime Kuma backup JSON file")
flag.Parse()
var s store.Store
@@ -96,6 +98,20 @@ func main() {
seedDemoData(s)
}
if *importKuma != "" {
kb, err := importer.LoadKumaFile(*importKuma)
if err != nil {
fmt.Printf("Kuma import error: %v\n", err)
os.Exit(1)
}
backup := importer.ConvertKuma(kb)
if err := s.ImportData(backup); err != nil {
fmt.Printf("Import failed: %v\n", err)
os.Exit(1)
}
fmt.Printf("Imported %d monitors and %d alerts from Uptime Kuma v%s\n", len(backup.Sites), len(backup.Alerts), kb.Version)
}
monitor.StartEngine()
server.Start(server.ServerConfig{