Files
auracaster-webui/main_mock.py

96 lines
3.1 KiB
Python

"""
Main entry point for the Airport Announcement System mock backend.
"""
import subprocess
import sys
import time
import os
import threading
from pathlib import Path
def stream_output(process, prefix):
"""Stream the output of a process to the console in real-time."""
for line in iter(process.stdout.readline, ''):
if line:
print(f"{prefix}: {line.strip()}")
for line in iter(process.stderr.readline, ''):
if line:
print(f"{prefix} ERROR: {line.strip()}")
def start_backend():
"""Start the backend API server."""
print("Starting backend API server...")
try:
# Add verbose output for debugging
print("Current working directory:", os.getcwd())
print("Python path:", sys.path)
backend_process = subprocess.Popen(
[sys.executable, "-m", "uvicorn", "mock_backend.mock_api:app", "--host", "0.0.0.0", "--port", "7999", "--reload", "--log-level", "debug"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
bufsize=1 # Line buffered
)
# Start a thread to stream the backend output
backend_thread = threading.Thread(target=stream_output, args=(backend_process, "BACKEND"), daemon=True)
backend_thread.start()
# Wait a moment to ensure the backend has started
time.sleep(2)
# Try to ping the API to make sure it's up
try:
import requests
response = requests.get("http://localhost:7999/groups", timeout=1)
print(f"Backend API check: status code {response.status_code}")
except Exception as e:
print(f"Warning: Backend API check failed: {str(e)}")
return backend_process
except Exception as e:
print(f"Error starting backend: {str(e)}")
raise
def start_frontend():
"""Start the Streamlit frontend."""
print("Starting Streamlit frontend...")
frontend_process = subprocess.Popen(
[sys.executable, "-m", "streamlit", "run", "./src/auracaster_webui/app.py"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
bufsize=1 # Line buffered
)
# Start a thread to stream the frontend output
frontend_thread = threading.Thread(target=stream_output, args=(frontend_process, "FRONTEND"), daemon=True)
frontend_thread.start()
return frontend_process
def run_mock():
"""Run the mock backend and frontend."""
# Start the backend and frontend
backend_process = start_backend()
frontend_process = start_frontend()
print("Airport Announcement System is running!")
print("Backend API: http://localhost:7999")
print("Frontend: http://localhost:8501")
try:
# Keep the main process running
while True:
time.sleep(1)
except KeyboardInterrupt:
print("\nShutting down Airport Announcement System...")
backend_process.terminate()
frontend_process.terminate()
print("Shutdown complete.")
if __name__ == "__main__":
os.chdir(os.path.dirname(__file__))
run_mock()