Просмотр исходного кода

feat(topup-log): add NODE_NAME env var for audit logs

Introduce NODE_NAME environment variable to identify node identity in top-up
audit logs, improving readability over auto-detected container internal IPs
in Docker/K8s deployments. Surface node_name in admin expanded log rows and
add it as a commented example to docker-compose.yml.
CaIon 3 недель назад
Родитель
Сommit
209645e26b

+ 4 - 0
common/constants.go

@@ -116,6 +116,10 @@ var RetryTimes = 0
 
 var IsMasterNode bool
 
+// NodeName 节点名称,从 NODE_NAME 环境变量读取;
+// 用于审计日志中标识节点身份,在容器/K8s 部署时比自动探测到的容器内网 IP 更具可读性。
+var NodeName = ""
+
 var requestInterval int
 var RequestInterval time.Duration
 

+ 1 - 0
common/init.go

@@ -82,6 +82,7 @@ func InitEnv() {
 	DebugEnabled = os.Getenv("DEBUG") == "true"
 	MemoryCacheEnabled = os.Getenv("MEMORY_CACHE_ENABLED") == "true"
 	IsMasterNode = os.Getenv("NODE_TYPE") != "slave"
+	NodeName = os.Getenv("NODE_NAME")
 	TLSInsecureSkipVerify = GetEnvOrDefaultBool("TLS_INSECURE_SKIP_VERIFY", false)
 	if TLSInsecureSkipVerify {
 		if tr, ok := http.DefaultTransport.(*http.Transport); ok && tr != nil {

+ 1 - 0
docker-compose.yml

@@ -32,6 +32,7 @@ services:
       - TZ=Asia/Shanghai
       - ERROR_LOG_ENABLED=true # 是否启用错误日志记录 (Whether to enable error log recording)
       - BATCH_UPDATE_ENABLED=true  # 是否启用批量更新 (Whether to enable batch update)
+      - NODE_NAME=new-api-node-1  # 节点名称,用于审计日志中标识节点身份;多节点/容器部署时建议设置 (Node name used in audit logs; recommended when running multiple instances or in containers)
 #      - STREAMING_TIMEOUT=300  # 流模式无响应超时时间,单位秒,默认120秒,如果出现空补全可以尝试改为更大值 (Streaming timeout in seconds, default is 120s. Increase if experiencing empty completions)
 #      - SESSION_SECRET=random_string  # 多机部署时设置,必须修改这个随机字符串!! (multi-node deployment, set this to a random string!!!!!!!)
 #      - SYNC_FREQUENCY=60  # Uncomment if regular database syncing is needed

+ 1 - 0
model/log.go

@@ -118,6 +118,7 @@ func RecordTopupLog(userId int, content string, callerIp string, paymentMethod s
 	username, _ := GetUsernameById(userId, false)
 	adminInfo := map[string]interface{}{
 		"server_ip":               common.GetIp(),
+		"node_name":               common.NodeName,
 		"caller_ip":               callerIp,
 		"payment_method":          paymentMethod,
 		"callback_payment_method": callbackPaymentMethod,

+ 6 - 0
web/src/hooks/usage-logs/useUsageLogsData.jsx

@@ -740,6 +740,12 @@ export const useLogsData = () => {
               value: adminInfo.server_ip,
             });
           }
+          if (adminInfo.node_name) {
+            expandDataLocal.push({
+              key: t('节点名称'),
+              value: adminInfo.node_name,
+            });
+          }
           if (adminInfo.version) {
             expandDataLocal.push({
               key: t('系统版本'),

+ 1 - 0
web/src/i18n/locales/en.json

@@ -1957,6 +1957,7 @@
     "服务可用性": "Service Status",
     "服务商": "Service Provider",
     "服务器IP": "Server IP",
+    "节点名称": "Node Name",
     "服务器地址": "Server Address",
     "服务器日志功能未启用(未配置日志目录)": "Server logging is not enabled (log directory not configured)",
     "服务器日志管理": "Server Log Management",

+ 1 - 0
web/src/i18n/locales/fr.json

@@ -1950,6 +1950,7 @@
     "服务可用性": "État du service",
     "服务商": "Service Provider",
     "服务器IP": "IP du serveur",
+    "节点名称": "Nom du nœud",
     "服务器地址": "Adresse du serveur",
     "服务器日志功能未启用(未配置日志目录)": "La journalisation du serveur n'est pas activée (répertoire de journaux non configuré)",
     "服务器日志管理": "Gestion des journaux du serveur",

+ 1 - 0
web/src/i18n/locales/ja.json

@@ -1921,6 +1921,7 @@
     "服务可用性": "サービスの可用性",
     "服务商": "Service Provider",
     "服务器IP": "サーバーIP",
+    "节点名称": "ノード名",
     "服务器地址": "サーバーURL",
     "服务器日志功能未启用(未配置日志目录)": "サーバーログ機能が有効になっていません(ログディレクトリが未設定)",
     "服务器日志管理": "サーバーログ管理",

+ 1 - 0
web/src/i18n/locales/ru.json

@@ -1968,6 +1968,7 @@
     "服务可用性": "Доступность сервиса",
     "服务商": "Service Provider",
     "服务器IP": "IP сервера",
+    "节点名称": "Имя узла",
     "服务器地址": "Адрес сервера",
     "服务器日志功能未启用(未配置日志目录)": "Ведение журнала сервера не включено (каталог журналов не настроен)",
     "服务器日志管理": "Управление журналами сервера",

+ 1 - 0
web/src/i18n/locales/vi.json

@@ -1922,6 +1922,7 @@
     "服务可用性": "Trạng thái dịch vụ",
     "服务商": "Service Provider",
     "服务器IP": "IP máy chủ",
+    "节点名称": "Tên nút",
     "服务器地址": "Địa chỉ máy chủ",
     "服务器日志功能未启用(未配置日志目录)": "Ghi nhật ký máy chủ chưa được bật (chưa cấu hình thư mục nhật ký)",
     "服务器日志管理": "Quản lý nhật ký máy chủ",

+ 1 - 0
web/src/i18n/locales/zh-CN.json

@@ -1915,6 +1915,7 @@
     "服务可用性": "服务可用性",
     "服务商": "服务商",
     "服务器IP": "服务器IP",
+    "节点名称": "节点名称",
     "服务器地址": "服务器地址",
     "服务器日志功能未启用(未配置日志目录)": "服务器日志功能未启用(未配置日志目录)",
     "服务器日志管理": "服务器日志管理",

+ 1 - 0
web/src/i18n/locales/zh-TW.json

@@ -1926,6 +1926,7 @@
     "服务可用性": "服務可用性",
     "服务商": "服務商",
     "服务器IP": "伺服器IP",
+    "节点名称": "節點名稱",
     "服务器地址": "伺服器位址",
     "服务器日志功能未启用(未配置日志目录)": "伺服器日誌功能未啟用(未配置日誌目錄)",
     "服务器日志管理": "伺服器日誌管理",