#!/usr/bin/env python3 """ Test script to check if we're getting real COB data from WebSocket """ import time import logging from core.data_provider import DataProvider # Set up logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def test_websocket_cob_data(): """Test if we're getting real COB data from WebSocket""" logger.info("Testing WebSocket COB data reception...") # Initialize data provider dp = DataProvider() # Wait for WebSocket connections logger.info("Waiting for WebSocket connections...") time.sleep(15) # Check WebSocket status logger.info("\n=== WebSocket Status ===") try: if hasattr(dp, 'enhanced_cob_websocket') and dp.enhanced_cob_websocket: status = dp.enhanced_cob_websocket.get_status_summary() logger.info(f"WebSocket status: {status}") else: logger.warning("Enhanced COB WebSocket not available") except Exception as e: logger.error(f"Error getting WebSocket status: {e}") # Check if we have any COB WebSocket data logger.info("\n=== COB WebSocket Data Check ===") if hasattr(dp, 'cob_websocket_data'): for symbol in ['ETH/USDT', 'BTC/USDT']: if symbol in dp.cob_websocket_data: data = dp.cob_websocket_data[symbol] logger.info(f"{symbol}: {type(data)} - {len(str(data))} chars") if isinstance(data, dict): logger.info(f" Keys: {list(data.keys())}") if 'bids' in data: logger.info(f" Bids: {len(data['bids'])} levels") if 'asks' in data: logger.info(f" Asks: {len(data['asks'])} levels") else: logger.info(f"{symbol}: No WebSocket data") else: logger.warning("No cob_websocket_data attribute found") # Check raw COB ticks logger.info("\n=== Raw COB Ticks ===") for symbol in ['ETH/USDT', 'BTC/USDT']: if hasattr(dp, 'cob_raw_ticks') and symbol in dp.cob_raw_ticks: raw_ticks = list(dp.cob_raw_ticks[symbol]) logger.info(f"{symbol}: {len(raw_ticks)} raw ticks") if raw_ticks: latest = raw_ticks[-1] logger.info(f" Latest tick keys: {list(latest.keys())}") if 'timestamp' in latest: logger.info(f" Latest timestamp: {latest['timestamp']}") else: logger.info(f"{symbol}: No raw ticks") # Monitor for 30 seconds to see if data comes in logger.info("\n=== Monitoring for 30 seconds ===") initial_counts = {} for symbol in ['ETH/USDT', 'BTC/USDT']: if hasattr(dp, 'cob_raw_ticks') and symbol in dp.cob_raw_ticks: initial_counts[symbol] = len(dp.cob_raw_ticks[symbol]) else: initial_counts[symbol] = 0 time.sleep(30) logger.info("After 30 seconds:") for symbol in ['ETH/USDT', 'BTC/USDT']: if hasattr(dp, 'cob_raw_ticks') and symbol in dp.cob_raw_ticks: current_count = len(dp.cob_raw_ticks[symbol]) new_ticks = current_count - initial_counts[symbol] logger.info(f"{symbol}: +{new_ticks} new ticks (total: {current_count})") else: logger.info(f"{symbol}: No raw ticks available") # Check if Enhanced WebSocket has latest data logger.info("\n=== Enhanced WebSocket Latest Data ===") try: if hasattr(dp, 'enhanced_cob_websocket') and dp.enhanced_cob_websocket: for symbol in ['ETH/USDT', 'BTC/USDT']: if hasattr(dp.enhanced_cob_websocket, 'latest_cob_data'): latest_data = dp.enhanced_cob_websocket.latest_cob_data.get(symbol) if latest_data: logger.info(f"{symbol}: Latest WebSocket data available") logger.info(f" Keys: {list(latest_data.keys())}") if 'bids' in latest_data and 'asks' in latest_data: logger.info(f" Bids: {len(latest_data['bids'])}, Asks: {len(latest_data['asks'])}") else: logger.info(f"{symbol}: No latest WebSocket data") except Exception as e: logger.error(f"Error checking Enhanced WebSocket data: {e}") # Clean shutdown logger.info("\n=== Shutting Down ===") dp.stop_automatic_data_maintenance() logger.info("WebSocket COB data test completed") if __name__ == "__main__": test_websocket_cob_data()