Files
dbbackup/cmd/engine.go
Alexander Renz 3e41d88445
All checks were successful
CI/CD / Test (push) Successful in 1m13s
CI/CD / Lint (push) Successful in 1m20s
CI/CD / Build & Release (push) Successful in 3m10s
v3.42.11: Replace all Unicode emojis with ASCII text
- Replace all emoji characters with ASCII equivalents throughout codebase
- Replace Unicode box-drawing characters (═║╔╗╚╝━─) with ASCII (+|-=)
- Replace checkmarks (✓✗) with [OK]/[FAIL] markers
- 59 files updated, 741 lines changed
- Improves terminal compatibility and reduces visual noise
2026-01-08 09:42:01 +01:00

111 lines
2.8 KiB
Go

package cmd
import (
"context"
"fmt"
"strings"
"dbbackup/internal/engine"
"github.com/spf13/cobra"
)
var engineCmd = &cobra.Command{
Use: "engine",
Short: "Backup engine management commands",
Long: `Commands for managing and selecting backup engines.
Available engines:
- mysqldump: Traditional mysqldump backup (all MySQL versions)
- clone: MySQL Clone Plugin (MySQL 8.0.17+)
- snapshot: Filesystem snapshot (LVM/ZFS/Btrfs)
- streaming: Direct cloud streaming backup`,
}
var engineListCmd = &cobra.Command{
Use: "list",
Short: "List available backup engines",
Long: "List all registered backup engines and their availability status",
RunE: runEngineList,
}
var engineInfoCmd = &cobra.Command{
Use: "info [engine-name]",
Short: "Show detailed information about an engine",
Long: "Display detailed information about a specific backup engine",
Args: cobra.ExactArgs(1),
RunE: runEngineInfo,
}
func init() {
rootCmd.AddCommand(engineCmd)
engineCmd.AddCommand(engineListCmd)
engineCmd.AddCommand(engineInfoCmd)
}
func runEngineList(cmd *cobra.Command, args []string) error {
ctx := context.Background()
registry := engine.DefaultRegistry
fmt.Println("Available Backup Engines:")
fmt.Println(strings.Repeat("-", 70))
for _, info := range registry.List() {
eng, err := registry.Get(info.Name)
if err != nil {
continue
}
avail, err := eng.CheckAvailability(ctx)
if err != nil {
fmt.Printf("\n%s (%s)\n", info.Name, info.Description)
fmt.Printf(" Status: Error checking availability\n")
continue
}
status := "[Y] Available"
if !avail.Available {
status = "[N] Not available"
}
fmt.Printf("\n%s (%s)\n", info.Name, info.Description)
fmt.Printf(" Status: %s\n", status)
if !avail.Available && avail.Reason != "" {
fmt.Printf(" Reason: %s\n", avail.Reason)
}
fmt.Printf(" Restore: %v\n", eng.SupportsRestore())
fmt.Printf(" Incremental: %v\n", eng.SupportsIncremental())
fmt.Printf(" Streaming: %v\n", eng.SupportsStreaming())
}
return nil
}
func runEngineInfo(cmd *cobra.Command, args []string) error {
ctx := context.Background()
registry := engine.DefaultRegistry
eng, err := registry.Get(args[0])
if err != nil {
return fmt.Errorf("engine not found: %s", args[0])
}
avail, err := eng.CheckAvailability(ctx)
if err != nil {
return fmt.Errorf("failed to check availability: %w", err)
}
fmt.Printf("Engine: %s\n", eng.Name())
fmt.Printf("Description: %s\n", eng.Description())
fmt.Println(strings.Repeat("-", 50))
fmt.Printf("Available: %v\n", avail.Available)
if avail.Reason != "" {
fmt.Printf("Reason: %s\n", avail.Reason)
}
fmt.Printf("Restore: %v\n", eng.SupportsRestore())
fmt.Printf("Incremental: %v\n", eng.SupportsIncremental())
fmt.Printf("Streaming: %v\n", eng.SupportsStreaming())
return nil
}