mirror of
https://github.com/NoFxAiOS/nofx.git
synced 2026-07-17 01:14:40 +08:00
feat: auto-restart traders on system startup
- Add AutoStartRunningTraders method to TraderManager - Automatically restore traders marked as running in database - Call auto-start after loading traders from store on startup
This commit is contained in:
3
main.go
3
main.go
@@ -345,6 +345,9 @@ func main() {
|
|||||||
logger.Info("按 Ctrl+C 停止运行")
|
logger.Info("按 Ctrl+C 停止运行")
|
||||||
logger.Info(strings.Repeat("=", 60))
|
logger.Info(strings.Repeat("=", 60))
|
||||||
|
|
||||||
|
// 自动恢复之前运行中的交易员
|
||||||
|
traderManager.AutoStartRunningTraders(st)
|
||||||
|
|
||||||
// 获取API服务器端口(优先级:环境变量 > 数据库配置 > 默认值)
|
// 获取API服务器端口(优先级:环境变量 > 数据库配置 > 默认值)
|
||||||
apiPort := 8080 // 默认端口
|
apiPort := 8080 // 默认端口
|
||||||
|
|
||||||
|
|||||||
@@ -99,6 +99,49 @@ func (tm *TraderManager) StopAll() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AutoStartRunningTraders 自动启动数据库中标记为运行中的交易员
|
||||||
|
func (tm *TraderManager) AutoStartRunningTraders(st *store.Store) {
|
||||||
|
// 先获取所有交易员配置(一次性查询)
|
||||||
|
traderList, err := st.Trader().ListAll()
|
||||||
|
if err != nil {
|
||||||
|
logger.Infof("⚠️ 获取交易员列表失败: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构建运行中交易员的ID集合
|
||||||
|
runningTraderIDs := make(map[string]bool)
|
||||||
|
for _, traderCfg := range traderList {
|
||||||
|
if traderCfg.IsRunning {
|
||||||
|
runningTraderIDs[traderCfg.ID] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(runningTraderIDs) == 0 {
|
||||||
|
logger.Info("📋 没有需要自动恢复的交易员")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tm.mu.RLock()
|
||||||
|
defer tm.mu.RUnlock()
|
||||||
|
|
||||||
|
startedCount := 0
|
||||||
|
for id, t := range tm.traders {
|
||||||
|
if runningTraderIDs[id] {
|
||||||
|
go func(traderID string, at *trader.AutoTrader) {
|
||||||
|
logger.Infof("▶️ 自动恢复启动 %s...", at.GetName())
|
||||||
|
if err := at.Run(); err != nil {
|
||||||
|
logger.Infof("❌ %s 运行错误: %v", at.GetName(), err)
|
||||||
|
}
|
||||||
|
}(id, t)
|
||||||
|
startedCount++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if startedCount > 0 {
|
||||||
|
logger.Infof("✓ 自动恢复启动了 %d 个交易员", startedCount)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// GetComparisonData 获取对比数据
|
// GetComparisonData 获取对比数据
|
||||||
func (tm *TraderManager) GetComparisonData() (map[string]interface{}, error) {
|
func (tm *TraderManager) GetComparisonData() (map[string]interface{}, error) {
|
||||||
tm.mu.RLock()
|
tm.mu.RLock()
|
||||||
|
|||||||
Reference in New Issue
Block a user