Skip to content

Commit 631fb62

Browse files
authored
feat(hook): Add hook module to help decouple some specific logic (#784)
1 parent 52b0bfe commit 631fb62

File tree

12 files changed

+466
-35
lines changed

12 files changed

+466
-35
lines changed

api/server.go

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"nofx/config"
1111
"nofx/crypto"
1212
"nofx/decision"
13+
"nofx/hook"
1314
"nofx/manager"
1415
"nofx/trader"
1516
"strconv"
@@ -204,6 +205,17 @@ func (s *Server) handleGetSystemConfig(c *gin.Context) {
204205

205206
// handleGetServerIP 获取服务器IP地址(用于白名单配置)
206207
func (s *Server) handleGetServerIP(c *gin.Context) {
208+
209+
// 首先尝试从Hook获取用户专用IP
210+
userIP := hook.HookExec[hook.IpResult](hook.GETIP, c.GetString("user_id"))
211+
if userIP != nil && userIP.Error() == nil {
212+
c.JSON(http.StatusOK, gin.H{
213+
"public_ip": userIP.GetResult(),
214+
"message": "请将此IP地址添加到白名单中",
215+
})
216+
return
217+
}
218+
207219
// 尝试通过第三方API获取公网IP
208220
publicIP := getPublicIPFromAPI()
209221

@@ -392,8 +404,8 @@ type SafeModelConfig struct {
392404
Name string `json:"name"`
393405
Provider string `json:"provider"`
394406
Enabled bool `json:"enabled"`
395-
CustomAPIURL string `json:"customApiUrl"` // 自定义API URL(通常不敏感)
396-
CustomModelName string `json:"customModelName"` // 自定义模型名(不敏感)
407+
CustomAPIURL string `json:"customApiUrl"` // 自定义API URL(通常不敏感)
408+
CustomModelName string `json:"customModelName"` // 自定义模型名(不敏感)
397409
}
398410

399411
type ExchangeConfig struct {
@@ -414,8 +426,8 @@ type SafeExchangeConfig struct {
414426
Enabled bool `json:"enabled"`
415427
Testnet bool `json:"testnet,omitempty"`
416428
HyperliquidWalletAddr string `json:"hyperliquidWalletAddr"` // Hyperliquid钱包地址(不敏感)
417-
AsterUser string `json:"asterUser"` // Aster用户名(不敏感)
418-
AsterSigner string `json:"asterSigner"` // Aster签名者(不敏感)
429+
AsterUser string `json:"asterUser"` // Aster用户名(不敏感)
430+
AsterSigner string `json:"asterSigner"` // Aster签名者(不敏感)
419431
}
420432

421433
type UpdateModelConfigRequest struct {
@@ -543,7 +555,7 @@ func (s *Server) handleCreateTrader(c *gin.Context) {
543555

544556
switch req.ExchangeID {
545557
case "binance":
546-
tempTrader = trader.NewFuturesTrader(exchangeCfg.APIKey, exchangeCfg.SecretKey)
558+
tempTrader = trader.NewFuturesTrader(exchangeCfg.APIKey, exchangeCfg.SecretKey, userID)
547559
case "hyperliquid":
548560
tempTrader, createErr = trader.NewHyperliquidTrader(
549561
exchangeCfg.APIKey, // private key
@@ -904,7 +916,7 @@ func (s *Server) handleSyncBalance(c *gin.Context) {
904916

905917
switch traderConfig.ExchangeID {
906918
case "binance":
907-
tempTrader = trader.NewFuturesTrader(exchangeCfg.APIKey, exchangeCfg.SecretKey)
919+
tempTrader = trader.NewFuturesTrader(exchangeCfg.APIKey, exchangeCfg.SecretKey, userID)
908920
case "hyperliquid":
909921
tempTrader, createErr = trader.NewHyperliquidTrader(
910922
exchangeCfg.APIKey,
@@ -1638,7 +1650,6 @@ func (s *Server) authMiddleware() gin.HandlerFunc {
16381650
}
16391651
}
16401652

1641-
16421653
// handleLogout 将当前token加入黑名单
16431654
func (s *Server) handleLogout(c *gin.Context) {
16441655
authHeader := c.GetHeader("Authorization")

bootstrap/bootstrap.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"sort"
77
"sync"
88
"time"
9+
"log"
910
)
1011

1112
// Priority 初始化优先级常量
@@ -68,7 +69,7 @@ func RunWithPolicy(ctx *Context, defaultPolicy ErrorPolicy) error {
6869
hooksMu.Unlock()
6970

7071
if len(hooksCopy) == 0 {
71-
logger.Log.Warnf("⚠️ 没有注册任何初始化钩子")
72+
log.Printf("⚠️ 没有注册任何初始化钩子")
7273
return nil
7374
}
7475

@@ -77,7 +78,7 @@ func RunWithPolicy(ctx *Context, defaultPolicy ErrorPolicy) error {
7778
return hooksCopy[i].Priority < hooksCopy[j].Priority
7879
})
7980

80-
logger.Log.Infof("🔄 开始初始化 %d 个模块...", len(hooksCopy))
81+
log.Printf("🔄 开始初始化 %d 个模块...", len(hooksCopy))
8182
startTime := time.Now()
8283

8384
var errors []error
@@ -87,13 +88,13 @@ func RunWithPolicy(ctx *Context, defaultPolicy ErrorPolicy) error {
8788
for i, hook := range hooksCopy {
8889
// 检查是否启用
8990
if hook.Enabled != nil && !hook.Enabled(ctx) {
90-
logger.Log.Infof(" [%d/%d] 跳过: %s (条件未满足)",
91+
log.Printf(" [%d/%d] 跳过: %s (条件未满足)",
9192
i+1, len(hooksCopy), hook.Name)
9293
skippedCount++
9394
continue
9495
}
9596

96-
logger.Log.Infof(" [%d/%d] 初始化: %s (优先级: %d)",
97+
log.Printf(" [%d/%d] 初始化: %s (优先级: %d)",
9798
i+1, len(hooksCopy), hook.Name, hook.Priority)
9899

99100
hookStart := time.Now()
@@ -111,16 +112,16 @@ func RunWithPolicy(ctx *Context, defaultPolicy ErrorPolicy) error {
111112

112113
switch policy {
113114
case FailFast:
114-
logger.Log.Errorf(" ❌ 失败: %s (耗时: %v)", hook.Name, elapsed)
115+
log.Printf(" ❌ 失败: %s (耗时: %v)", hook.Name, elapsed)
115116
return errMsg
116117
case ContinueOnError:
117-
logger.Log.Errorf(" ❌ 失败: %s (耗时: %v) - 继续执行", hook.Name, elapsed)
118+
log.Printf(" ❌ 失败: %s (耗时: %v) - 继续执行", hook.Name, elapsed)
118119
errors = append(errors, errMsg)
119120
case WarnOnError:
120-
logger.Log.Warnf(" ⚠️ 警告: %s (耗时: %v) - %v", hook.Name, elapsed, err)
121+
log.Printf(" ⚠️ 警告: %s (耗时: %v) - %v", hook.Name, elapsed, err)
121122
}
122123
} else {
123-
logger.Log.Infof(" ✓ 完成: %s (耗时: %v)", hook.Name, elapsed)
124+
log.Printf(" ✓ 完成: %s (耗时: %v)", hook.Name, elapsed)
124125
successCount++
125126
}
126127
}
@@ -131,15 +132,15 @@ func RunWithPolicy(ctx *Context, defaultPolicy ErrorPolicy) error {
131132
if len(errors) > 0 {
132133
logger.Log.Warnf("⚠️ 初始化完成,但有 %d 个模块失败 (总耗时: %v)",
133134
len(errors), totalElapsed)
134-
logger.Log.Infof("📊 统计: 成功=%d, 失败=%d, 跳过=%d",
135+
log.Printf("📊 统计: 成功=%d, 失败=%d, 跳过=%d",
135136
successCount, len(errors), skippedCount)
136137

137138
// 返回合并的错误
138139
return fmt.Errorf("以下模块初始化失败: %v", errors)
139140
}
140141

141-
logger.Log.Infof("✅ 所有模块初始化完成 (总耗时: %v)", totalElapsed)
142-
logger.Log.Infof("📊 统计: 成功=%d, 跳过=%d", successCount, skippedCount)
142+
log.Printf("✅ 所有模块初始化完成 (总耗时: %v)", totalElapsed)
143+
log.Printf("📊 统计: 成功=%d, 跳过=%d", successCount, skippedCount)
143144
return nil
144145
}
145146

0 commit comments

Comments
 (0)