Files

150 lines
3.6 KiB
Python

# app/tools/dzengi_probe/probe.py
from __future__ import annotations
import argparse
import asyncio
from app.tools.dzengi_probe.config import load_config
from app.tools.dzengi_probe.connection_probe import DzengiConnectionProbe
from app.tools.dzengi_probe.rest_probe import DzengiRestProbe
from app.tools.dzengi_probe.stream_market_data_probe import MarketDataStreamProbe
from app.tools.dzengi_probe.websocket_probe import DzengiWebSocketProbe
def run_rest_probe() -> None:
config = load_config()
probe = DzengiRestProbe(config)
results = probe.run_all()
print("Dzengi REST probe results:")
for result in results:
status = "OK" if result.ok else "FAIL"
print(f"- {status} {result.endpoint} -> {result.output_file}")
if result.error:
print(f" error: {result.error}")
async def run_connection_probe() -> None:
config = load_config()
probe = DzengiConnectionProbe(config)
results = await probe.run_all()
print("Dzengi connection probe results:")
for result in results:
status = "OK" if result.ok else "FAIL"
print(f"- {status} {result.name}")
if result.error:
print(f" error: {result.error}")
async def run_ws_depth_probe() -> None:
config = load_config()
probe = DzengiWebSocketProbe(config)
result = await probe.probe_depth_request()
status = "OK" if result.ok else "FAIL"
print("Dzengi WebSocket Request probe results:")
print(f"- {status} {result.stream} -> {result.output_file}")
print(f" messages saved: {result.messages_saved}")
if result.error:
print(f" error: {result.error}")
async def run_market_data_stream_probe(
duration: int | None = None,
scenario: str = "valid",
repeat: int = 1,
) -> None:
config = load_config()
probe = MarketDataStreamProbe(config)
result = await probe.run(
max_messages=None if duration else 10,
duration_seconds=duration,
scenario=scenario,
repeat=repeat,
)
status = "OK" if result.ok else "FAIL"
print("Dzengi Stream probe results:")
print(f"- {status} {result.stream} -> {result.output_file}")
print(f" messages saved: {result.messages_saved}")
if result.error:
print(f" error: {result.error}")
def main() -> None:
parser = argparse.ArgumentParser()
parser.add_argument(
"target",
choices=[
"rest",
"ws-depth",
"stream-market-data",
"connection",
],
)
parser.add_argument(
"--duration",
type=int,
default=None,
)
parser.add_argument(
"--repeat",
type=int,
default=1,
)
parser.add_argument(
"--scenario",
default="valid",
choices=[
"valid",
"invalid-symbol",
"empty-symbols",
"missing-symbols",
"missing-payload",
"invalid-destination",
"unsubscribe",
"multi-symbol",
],
)
args = parser.parse_args()
if args.target == "rest":
run_rest_probe()
return
if args.target == "ws-depth":
asyncio.run(run_ws_depth_probe())
return
if args.target == "stream-market-data":
asyncio.run(
run_market_data_stream_probe(
duration=args.duration,
scenario=args.scenario,
repeat=args.repeat,
)
)
return
if args.target == "connection":
asyncio.run(run_connection_probe())
return
if __name__ == "__main__":
main()