From 21b84025d0d2543b5f6dc8c22859d25ce0e5de30 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 10 十月 2023 18:13:46 +0800
Subject: [PATCH] 交易日志格式化处理

---
 log_module/log_export.py |  131 +++++++++++++++++++++++++------------------
 1 files changed, 76 insertions(+), 55 deletions(-)

diff --git a/log_module/log_export.py b/log_module/log_export.py
index 4f2eac2..fd508ec 100644
--- a/log_module/log_export.py
+++ b/log_module/log_export.py
@@ -1,7 +1,10 @@
 import datetime
+import hashlib
+import json
 import logging
 import os
 import shutil
+import time
 
 import constant
 from code_attribute import gpcode_manager
@@ -179,26 +182,25 @@
         date = datetime.datetime.now().strftime("%Y-%m-%d")
     index_list = []
     buy_queues = []
-    with open("{}/logs/gp/l2/l2_trade_buy_queue.{}.log".format(constant.get_path_prefix(), date), mode='r',
-              encoding="utf-8") as f:
-        while True:
-            line = f.readline()
-            if not line:
-                break
-            time_ = __get_log_time(line).strip()
-            if int(time_.replace(":", "")) > int("150000"):
-                continue
+    path_str = "{}/logs/gp/l2/l2_trade_buy_queue.{}.log".format(constant.get_path_prefix(), date)
+    lines = __load_file_content(path_str)
+    for line in lines:
+        if not line:
+            break
+        time_ = __get_log_time(line).strip()
+        if int(time_.replace(":", "")) > int("150000"):
+            continue
 
-            if line.find(f"{code}-[") >= 0:
-                buy_queues.append((eval(line.split(f"{code}-")[1]), time_))
+        if line.find(f"{code}-[") >= 0:
+            buy_queues.append((eval(line.split(f"{code}-")[1]), time_))
 
-            if line.find("鑾峰彇鎴愪氦浣嶇疆鎴愬姛锛� code-{}".format(code)) < 0:
-                continue
-            try:
-                index = int(line.split("index-")[1].split(" ")[0])
-                index_list.append((index, time_))
-            except:
-                pass
+        if line.find("鑾峰彇鎴愪氦浣嶇疆鎴愬姛锛� code-{}".format(code)) < 0:
+            continue
+        try:
+            index = int(line.split("index-")[1].split(" ")[0])
+            index_list.append((index, time_))
+        except:
+            pass
     return index_list, buy_queues
 
 
@@ -207,21 +209,20 @@
     if not date:
         date = datetime.datetime.now().strftime("%Y-%m-%d")
     path_str = f"{constant.get_path_prefix()}/logs/gp/l2/cancel/h_cancel.{date}.log"
+    lines = __load_file_content(path_str)
     latest_info = None
-    if os.path.exists(path_str):
-        with open(path_str, mode='r', encoding="utf-8") as f:
-            while True:
-                line = f.readline()
-                if not line:
-                    break
-                if line.find(f"code-{code}") < 0:
-                    continue
-                if line.find(f"H绾ф挙鍗曡绠楃粨鏋�") < 0:
-                    continue
-                target_rate = line.split("鐩爣姣斾緥锛�")[1].split(" ")[0].strip()
-                cancel_num = line.split("鍙栨秷璁$畻缁撴灉")[1][1:].split("/")[0].strip()
-                total_num = line.split("鍙栨秷璁$畻缁撴灉")[1][1:].split("/")[1].split(" ")[0].strip()
-                latest_info = (target_rate, round(int(cancel_num) / int(total_num), 2), cancel_num, total_num,)
+
+    for line in lines:
+        if not line:
+            break
+        if line.find(f"code-{code}") < 0:
+            continue
+        if line.find(f"H绾ф挙鍗曡绠楃粨鏋�") < 0:
+            continue
+        target_rate = line.split("鐩爣姣斾緥锛�")[1].split(" ")[0].strip()
+        cancel_num = line.split("鍙栨秷璁$畻缁撴灉")[1][1:].split("/")[0].strip()
+        total_num = line.split("鍙栨秷璁$畻缁撴灉")[1][1:].split("/")[1].split(" ")[0].strip()
+        latest_info = (target_rate, round(int(cancel_num) / int(total_num), 2), cancel_num, total_num,)
     return latest_info
 
 
@@ -278,36 +279,54 @@
     return results
 
 
-# 鍔犺浇涔板叆寰楀垎璁板綍
-def load_buy_score_recod(code):
-    path = f"{constant.get_path_prefix()}/logs/gp/trade/trade_record.{tool.get_now_date_str()}.log"
-    fdatas = []
-    if os.path.exists(path):
-        with open(path, 'r', encoding="utf-8") as f:
+__log_file_contents = {}
+
+
+# 鍔犺浇鏂囦欢鍐呭
+def __load_file_content(path_str, expire_timespace=20):
+    md5 = hashlib.md5(path_str.encode(encoding='utf-8')).hexdigest()
+    if md5 in __log_file_contents and time.time() - __log_file_contents[md5][0] < expire_timespace:
+        return __log_file_contents[md5][1]
+    contents = []
+    if os.path.exists(path_str):
+        with open(path_str, 'r', encoding="utf-8") as f:
             lines = f.readlines()
             for line in lines:
-                data_index = line.find(f"code={code}")
-                if data_index > 0:
-                    time_str = line[11:19]
-                    data = line[line.find("data=") + 5:]
-                    type = line[line.find("type=") + 5:line.find(" ", line.find("type="))]
-                    fdatas.append((time_str, type, eval("{" + data + "}")))
+                contents.append(line)
+    __log_file_contents[md5] = (time.time(), contents)
+    return contents
+
+
+# 鍔犺浇涔板叆寰楀垎璁板綍
+def load_trade_recod(code):
+    path = f"{constant.get_path_prefix()}/logs/gp/trade/trade_record.{tool.get_now_date_str()}.log"
+    fdatas = []
+    lines = __load_file_content(path)
+    for line in lines:
+        data_index = line.find(f"{code}")
+        if data_index > 0:
+            line = line.split(" - ")[1]
+            time_str = line[line.find("[") + 1:line.find("[") + 9]
+            data = line[line.find("]") + 1:].strip()
+            data_json = json.loads(data)
+            if data_json["code"] != code:
+                continue
+            type = data_json["type"]
+            fdatas.append((time_str, type, data_json["data"]))
     return fdatas
 
 
 def load_kpl_reason_changes():
     path = f"{constant.get_path_prefix()}/logs/gp/kpl/kpl_limit_up_reason_change.{tool.get_now_date_str()}.log"
     fdatas = []
-    if os.path.exists(path):
-        with open(path, 'r', encoding="utf-8") as f:
-            lines = f.readlines()
-            for line in lines:
-                if line.find("code-") > 0:
-                    data = line[line.find("code-") + 5:]
-                    code = data.split(":")[0]
-                    from_r = data.split(":")[1].split("-")[0]
-                    to_r = eval(data.split(":")[1].split("-")[1])
-                    fdatas.append((code, from_r, to_r))
+    lines = __load_file_content(path)
+    for line in lines:
+        if line.find("code-") > 0:
+            data = line[line.find("code-") + 5:]
+            code = data.split(":")[0]
+            from_r = data.split(":")[1].split("-")[0]
+            to_r = eval(data.split(":")[1].split("-")[1])
+            fdatas.append((code, from_r, to_r))
     return fdatas
 
 
@@ -353,7 +372,9 @@
 
 
 if __name__ == '__main__':
-    load_huaxin_local_buy_no()
+    datas = load_buy_score_recod("000333")
+    for d in datas:
+        print(d)
     # print(get_h_cancel_compute_info("603912"))
 
     # logger_l2_h_cancel.info("test")

--
Gitblit v1.8.0