From dd4636adb21cba5eec0b217b14b1d2bd09d0a09c Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 12 七月 2024 13:51:21 +0800
Subject: [PATCH] 检测/修复数据服务

---
 utils/socket_util.py                         |    6 ++-
 trade/huaxin/outside_api_command_callback.py |   14 ++++++-
 huaxin_client/socket_util.py                 |   21 ++++++++++
 main.py                                      |   15 +------
 utils/server_util.py                         |   23 +++++++++++
 5 files changed, 62 insertions(+), 17 deletions(-)

diff --git a/huaxin_client/socket_util.py b/huaxin_client/socket_util.py
index f14cdd6..8347e33 100644
--- a/huaxin_client/socket_util.py
+++ b/huaxin_client/socket_util.py
@@ -5,6 +5,7 @@
 
 # 娣诲姞鏁版嵁澶�
 import json
+import socket
 
 from huaxin_client import crypt
 
@@ -73,3 +74,23 @@
         return True
     else:
         return False
+
+
+def is_port_open(host, port, timeout=1):
+    try:
+        # 鍒涘缓涓�涓猻ocket瀵硅薄
+        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        # 璁剧疆瓒呮椂鏃堕棿涓�1绉掗挓
+        s.settimeout(timeout)
+        # 灏濊瘯杩炴帴鍒版寚瀹氱殑涓绘満鍜岀鍙�
+        s.connect((host, port))
+        # 濡傛灉杩炴帴鎴愬姛锛屽垯绔彛鏄墦寮�鐨�
+        s.close()
+        return True
+    except socket.error:
+        # 濡傛灉杩炴帴鍑虹幇寮傚父锛屽垯绔彛鏄叧闂殑
+        return False
+
+
+if __name__ == "__main__":
+    print(is_port_open("127.0.0.1",8080))
\ No newline at end of file
diff --git a/main.py b/main.py
index a6dd603..ded0706 100644
--- a/main.py
+++ b/main.py
@@ -24,7 +24,7 @@
 from trade.huaxin import huaxin_trade_server, huaxin_trade_api_server
 
 # from huaxin_api import trade_client, l2_client, l1_client
-from utils import tool
+from utils import tool, server_util
 
 
 def createTradeServer(pipe_server, queue_strategy_r_trade_w_: multiprocessing.Queue,
@@ -50,7 +50,7 @@
     server.global_data_loader.init()
 
     # # 鏁版嵁鏈嶅姟
-    t1 = threading.Thread(target=createDataServer, name="createDataServer", daemon=True)
+    t1 = threading.Thread(target=server_util.run_data_server, name="createDataServer", daemon=True)
     t1.start()
     #
     # 浜ゆ槗鎺ュ彛鏈嶅姟
@@ -81,17 +81,6 @@
         logger_system.exception(e)
         logger_system.error(f"绔彛鏈嶅姟鍣細{laddr[1]} 鍚姩澶辫触")
 
-
-def createDataServer():
-    logger_system.info("create DataServer")
-    logger_system.info(f"createDataServer 绾跨▼ID:{tool.get_thread_id()}")
-    tcpserver = data_server.run("", 9004)
-    tcpserver.serve_forever()
-    try:
-        tcpserver.serve_forever()
-    except Exception as e:
-        logger_system.exception(e)
-        logger_system.error(f"绔彛鏈嶅姟鍣細{9004} 鍚姩澶辫触")
 
 
 if __name__ == '__main__1':
diff --git a/trade/huaxin/outside_api_command_callback.py b/trade/huaxin/outside_api_command_callback.py
index 13e4c72..c408c1b 100644
--- a/trade/huaxin/outside_api_command_callback.py
+++ b/trade/huaxin/outside_api_command_callback.py
@@ -49,7 +49,7 @@
 from trade.sell.sell_rule_manager import TradeRuleManager, SellRule
 from trade.trade_manager import TradeTargetCodeModeManager, AutoCancelSellModeManager
 from settings.trade_setting import MarketSituationManager
-from utils import socket_util, data_export_util, tool, huaxin_util, output_util, global_util
+from utils import socket_util, data_export_util, tool, huaxin_util, output_util, global_util, server_util
 
 
 class OutsideApiCommandCallback(outside_api_command_manager.ActionCallback):
@@ -509,6 +509,14 @@
             except Exception as e:
                 logger_debug.exception(e)
                 fdata["today_history_k_bar_count"] = -1
+
+            # 鑾峰彇鏁版嵁鏈嶅姟鍣ㄦ槸鍚﹁仈閫�
+            try:
+                is_data_server_open = socket_util.is_port_bind(9004)
+                fdata["data_server_open"] = 1 if is_data_server_open else 0
+            except Exception as e:
+                logger_debug.exception(e)
+                fdata["data_server_open"] = -1
 
             # 鑾峰彇浜ゆ槗閫氶亾
             result = {"code": 0, "data": fdata, "msg": ""}
@@ -1133,8 +1141,10 @@
             elif ctype == "get_per_code_buy_money":
                 self.send_response({"code": 0, "data": {"money": constant.BUY_MONEY_PER_CODE}}, client_id, request_id)
             elif ctype == "repaire_task":
-                # 淇浠诲姟
+                # 淇寮�鐩樺暒浠诲姟
                 kpl_data_manager.PullTask.repaire_pull_task()
+                # 淇鏁版嵁鏈嶅姟
+                server_util.repaire_data_server()
                 self.send_response({"code": 0, "data": {}}, client_id, request_id)
             elif ctype == "get_trade_queue":
                 code = data["code"]
diff --git a/utils/server_util.py b/utils/server_util.py
new file mode 100644
index 0000000..6064811
--- /dev/null
+++ b/utils/server_util.py
@@ -0,0 +1,23 @@
+import threading
+
+from log_module.log import logger_system
+from third_data import data_server
+from utils import tool, socket_util
+
+DATA_SERVER_PORT = 9004
+
+def run_data_server():
+    logger_system.info("create DataServer")
+    logger_system.info(f"createDataServer 绾跨▼ID:{tool.get_thread_id()}")
+    tcpserver = data_server.run("", DATA_SERVER_PORT)
+    tcpserver.serve_forever()
+    try:
+        tcpserver.serve_forever()
+    except Exception as e:
+        logger_system.exception(e)
+        logger_system.error(f"绔彛鏈嶅姟鍣細{DATA_SERVER_PORT} 鍚姩澶辫触")
+
+
+def repaire_data_server():
+    if not socket_util.is_port_bind(DATA_SERVER_PORT):
+        threading.Thread(target=run_data_server, daemon=True).start()
diff --git a/utils/socket_util.py b/utils/socket_util.py
index 57ad952..9b2e446 100644
--- a/utils/socket_util.py
+++ b/utils/socket_util.py
@@ -82,9 +82,11 @@
 
 
 # 绔彛鏄惁琚崰鐢�
-def is_port_bind(port):
+def is_port_bind(port, timeout=1):
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+    sock.settimeout(timeout)
     result = sock.connect_ex(('127.0.0.1', port))
+    sock.close()
     if result == 0:
         return True
     else:
@@ -92,4 +94,4 @@
 
 
 if __name__ == "__main__":
-    pass
+    print(is_port_bind(9004))

--
Gitblit v1.8.0