refactor: replace REST API with Unix socket IPC + CLI subcommands

- Remove insecure HTTP API endpoints (positions, close, close-all, pnl)
- Add Unix socket IPC at /tmp/exchange-monitor.sock
- Add CLI subcommands: status, close-all, close <COIN>, stop, start
- Bind dashboard HTTP to 127.0.0.1:8888 (localhost only)
This commit is contained in:
jackyu66git
2026-05-04 20:34:00 +08:00
parent 88462f9829
commit 8ccb439f7a
3 changed files with 147 additions and 114 deletions
+24 -2
View File
@@ -18,6 +18,25 @@ import (
)
func main() {
// CLI subcommand mode: talk to running daemon via IPC
if len(os.Args) > 1 {
switch os.Args[1] {
case "status", "close-all", "stop", "start":
runIPCClient(os.Args[1], "")
case "close":
if len(os.Args) < 3 {
fmt.Fprintln(os.Stderr, "Usage: exchange-monitor close <COIN>")
os.Exit(1)
}
runIPCClient("close", os.Args[2])
default:
fmt.Fprintf(os.Stderr, "Unknown command: %s\n", os.Args[1])
fmt.Fprintln(os.Stderr, "Commands: status, close-all, close <COIN>, stop, start")
os.Exit(1)
}
return
}
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
// Set up multi-writer: stdout + log file
@@ -52,8 +71,11 @@ func main() {
// Initialize trader
trader := NewTrader(cfg, database)
// Initialize dashboard (web server + SSE)
dashboard := NewDashboard(store, trader, database, ":8888")
// Start Unix socket IPC for CLI commands
trader.startIPCServer()
// Initialize dashboard (web server + SSE) — localhost only for security
dashboard := NewDashboard(store, trader, database, "127.0.0.1:8888")
go dashboard.Run()
// Spread window tracker — measures how long spreads stay above threshold