96 lines
3.1 KiB
Python
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()
|