diff --git a/main.go b/main.go index fd5eb4f..7e91d92 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "fmt" "log" "os" "os/signal" @@ -12,47 +13,67 @@ import ( func main() { log.SetFlags(log.LstdFlags | log.Lmicroseconds) - log.Println("=== Bybit BTC/USDT Tick Ingest Engine ===") // Load configuration cfg, err := LoadConfig("config.json") if err != nil { log.Fatalf("Config error: %v", err) } + + if len(os.Args) < 2 { + printUsage() + return + } + + command := os.Args[1] + + switch command { + case "run": + runEngine(cfg) + + case "recover": + log.Println("=== Starting Recovery Mode ===") + sm, err := NewStorageManager(cfg) + if err != nil { + log.Fatal(err) + } + if err := sm.StartupRecovery(); err != nil { + log.Fatal(err) + } + log.Println("Recovery completed.") + + case "maintain": + log.Println("=== Starting Manual Maintenance ===") + sm, err := NewStorageManager(cfg) + if err != nil { + log.Fatal(err) + } + sm.RunHourlyMaintenance() + log.Println("Maintenance completed.") + + case "help": + printUsage() + + default: + log.Printf("Unknown command: %s", command) + printUsage() + } +} + +func printUsage() { + fmt.Println("Usage: engine [command]") + fmt.Println("\nCommands:") + fmt.Println(" run Start the WebSocket ingestor and processing engine") + fmt.Println(" recover Run startup recovery to migrate stale ticks") + fmt.Println(" maintain Run a single maintenance cycle (cleanup/retention)") + fmt.Println(" help Show this help message") +} + +func runEngine(cfg Config) { + log.Println("=== Bybit BTC/USDT Tick Ingest Engine ===") log.Printf("Config: symbol=%s, hot_retention=%dh, feature_retention=%dd", cfg.Symbol, cfg.HotRetentionHours, cfg.FeatureRetentionDays) - if len(os.Args) > 1 { - - switch os.Args[1] { - - case "recover": - sm, err := NewStorageManager(cfg) - if err != nil { - log.Fatal(err) - } - - if err := sm.StartupRecovery(); err != nil { - log.Fatal(err) - } - - log.Println("Recovery completed.") - return - - case "maintain": - sm, err := NewStorageManager(cfg) - if err != nil { - log.Fatal(err) - } - - sm.RunHourlyMaintenance() - - log.Println("Maintenance completed.") - return - } - } - - // Initialize storage (creates dirs, databases, tables) sm, err := NewStorageManager(cfg) if err != nil { @@ -140,4 +161,4 @@ func main() { // Wait for all goroutines to finish wg.Wait() log.Println("=== Engine shut down cleanly. ===") -} +} \ No newline at end of file