150 lines
3.6 KiB
Python
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() |