Move starting the engine behind run cli argument.
This commit is contained in:
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
@@ -12,47 +13,67 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
|
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
|
||||||
log.Println("=== Bybit BTC/USDT Tick Ingest Engine ===")
|
|
||||||
|
|
||||||
// Load configuration
|
// Load configuration
|
||||||
cfg, err := LoadConfig("config.json")
|
cfg, err := LoadConfig("config.json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Config error: %v", err)
|
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",
|
log.Printf("Config: symbol=%s, hot_retention=%dh, feature_retention=%dd",
|
||||||
cfg.Symbol, cfg.HotRetentionHours, cfg.FeatureRetentionDays)
|
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)
|
// Initialize storage (creates dirs, databases, tables)
|
||||||
sm, err := NewStorageManager(cfg)
|
sm, err := NewStorageManager(cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -140,4 +161,4 @@ func main() {
|
|||||||
// Wait for all goroutines to finish
|
// Wait for all goroutines to finish
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
log.Println("=== Engine shut down cleanly. ===")
|
log.Println("=== Engine shut down cleanly. ===")
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user