initial commit
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"nodemaster/models"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
_ "nodemaster/routers"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
func main() {
|
||||
if len(os.Args) > 1 {
|
||||
switch os.Args[1] {
|
||||
case "scan":
|
||||
runScanCLI(os.Args[2:])
|
||||
return
|
||||
case "info":
|
||||
runInfoCLI()
|
||||
return
|
||||
}
|
||||
}
|
||||
if beego.BConfig.RunMode == "dev" {
|
||||
beego.BConfig.WebConfig.DirectoryIndex = true
|
||||
beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
|
||||
}
|
||||
models.StartScheduler()
|
||||
beego.Run()
|
||||
}
|
||||
|
||||
func runInfoCLI() {
|
||||
n := models.GetLocalNode()
|
||||
svcs := models.GetAllServices()
|
||||
nodes := models.GetAllRemoteNodes()
|
||||
fmt.Println("NodeMaster info")
|
||||
fmt.Println(strings.Repeat("─", 60))
|
||||
fmt.Printf("Config file : %s\n", models.ConfigPath())
|
||||
fmt.Printf("Hostname : %s\n", n.Hostname)
|
||||
if n.Description != "" {
|
||||
fmt.Printf("Description : %s\n", n.Description)
|
||||
}
|
||||
fmt.Printf("Services : %d registered\n", len(svcs))
|
||||
fmt.Printf("Remote nodes: %d registered\n", len(nodes))
|
||||
fmt.Printf("Updates : %d records\n", len(n.UpdateHistory))
|
||||
}
|
||||
|
||||
func runScanCLI(args []string) {
|
||||
var folder string
|
||||
jsonOutput := false
|
||||
for _, a := range args {
|
||||
switch {
|
||||
case a == "--json":
|
||||
jsonOutput = true
|
||||
case !strings.HasPrefix(a, "-"):
|
||||
folder = a
|
||||
}
|
||||
}
|
||||
|
||||
result := models.ScanAll(folder)
|
||||
|
||||
if jsonOutput {
|
||||
out, _ := json.MarshalIndent(result, "", " ")
|
||||
fmt.Println(string(out))
|
||||
if len(result.Errors) > 0 {
|
||||
os.Exit(1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Println("NodeMaster scan")
|
||||
fmt.Println(strings.Repeat("─", 60))
|
||||
fmt.Printf("Config file : %s\n\n", models.ConfigPath())
|
||||
|
||||
if len(result.ScannedPaths) == 0 {
|
||||
fmt.Println("No scan paths found (no /opt/compose, no ~/compose dirs)")
|
||||
} else {
|
||||
fmt.Println("Paths scanned:")
|
||||
for _, p := range result.ScannedPaths {
|
||||
fmt.Printf(" %s\n", p)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Printf("\nCompose files found: %d\n", result.Found)
|
||||
|
||||
if len(result.Created) > 0 {
|
||||
fmt.Printf("\nCreated (%d):\n", len(result.Created))
|
||||
for _, s := range result.Created {
|
||||
printScanEntry(s)
|
||||
}
|
||||
}
|
||||
|
||||
if len(result.Updated) > 0 {
|
||||
fmt.Printf("\nUpdated (%d):\n", len(result.Updated))
|
||||
for _, s := range result.Updated {
|
||||
printScanEntry(s)
|
||||
}
|
||||
}
|
||||
|
||||
if len(result.Created) == 0 && len(result.Updated) == 0 {
|
||||
fmt.Println("\nNo changes (all services already up to date)")
|
||||
}
|
||||
|
||||
if len(result.Errors) > 0 {
|
||||
fmt.Printf("\nErrors:\n")
|
||||
for _, e := range result.Errors {
|
||||
fmt.Fprintf(os.Stderr, " ! %s\n", e)
|
||||
}
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
func printScanEntry(s models.ServiceScanInfo) {
|
||||
status := s.Status
|
||||
if status == "" {
|
||||
status = "unknown"
|
||||
}
|
||||
backup := s.BackupFolder
|
||||
if backup == "" {
|
||||
backup = "(none deduced)"
|
||||
}
|
||||
fmt.Printf(" %-24s [%-7s] backup: %s\n", s.Name, status, backup)
|
||||
}
|
||||
Reference in New Issue
Block a user