#!/usr/bin/env python3 """ Test script for MQTT events API endpoint This script tests the new MQTT events history functionality by: 1. Starting the system components 2. Simulating MQTT messages 3. Testing the API endpoint to retrieve events """ import asyncio import time import requests import json from datetime import datetime # Test configuration API_BASE_URL = "http://localhost:8000" MQTT_EVENTS_ENDPOINT = f"{API_BASE_URL}/mqtt/events" def test_api_endpoint(): """Test the MQTT events API endpoint""" print("๐Ÿงช Testing MQTT Events API Endpoint") print("=" * 50) try: # Test basic endpoint print("๐Ÿ“ก Testing GET /mqtt/events (default limit=5)") response = requests.get(MQTT_EVENTS_ENDPOINT) if response.status_code == 200: data = response.json() print(f"โœ… API Response successful") print(f"๐Ÿ“Š Total events: {data.get('total_events', 0)}") print(f"๐Ÿ“‹ Events returned: {len(data.get('events', []))}") if data.get('events'): print(f"๐Ÿ• Last updated: {data.get('last_updated')}") print("\n๐Ÿ“ Recent events:") for i, event in enumerate(data['events'], 1): timestamp = datetime.fromisoformat(event['timestamp']).strftime('%H:%M:%S') print(f" {i}. [{timestamp}] {event['machine_name']}: {event['payload']} -> {event['normalized_state']}") else: print("๐Ÿ“ญ No events found") else: print(f"โŒ API Error: {response.status_code}") print(f" Response: {response.text}") except requests.exceptions.ConnectionError: print("โŒ Connection Error: API server not running") print(" Start the system first: python -m usda_vision_system.main") except Exception as e: print(f"โŒ Error: {e}") print() # Test with custom limit try: print("๐Ÿ“ก Testing GET /mqtt/events?limit=10") response = requests.get(f"{MQTT_EVENTS_ENDPOINT}?limit=10") if response.status_code == 200: data = response.json() print(f"โœ… API Response successful") print(f"๐Ÿ“‹ Events returned: {len(data.get('events', []))}") else: print(f"โŒ API Error: {response.status_code}") except Exception as e: print(f"โŒ Error: {e}") def test_system_status(): """Test system status to verify API is running""" print("๐Ÿ” Checking System Status") print("=" * 50) try: response = requests.get(f"{API_BASE_URL}/system/status") if response.status_code == 200: data = response.json() print(f"โœ… System Status: {'Running' if data.get('system_started') else 'Not Started'}") print(f"๐Ÿ”— MQTT Connected: {'Yes' if data.get('mqtt_connected') else 'No'}") print(f"๐Ÿ“ก Last MQTT Message: {data.get('last_mqtt_message', 'None')}") print(f"โฑ๏ธ Uptime: {data.get('uptime_seconds', 0):.1f} seconds") return True else: print(f"โŒ System Status Error: {response.status_code}") return False except requests.exceptions.ConnectionError: print("โŒ Connection Error: API server not running") print(" Start the system first: python -m usda_vision_system.main") return False except Exception as e: print(f"โŒ Error: {e}") return False def test_mqtt_status(): """Test MQTT status""" print("๐Ÿ“ก Checking MQTT Status") print("=" * 50) try: response = requests.get(f"{API_BASE_URL}/mqtt/status") if response.status_code == 200: data = response.json() print(f"๐Ÿ”— MQTT Connected: {'Yes' if data.get('connected') else 'No'}") print(f"๐Ÿ  Broker: {data.get('broker_host')}:{data.get('broker_port')}") print(f"๐Ÿ“‹ Subscribed Topics: {len(data.get('subscribed_topics', []))}") print(f"๐Ÿ“Š Message Count: {data.get('message_count', 0)}") print(f"โŒ Error Count: {data.get('error_count', 0)}") if data.get('subscribed_topics'): print("๐Ÿ“ Topics:") for topic in data['subscribed_topics']: print(f" - {topic}") return True else: print(f"โŒ MQTT Status Error: {response.status_code}") return False except Exception as e: print(f"โŒ Error: {e}") return False def main(): """Main test function""" print("๐Ÿงช MQTT Events API Test") print("=" * 60) print(f"๐ŸŽฏ API Base URL: {API_BASE_URL}") print(f"๐Ÿ“ก Events Endpoint: {MQTT_EVENTS_ENDPOINT}") print() # Test system status first if not test_system_status(): print("\nโŒ System not running. Please start the system first:") print(" python -m usda_vision_system.main") return print() # Test MQTT status if not test_mqtt_status(): print("\nโŒ MQTT not available") return print() # Test the events API test_api_endpoint() print("\n" + "=" * 60) print("๐ŸŽฏ Test Instructions:") print("1. Make sure the system is running") print("2. Turn machines on/off to generate MQTT events") print("3. Run this test again to see the events") print("4. Check the admin dashboard to see events displayed") print() print("๐Ÿ“‹ API Usage:") print(f" GET {MQTT_EVENTS_ENDPOINT}") print(f" GET {MQTT_EVENTS_ENDPOINT}?limit=10") if __name__ == "__main__": main()