This commit is contained in:
Dobromir Popov
2025-07-27 20:56:37 +03:00
parent bd986f4534
commit 9e1684f9f8
7 changed files with 531 additions and 112 deletions

131
test_cob_websocket_only.py Normal file
View File

@ -0,0 +1,131 @@
#!/usr/bin/env python3
"""
Test COB WebSocket Only Integration
This script tests that COB integration works with Enhanced WebSocket only,
without falling back to REST API calls.
"""
import asyncio
import time
from datetime import datetime
from typing import Dict
from core.cob_integration import COBIntegration
async def test_cob_websocket_only():
"""Test COB integration with WebSocket only"""
print("=== Testing COB WebSocket Only Integration ===")
# Initialize COB integration
print("1. Initializing COB integration...")
symbols = ['ETH/USDT', 'BTC/USDT']
cob_integration = COBIntegration(symbols=symbols)
# Track updates
update_count = 0
last_update_time = None
def dashboard_callback(symbol: str, data: Dict):
nonlocal update_count, last_update_time
update_count += 1
last_update_time = datetime.now()
if update_count <= 5: # Show first 5 updates
data_type = data.get('type', 'unknown')
if data_type == 'cob_update':
stats = data.get('data', {}).get('stats', {})
mid_price = stats.get('mid_price', 0)
spread_bps = stats.get('spread_bps', 0)
source = stats.get('source', 'unknown')
print(f" Update #{update_count}: {symbol} - Price: ${mid_price:.2f}, Spread: {spread_bps:.1f}bps, Source: {source}")
elif data_type == 'websocket_status':
status_data = data.get('data', {})
status = status_data.get('status', 'unknown')
print(f" Status #{update_count}: {symbol} - WebSocket: {status}")
# Add dashboard callback
cob_integration.add_dashboard_callback(dashboard_callback)
# Start COB integration
print("2. Starting COB integration...")
try:
# Start in background
start_task = asyncio.create_task(cob_integration.start())
# Wait for initialization
await asyncio.sleep(3)
# Check if COB provider is disabled
print("3. Checking COB provider status:")
if cob_integration.cob_provider is None:
print(" ✅ COB provider is disabled (using Enhanced WebSocket only)")
else:
print(" ❌ COB provider is still active (may cause REST API fallback)")
# Check Enhanced WebSocket status
print("4. Checking Enhanced WebSocket status:")
if cob_integration.enhanced_websocket:
print(" ✅ Enhanced WebSocket is initialized")
# Check WebSocket status for each symbol
websocket_status = cob_integration.get_websocket_status()
for symbol, status in websocket_status.items():
print(f" {symbol}: {status}")
else:
print(" ❌ Enhanced WebSocket is not initialized")
# Monitor updates for a few seconds
print("5. Monitoring COB updates...")
initial_count = update_count
monitor_start = time.time()
# Wait for updates
await asyncio.sleep(5)
monitor_duration = time.time() - monitor_start
updates_received = update_count - initial_count
update_rate = updates_received / monitor_duration
print(f" Received {updates_received} updates in {monitor_duration:.1f}s")
print(f" Update rate: {update_rate:.1f} updates/second")
if update_rate >= 8: # Should be around 10 updates/second
print(" ✅ Update rate is excellent (8+ updates/second)")
elif update_rate >= 5:
print(" ✅ Update rate is good (5+ updates/second)")
elif update_rate >= 1:
print(" ⚠️ Update rate is low (1+ updates/second)")
else:
print(" ❌ Update rate is too low (<1 update/second)")
# Check data quality
print("6. Data quality check:")
if last_update_time:
time_since_last = (datetime.now() - last_update_time).total_seconds()
if time_since_last < 1:
print(f" ✅ Recent data (last update {time_since_last:.1f}s ago)")
else:
print(f" ⚠️ Stale data (last update {time_since_last:.1f}s ago)")
else:
print(" ❌ No updates received")
# Stop the integration
print("7. Stopping COB integration...")
await cob_integration.stop()
# Cancel the start task
start_task.cancel()
try:
await start_task
except asyncio.CancelledError:
pass
except Exception as e:
print(f" ❌ Error during COB integration test: {e}")
print(f"\n✅ COB WebSocket only test completed!")
print(f"Total updates received: {update_count}")
print("Enhanced WebSocket is now the sole data source (no REST API fallback)")
if __name__ == "__main__":
asyncio.run(test_cob_websocket_only())