build 039: complete Quotes Feed migration foundation
This commit is contained in:
150
app/tools/dzengi_probe/probe.py
Normal file
150
app/tools/dzengi_probe/probe.py
Normal file
@@ -0,0 +1,150 @@
|
||||
# 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()
|
||||
Reference in New Issue
Block a user