This commit is contained in:
Alireza Ahmadi 2026-06-26 22:42:15 +02:00
parent e0b6fae0b0
commit af3b994f00
2 changed files with 52 additions and 0 deletions

36
cmd/backup.go Normal file
View file

@ -0,0 +1,36 @@
package cmd
import (
"fmt"
"os"
"github.com/alireza0/s-ui/config"
"github.com/alireza0/s-ui/database"
)
func backupDb(output string, exclude string) {
if output == "" {
fmt.Println("backup failed: -output is required (use - for stdout)")
return
}
if err := database.InitDB(config.GetDBPath()); err != nil {
fmt.Println("backup failed:", err)
return
}
data, err := database.GetDb(exclude)
if err != nil {
fmt.Println("backup failed:", err)
return
}
if output == "-" {
if _, err := os.Stdout.Write(data); err != nil {
fmt.Fprintln(os.Stderr, "backup failed:", err)
}
return
}
if err := os.WriteFile(output, data, 0600); err != nil {
fmt.Println("backup failed:", err)
return
}
fmt.Println("backup saved to", output)
}

View file

@ -16,6 +16,7 @@ func ParseCmd() {
adminCmd := flag.NewFlagSet("admin", flag.ExitOnError)
settingCmd := flag.NewFlagSet("setting", flag.ExitOnError)
backupCmd := flag.NewFlagSet("backup", flag.ExitOnError)
var username string
var password string
@ -25,6 +26,10 @@ func ParseCmd() {
var subPath string
var reset bool
var show bool
var output string
var exclude string
backupCmd.StringVar(&output, "output", "", "backup output file path (use - for stdout)")
backupCmd.StringVar(&exclude, "exclude", "", "comma-separated tables to exclude: changes,stats")
settingCmd.BoolVar(&reset, "reset", false, "reset all settings")
settingCmd.BoolVar(&show, "show", false, "show current settings")
settingCmd.IntVar(&port, "port", 0, "set panel port")
@ -46,10 +51,13 @@ func ParseCmd() {
fmt.Println(" uri Show panel URI")
fmt.Println(" migrate migrate form older version")
fmt.Println(" setting set/reset/show settings")
fmt.Println(" backup create a database backup")
fmt.Println()
adminCmd.Usage()
fmt.Println()
settingCmd.Usage()
fmt.Println()
backupCmd.Usage()
}
flag.Parse()
@ -105,6 +113,14 @@ func ParseCmd() {
updateSetting(port, path, subPort, subPath)
showSetting()
}
case "backup":
err := backupCmd.Parse(os.Args[2:])
if err != nil {
fmt.Println(err)
return
}
backupDb(output, exclude)
default:
fmt.Println("Invalid subcommands")
flag.Usage()