From 1110af9cc42cbf6a3ebbb953f18585cb37ba5b8c Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期一, 08 一月 2024 15:24:35 +0800 Subject: [PATCH] bug修复/日志添加 --- middle_api_server.py | 517 +++++++++++++++++++++++++++++++-------------------------- 1 files changed, 283 insertions(+), 234 deletions(-) diff --git a/middle_api_server.py b/middle_api_server.py index c0fc0b2..1a79864 100644 --- a/middle_api_server.py +++ b/middle_api_server.py @@ -1,6 +1,7 @@ import hashlib import json import logging +import random import socket import socketserver import threading @@ -11,6 +12,7 @@ import trade_manager from db import mysql_data, redis_manager from db.redis_manager import RedisUtils +from log import logger_request_debug from utils import socket_util, hosting_api_util, huaxin_trade_record_manager, huaxin_util, tool, global_data_cache_util from utils.history_k_data_util import HistoryKDatasUtils, JueJinApi from utils.huaxin_trade_record_manager import PositionManager @@ -63,253 +65,278 @@ # print("鏀跺埌鏁版嵁------", f"{data_str[:20]}......{data_str[-20:]}") data_json = json.loads(data_str) type_ = data_json['type'] - if type(type_) == int: - # 澶勭悊鏁板瓧鍨婽YPE - return_str = self.process_num_type(sk, type_, data_str) - break + thread_id = random.randint(0, 1000000) + try: + logger_request_debug.info(f"middle_api_server 璇锋眰寮�濮�({thread_id})锛歿type_}") + if type(type_) == int: + # 澶勭悊鏁板瓧鍨婽YPE + return_str = self.process_num_type(sk, type_, data_str) + break - is_sign_right = socket_util.is_client_params_sign_right(data_json) - # ------瀹㈡埛绔姹傛帴鍙�------- - if type_ == 'buy': - # 楠岃瘉绛惧悕 - if not is_sign_right: - raise Exception("绛惧悕閿欒") - codes_data = data_json["data"] - code = codes_data["code"] - volume = codes_data["volume"] - price = codes_data["price"] - try: - if not code: - raise Exception("璇蜂笂浼燾ode") - if not volume: - raise Exception("璇蜂笂浼爒olume") + is_sign_right = socket_util.is_client_params_sign_right(data_json) + # ------瀹㈡埛绔姹傛帴鍙�------- + if type_ == 'buy': + # 楠岃瘉绛惧悕 + if not is_sign_right: + raise Exception("绛惧悕閿欒") + codes_data = data_json["data"] + code = codes_data["code"] + volume = codes_data["volume"] + price = codes_data["price"] + try: + if not code: + raise Exception("璇蜂笂浼燾ode") + if not volume: + raise Exception("璇蜂笂浼爒olume") - if round(float(price), 2) <= 0: - prices = HistoryKDatasUtils.get_now_price([code]) - if not prices: - raise Exception("鐜颁环鑾峰彇澶辫触") - price = prices[0][1] - # 涓嬪崟 - result = hosting_api_util.trade_order(hosting_api_util.TRADE_DIRECTION_BUY, code, volume, - round(float(price), 2)) - if result: - resultJSON = result - print("涓嬪崟缁撴灉锛�", resultJSON) - if resultJSON['code'] == 0: + if round(float(price), 2) <= 0: + prices = HistoryKDatasUtils.get_now_price([code]) + if not prices: + raise Exception("鐜颁环鑾峰彇澶辫触") + price = prices[0][1] + # 涓嬪崟 + result = hosting_api_util.trade_order(hosting_api_util.TRADE_DIRECTION_BUY, code, volume, + round(float(price), 2)) + if result: + resultJSON = result + print("涓嬪崟缁撴灉锛�", resultJSON) + if resultJSON['code'] == 0: + return_str = json.dumps({"code": 0}) + else: + raise Exception(resultJSON['msg']) + break + except Exception as e: + raise e + elif type_ == 'cancel_order': + # 楠岃瘉绛惧悕 + if not is_sign_right: + raise Exception("绛惧悕閿欒") + codes_data = data_json["data"] + code = codes_data["code"] + orderSysID = codes_data.get("orderSysID") + accountId = codes_data.get("accountId") + if code: + result = hosting_api_util.trade_cancel_order(hosting_api_util.TRADE_DIRECTION_BUY, code, + accountId, + orderSysID, True) + print("---鎾ゅ崟缁撴灉----") + print(result) + if result["code"] == 0: return_str = json.dumps({"code": 0}) else: - raise Exception(resultJSON['msg']) + raise Exception(result["msg"]) + else: + return_str = json.dumps({"code": 1, "msg": "璇蜂笂浼犱唬鐮�"}) break - except Exception as e: - raise e - elif type_ == 'cancel_order': - # 楠岃瘉绛惧悕 - if not is_sign_right: - raise Exception("绛惧悕閿欒") - codes_data = data_json["data"] - code = codes_data["code"] - orderSysID = codes_data.get("orderSysID") - accountId = codes_data.get("accountId") - if code: - result = hosting_api_util.trade_cancel_order(hosting_api_util.TRADE_DIRECTION_BUY, code, - accountId, - orderSysID, True) - print("---鎾ゅ崟缁撴灉----") - print(result) + + elif type_ == 'sell': + # 楠岃瘉绛惧悕 + if not is_sign_right: + raise Exception("绛惧悕閿欒") + codes_data = data_json["data"] + code = codes_data["code"] + volume = codes_data["volume"] + price_type = codes_data["price_type"] + result = hosting_api_util.trade_order(hosting_api_util.TRADE_DIRECTION_SELL, code, volume, + '', price_type=price_type) if result["code"] == 0: - return_str = json.dumps({"code": 0}) + return_str = json.dumps(result) else: raise Exception(result["msg"]) - else: - return_str = json.dumps({"code": 1, "msg": "璇蜂笂浼犱唬鐮�"}) - break - - elif type_ == 'sell': - # 楠岃瘉绛惧悕 - if not is_sign_right: - raise Exception("绛惧悕閿欒") - codes_data = data_json["data"] - code = codes_data["code"] - volume = codes_data["volume"] - price_type = codes_data["price_type"] - result = hosting_api_util.trade_order(hosting_api_util.TRADE_DIRECTION_SELL, code, volume, - '',price_type=price_type) - if result["code"] == 0: + print("---鍗栧嚭缁撴灉----") + print(result) + break + elif type_ == 'get_code_position_info': + # 楠岃瘉绛惧悕 + if not is_sign_right: + raise Exception("绛惧悕閿欒") + codes_data = data_json["data"] + code = codes_data["code"] + result = hosting_api_util.get_code_position_info(code) return_str = json.dumps(result) - else: - raise Exception(result["msg"]) - print("---鍗栧嚭缁撴灉----") - print(result) - break - elif type_ == 'get_code_position_info': - # 楠岃瘉绛惧悕 - if not is_sign_right: - raise Exception("绛惧悕閿欒") - codes_data = data_json["data"] - code = codes_data["code"] - result = hosting_api_util.get_code_position_info(code) - return_str = json.dumps(result) - break + break - elif type_ == 'common': - # 楠岃瘉绛惧悕 - if not is_sign_right: - raise Exception("绛惧悕閿欒") - params = data_json["data"] - result = hosting_api_util.common_request(params) - return_str = json.dumps(result) - break + elif type_ == 'common': + # 楠岃瘉绛惧悕 + if not is_sign_right: + raise Exception("绛惧悕閿欒") + params = data_json["data"] + result = hosting_api_util.common_request(params) + return_str = json.dumps(result) + break - elif type_ == 'get_cost_price': - # 鑾峰彇鎴愭湰浠� - codes_data = data_json["data"] - code = codes_data["code"] - try: - price = PositionManager.get_cost_price(code) - return_str = json.dumps({"code": 0, "data": {"price": price}}) - except Exception as e: - return_str = json.dumps({"code": 1, "msg": str(e)}) - break - elif type_ == 'delegate_list': - # 濮旀墭鍒楄〃 - update_time = data_json["data"]["update_time"] - # 鏄惁鍙挙 0/1 - can_cancel = data_json["data"]["can_cancel"] - results, update_time = None, None - if can_cancel: - results, update_time = huaxin_trade_record_manager.DelegateRecordManager.list_by_day( - tool.get_now_date_str("%Y%m%d"), None, - [huaxin_util.TORA_TSTP_OST_Accepted, huaxin_util.TORA_TSTP_OST_PartTraded]) - else: - results, update_time = huaxin_trade_record_manager.DelegateRecordManager.list_by_day( - tool.get_now_date_str("%Y%m%d"), update_time) - return_str = json.dumps( - {"code": 0, "data": {"list": results, "updateTime": update_time}, "msg": "璇蜂笂浼犱唬鐮�"}) - break - elif type_ == 'deal_list': - # 鎴愪氦鍒楄〃 - results = huaxin_trade_record_manager.DealRecordManager.list_by_day( - tool.get_now_date_str("%Y%m%d")) - return_str = json.dumps( - {"code": 0, "data": {"list": results}, "msg": ""}) - elif type_ == 'position_list': - # 鎸佷粨鑲″垪琛� - results, update_time = huaxin_trade_record_manager.PositionManager.list_by_day( - tool.get_now_date_str("%Y%m%d")) - return_str = json.dumps( - {"code": 0, "data": {"list": results}, "msg": ""}) - elif type_ == 'money_list': - # 璧勯噾璇︽儏 - money_data = huaxin_trade_record_manager.MoneyManager.get_data() - return_str = json.dumps( - {"code": 0, "data": money_data, "msg": ""}) - elif type_ == 'sync_trade_data': - # 鍚屾浜ゆ槗鏁版嵁 - sync_type = data_json["data"]["type"] - hosting_api_util.refresh_trade_data(sync_type) - return_str = json.dumps( - {"code": 0, "data": {}, "msg": ""}) - elif type_ == "get_huaxin_subscript_codes": - # 鑾峰彇鍗庨懌璁㈤槄鐨勪唬鐮� - fresults = global_data_cache_util.huaxin_subscript_codes - update_time = global_data_cache_util.huaxin_subscript_codes_update_time - if update_time is None: - update_time = '' - return_str = json.dumps( - {"code": 0, "data": {"count": len(fresults), "list": fresults, "update_time": update_time}, - "msg": ""}) - pass - elif type_ == "export_l2_data": - # 瀵煎嚭L2鏁版嵁 - code = data_json["data"]["code"] - hosting_api_util.export_l2_data(code) - return_str = json.dumps( - {"code": 0, "data": {}, "msg": ""}) - elif type_ == 'everyday_init': - # 姣忔棩鍒濆鍖� - hosting_api_util.everyday_init() - return_str = json.dumps( - {"code": 0, "data": {}, "msg": ""}) - elif type_ == 'huaxin_channel_state': - # 鍗庨懌閫氶亾鐘舵�� - types = [] - fdata = {} - return_str = json.dumps( - {"code": 0, "data": fdata, "msg": ""}) - elif type_ == 'juejin_is_valid': - # 鎺橀噾鏄惁鍙敤 - try: - date = JueJinApi.get_previous_trading_date(tool.get_now_date_str()) - if date: + elif type_ == 'get_cost_price': + # 鑾峰彇鎴愭湰浠� + codes_data = data_json["data"] + code = codes_data["code"] + try: + price = PositionManager.get_cost_price(code) + return_str = json.dumps({"code": 0, "data": {"price": price}}) + except Exception as e: + return_str = json.dumps({"code": 1, "msg": str(e)}) + break + elif type_ == 'delegate_list': + # 濮旀墭鍒楄〃 + update_time = data_json["data"]["update_time"] + # 鏄惁鍙挙 0/1 + can_cancel = data_json["data"]["can_cancel"] + results, update_time = None, None + if can_cancel: + results, update_time = huaxin_trade_record_manager.DelegateRecordManager.list_by_day( + tool.get_now_date_str("%Y%m%d"), None, + [huaxin_util.TORA_TSTP_OST_Accepted, huaxin_util.TORA_TSTP_OST_PartTraded]) + else: + results, update_time = huaxin_trade_record_manager.DelegateRecordManager.list_by_day( + tool.get_now_date_str("%Y%m%d"), update_time) + return_str = json.dumps( + {"code": 0, "data": {"list": results, "updateTime": update_time}, "msg": "璇蜂笂浼犱唬鐮�"}) + break + elif type_ == 'deal_list': + # 鎴愪氦鍒楄〃 + results = huaxin_trade_record_manager.DealRecordManager.list_by_day( + tool.get_now_date_str("%Y%m%d")) + return_str = json.dumps( + {"code": 0, "data": {"list": results}, "msg": ""}) + elif type_ == 'position_list': + # 鎸佷粨鑲″垪琛� + results, update_time = huaxin_trade_record_manager.PositionManager.list_by_day( + tool.get_now_date_str("%Y%m%d")) + return_str = json.dumps( + {"code": 0, "data": {"list": results}, "msg": ""}) + elif type_ == 'money_list': + # 璧勯噾璇︽儏 + money_data = huaxin_trade_record_manager.MoneyManager.get_data() + return_str = json.dumps( + {"code": 0, "data": money_data, "msg": ""}) + elif type_ == 'sync_trade_data': + # 鍚屾浜ゆ槗鏁版嵁 + sync_type = data_json["data"]["type"] + hosting_api_util.refresh_trade_data(sync_type) + return_str = json.dumps( + {"code": 0, "data": {}, "msg": ""}) + elif type_ == "get_huaxin_subscript_codes": + # 鑾峰彇鍗庨懌璁㈤槄鐨勪唬鐮� + fresults = global_data_cache_util.huaxin_subscript_codes + update_time = global_data_cache_util.huaxin_subscript_codes_update_time + if update_time is None: + update_time = '' + return_str = json.dumps( + {"code": 0, "data": {"count": len(fresults), "list": fresults, "update_time": update_time}, + "msg": ""}) + pass + elif type_ == "export_l2_data": + # 瀵煎嚭L2鏁版嵁 + code = data_json["data"]["code"] + hosting_api_util.export_l2_data(code) + return_str = json.dumps( + {"code": 0, "data": {}, "msg": ""}) + elif type_ == 'everyday_init': + # 姣忔棩鍒濆鍖� + hosting_api_util.everyday_init() + return_str = json.dumps( + {"code": 0, "data": {}, "msg": ""}) + elif type_ == 'huaxin_channel_state': + # 鍗庨懌閫氶亾鐘舵�� + types = [] + fdata = {} + return_str = json.dumps( + {"code": 0, "data": fdata, "msg": ""}) + elif type_ == 'juejin_is_valid': + # 鎺橀噾鏄惁鍙敤 + try: + date = JueJinApi.get_previous_trading_date(tool.get_now_date_str()) + if date: + return_str = json.dumps( + {"code": 0, "msg": ""}) + except Exception as e: return_str = json.dumps( - {"code": 0, "msg": ""}) - except Exception as e: - return_str = json.dumps( - {"code": 0, "msg": str(e)}) - elif type_ == 'get_env_info': - # 鑾峰彇鐜淇℃伅 - result = hosting_api_util.get_env_info() - return_str = json.dumps(result) - elif type_ == 'sync_l1_subscript_codes': - # 鑾峰彇鐜淇℃伅 - result = hosting_api_util.sync_l1_subscript_codes() - return_str = json.dumps(result) + {"code": 0, "msg": str(e)}) + elif type_ == 'get_env_info': + # 鑾峰彇鐜淇℃伅 + result = hosting_api_util.get_env_info() + return_str = json.dumps(result) + elif type_ == 'sync_l1_subscript_codes': + # 鑾峰彇鐜淇℃伅 + result = hosting_api_util.sync_l1_subscript_codes() + return_str = json.dumps(result) - elif type_ == 'get_system_logs': - # 鑾峰彇鐜淇℃伅 - start_index = data_json["data"]["start_index"] - count = data_json["data"]["count"] - result = hosting_api_util.get_system_logs(start_index, count) - return_str = json.dumps(result) - elif type_ == 'test_redis': - redis = redis_manager.RedisManager(5).getRedisNoPool() - try: - _start_time = time.time() - times = [] - for i in range(0, 100): - RedisUtils.sadd(redis, "test_set", f"000000:{i}", auto_free=False) - times.append(time.time() - _start_time) - _start_time = time.time() - for i in range(0, 20): - RedisUtils.smembers(redis, "test_set", auto_free=False) - times.append(time.time() - _start_time) - return_str = json.dumps( - {"code": 0, "data": times, "msg": ""}) - finally: - redis.close() - elif type_ == 'get_code_trade_info': - # 鑾峰彇鐜淇℃伅 - code = data_json["data"]["code"] - result = hosting_api_util.get_code_trade_info(code) - return_str = json.dumps(result) - elif type_ == 'get_l2_listen_active_count': - result = hosting_api_util.get_l2_listen_active_count() - return_str = json.dumps(result) - elif type_ == "trade_server_channels": - channels = socket_manager.ClientSocketManager.list_client() - return_str = json.dumps({"code": 0, "data": channels}) - elif type_ == "save_running_data": - result = hosting_api_util.save_running_data() - return_str = json.dumps(result) - elif type_ == "add_sell_rule": - result = hosting_api_util.sell_rule(hosting_api_util.OPERRATE_ADD, data=data_json["data"]) - return_str = json.dumps(result) - elif type_ == "del_sell_rule": - id_ = data_json["data"]["id"] - result = hosting_api_util.sell_rule(hosting_api_util.OPERRATE_DELETE, data={"id": id_}) - return_str = json.dumps(result) - elif type_ == "list_sell_rule": - result = hosting_api_util.sell_rule(hosting_api_util.OPERRATE_GET, data={}) - return_str = json.dumps(result) - elif type_ == "get_code_position_info": - code = data_json["data"]["code"] - result = hosting_api_util.get_code_position_info(code) - return_str = json.dumps(result) - elif type_ == "common": - params = data_json["data"] - result = hosting_api_util.common_request(params) - return_str = json.dumps(result) - + elif type_ == 'get_system_logs': + # 鑾峰彇鐜淇℃伅 + start_index = data_json["data"]["start_index"] + count = data_json["data"]["count"] + result = hosting_api_util.get_system_logs(start_index, count) + return_str = json.dumps(result) + elif type_ == 'test_redis': + redis = redis_manager.RedisManager(5).getRedisNoPool() + try: + _start_time = time.time() + times = [] + for i in range(0, 100): + RedisUtils.sadd(redis, "test_set", f"000000:{i}", auto_free=False) + times.append(time.time() - _start_time) + _start_time = time.time() + for i in range(0, 20): + RedisUtils.smembers(redis, "test_set", auto_free=False) + times.append(time.time() - _start_time) + return_str = json.dumps( + {"code": 0, "data": times, "msg": ""}) + finally: + redis.close() + elif type_ == 'get_code_trade_info': + # 鑾峰彇鐜淇℃伅 + code = data_json["data"]["code"] + result = hosting_api_util.get_code_trade_info(code) + return_str = json.dumps(result) + elif type_ == 'get_l2_listen_active_count': + result = hosting_api_util.get_l2_listen_active_count() + return_str = json.dumps(result) + elif type_ == "trade_server_channels": + trade_channels = socket_manager.ClientSocketManager.list_client( + socket_manager.ClientSocketManager.CLIENT_TYPE_TRADE) + common_channels = socket_manager.ClientSocketManager.list_client( + socket_manager.ClientSocketManager.CLIENT_TYPE_COMMON) + data = {} + available_count = 0 + active_count = 0 + now_time_str = tool.get_now_time_str() + for t in trade_channels: + if not t[1]: + available_count += 1 + if tool.trade_time_sub(now_time_str, t[2]) < 60: + active_count += 1 + data["trade"] = (len(trade_channels), available_count, active_count) + available_count = 0 + active_count = 0 + for t in common_channels: + if not t[1]: + available_count += 1 + if tool.trade_time_sub(now_time_str, t[2]) < 60: + active_count += 1 + data["common"] = (len(common_channels), available_count, active_count) + return_str = json.dumps({"code": 0, "data": data}) + elif type_ == "save_running_data": + result = hosting_api_util.save_running_data() + return_str = json.dumps(result) + elif type_ == "add_sell_rule": + result = hosting_api_util.sell_rule(hosting_api_util.OPERRATE_ADD, data=data_json["data"]) + return_str = json.dumps(result) + elif type_ == "del_sell_rule": + id_ = data_json["data"]["id"] + result = hosting_api_util.sell_rule(hosting_api_util.OPERRATE_DELETE, data={"id": id_}) + return_str = json.dumps(result) + elif type_ == "list_sell_rule": + result = hosting_api_util.sell_rule(hosting_api_util.OPERRATE_GET, data={}) + return_str = json.dumps(result) + elif type_ == "get_code_position_info": + code = data_json["data"]["code"] + result = hosting_api_util.get_code_position_info(code) + return_str = json.dumps(result) + elif type_ == "common": + params = data_json["data"] + result = hosting_api_util.common_request(params) + return_str = json.dumps(result) + finally: + logger_request_debug.info(f"middle_api_server 璇锋眰缁撴潫({thread_id})锛歿type}") break # sk.close() except Exception as e: @@ -420,6 +447,28 @@ else: return_str = json.dumps({"code": 1, "msg": "涓嶅彲浠ュ彇娑�"}) + elif type == 421: + # 鍔犲叆鏆備笉涔� + data = json.loads(_str) + codes = data["data"]["codes"] + for code in codes: + hosting_api_util.add_code_list(code, hosting_api_util.CODE_LIST_MUST_BUY) + return_str = json.dumps({"code": 0}) + + elif type == 422: + # 绉婚櫎鏆備笉涔� + data = json.loads(_str) + codes = data["data"]["codes"] + for code in codes: + hosting_api_util.remove_code_list(code, hosting_api_util.CODE_LIST_MUST_BUY) + return_str = json.dumps({"code": 0}) + + elif type == 423: + # 鏆備笉涔板垪琛� + result = hosting_api_util.get_code_list(hosting_api_util.CODE_LIST_MUST_BUY) + return_str = json.dumps(result) + + elif type == 430: # 鏌ヨ浠g爜灞炴�� data = json.loads(_str) -- Gitblit v1.8.0