#!/usr/bin/env python3 """ Test script to make direct requests to the dashboard's callback endpoint """ import requests import json import time def test_dashboard_callback(): """Test the dashboard callback endpoint directly""" dashboard_url = "http://127.0.0.1:8054" callback_url = f"{dashboard_url}/_dash-update-component" print(f"Testing dashboard at {dashboard_url}") # First, check if dashboard is running try: response = requests.get(dashboard_url, timeout=5) print(f"Dashboard status: {response.status_code}") if response.status_code != 200: print("Dashboard not responding properly") return except Exception as e: print(f"Error connecting to dashboard: {e}") return # Test callback request for dashboard test callback_data = { "output": "current-balance.children", "outputs": [ {"id": "current-balance", "property": "children"}, {"id": "session-duration", "property": "children"}, {"id": "open-positions", "property": "children"}, {"id": "live-pnl", "property": "children"}, {"id": "win-rate", "property": "children"}, {"id": "total-trades", "property": "children"}, {"id": "last-action", "property": "children"}, {"id": "eth-price", "property": "children"}, {"id": "btc-price", "property": "children"}, {"id": "main-eth-1s-chart", "property": "figure"}, {"id": "eth-1m-chart", "property": "figure"}, {"id": "eth-1h-chart", "property": "figure"}, {"id": "eth-1d-chart", "property": "figure"}, {"id": "btc-1s-chart", "property": "figure"}, {"id": "actions-log", "property": "children"}, {"id": "debug-status", "property": "children"} ], "inputs": [ {"id": "ultra-fast-interval", "property": "n_intervals", "value": 1} ], "changedPropIds": ["ultra-fast-interval.n_intervals"], "state": [] } headers = { 'Content-Type': 'application/json', 'Accept': 'application/json' } print("\nTesting callback request...") try: response = requests.post( callback_url, data=json.dumps(callback_data), headers=headers, timeout=10 ) print(f"Callback response status: {response.status_code}") print(f"Response headers: {dict(response.headers)}") if response.status_code == 200: try: response_data = response.json() print(f"Response data keys: {list(response_data.keys()) if isinstance(response_data, dict) else 'Not a dict'}") print(f"Response data type: {type(response_data)}") if isinstance(response_data, dict) and 'response' in response_data: print(f"Response contains {len(response_data['response'])} items") for i, item in enumerate(response_data['response'][:3]): # Show first 3 items print(f" Item {i}: {type(item)} - {str(item)[:100]}...") else: print(f"Full response: {str(response_data)[:500]}...") except json.JSONDecodeError as e: print(f"Error parsing JSON response: {e}") print(f"Raw response: {response.text[:500]}...") else: print(f"Error response: {response.text}") except Exception as e: print(f"Error making callback request: {e}") def monitor_dashboard(): """Monitor dashboard callback requests""" print("Monitoring dashboard callback requests...") print("Press Ctrl+C to stop") try: for i in range(10): # Test 10 times print(f"\n--- Test {i+1} ---") test_dashboard_callback() time.sleep(2) except KeyboardInterrupt: print("\nMonitoring stopped") if __name__ == "__main__": monitor_dashboard()