Files
NewStock/qmt/validate_config.py

122 lines
3.3 KiB
Python
Raw Normal View History

# coding: utf-8
"""
QMT 配置检测工具
用于检测配置文件是否正确包括
- 必要字段是否缺失
- 字段类型是否正确
- 业务规则是否满足 slots 模式必须配置 total_slots
- 策略引用的终端是否存在
- 路径是否存在
- 是否存在未知配置项
使用方法:
python validate_config.py [config_path]
如果不指定 config_path默认检测 config.json
"""
import sys
import os
# 直接导入 config_models 避免依赖 redis
exec(
open(
os.path.join(os.path.dirname(__file__), "config_models.py"), encoding="utf-8"
).read()
)
def validate_config(config_path: str = "config.json") -> bool:
"""
检测配置文件
Args:
config_path: 配置文件路径
Returns:
bool: 检测是否通过
"""
print(f"正在检测配置文件: {config_path}")
print("-" * 50)
try:
config = load_config(config_path)
# 检测通过,显示配置摘要
print("[OK] 配置检测通过!")
print()
print("配置摘要:")
print(f" - 终端数量: {len(config.qmt_terminals)}")
print(f" - 策略数量: {len(config.strategies)}")
print()
# 显示终端信息
if config.qmt_terminals:
print("终端配置:")
for terminal in config.qmt_terminals:
print(f" [{terminal.qmt_id}] {terminal.alias}")
print(f" 路径: {terminal.path}")
print(f" 账号: {terminal.account_id}")
print(f" 类型: {terminal.account_type}")
# 显示该终端关联的策略
strategies = config.get_strategies_by_terminal(terminal.qmt_id)
if strategies:
print(f" 关联策略: {', '.join(strategies)}")
print()
# 显示策略信息
if config.strategies:
print("策略配置:")
for name, strat in config.strategies.items():
print(f" [{name}]")
print(f" 关联终端: {strat.qmt_id}")
print(f" 下单模式: {strat.order_mode}")
if strat.order_mode == "slots":
print(f" 总槽位: {strat.total_slots}")
print(f" 权重: {strat.weight}")
print()
# 显示自动重连配置
if config.auto_reconnect:
print("自动重连配置:")
print(f" 启用: {config.auto_reconnect.enabled}")
print(f" 重连时间: {config.auto_reconnect.reconnect_time}")
print()
return True
except ConfigError as e:
print("[FAIL] 配置检测失败!")
print()
print("错误详情:")
print(f" {e}")
print()
print("请检查配置文件后重试。")
return False
except FileNotFoundError:
print(f"[FAIL] 配置文件不存在: {config_path}")
return False
except Exception as e:
print(f"[FAIL] 未知错误: {e}")
return False
def main():
"""主函数"""
# 获取配置文件路径
if len(sys.argv) > 1:
config_path = sys.argv[1]
else:
config_path = "config.json"
# 执行检测
success = validate_config(config_path)
# 返回退出码
sys.exit(0 if success else 1)
if __name__ == "__main__":
main()