Files
2025-10-29 01:01:17 +02:00

138 lines
4.5 KiB
Python

#!/usr/bin/env python3
import sys
import os
import subprocess
import time
import signal
from service_manager import ServiceManager
def show_usage():
print("Usage: python main.py <command> [service_name]")
print("Commands:")
print(" start [service] - Start all services or specific service")
print(" stop [service] - Stop all services or specific service")
print(" restart [service] - Restart specific service")
print(" status - Show status of all services")
print(" run - Start all services and launch UI (default)")
print(" ui - Launch UI only (assumes services are running)")
print(" kill - Force kill all services (use if stop doesn't work)")
print("\nService names: scanner, specialist, frontier, random-forest, ensemble, planning, notification-service, notification-receiver, ui")
print("\nExamples:")
print(" python main.py run # Start everything and launch UI")
print(" python main.py start # Start all services")
print(" python main.py start scanner # Start only scanner service")
print(" python main.py status # Check service status")
print(" python main.py stop # Stop all services")
print(" python main.py kill # Force kill all services")
def launch_ui():
"""Launch the UI assuming services are already running"""
print("Launching UI...")
try:
from services.ui import App
app = App()
app.run()
except Exception as e:
print(f"Failed to launch UI: {e}")
print("Make sure all services are running first. Use 'python main.py status' to check.")
def run_full_app():
"""Start all services and launch the UI"""
print("Starting The Price is Right - Full Application")
print("=" * 50)
# Initialize service manager
manager = ServiceManager()
# Handle Ctrl+C gracefully
def signal_handler(sig, frame):
print("\nReceived interrupt signal. Cleaning up...")
manager.cleanup()
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
try:
# Start all services first
print("Starting microservices...")
if not manager.start_all():
print("Failed to start some services. Check logs/ directory for details.")
return
print("\nWaiting for services to initialize...")
time.sleep(3) # Give services time to start
# Now launch the UI
launch_ui()
except KeyboardInterrupt:
print("\nInterrupted by user")
except Exception as e:
print(f"Error: {e}")
finally:
manager.cleanup()
def main():
if len(sys.argv) < 2:
# Default behavior: run the full app
run_full_app()
return
command = sys.argv[1].lower()
service_name = sys.argv[2] if len(sys.argv) > 2 else None
# Initialize service manager
manager = ServiceManager()
# Handle Ctrl+C gracefully
def signal_handler(sig, frame):
print("\nReceived interrupt signal. Cleaning up...")
manager.cleanup()
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
try:
if command == 'run':
run_full_app()
elif command == 'ui':
launch_ui()
elif command == 'start':
if service_name:
manager.start_service(service_name)
else:
manager.start_all()
elif command == 'stop':
if service_name:
manager.stop_service(service_name)
else:
manager.stop_all()
elif command == 'restart':
if service_name:
manager.restart(service_name)
else:
print("Please specify a service name to restart")
elif command == 'status':
manager.status()
elif command == 'kill':
manager.force_kill_all()
elif command in ['help', '-h', '--help']:
show_usage()
else:
print(f"Unknown command: {command}")
show_usage()
sys.exit(1)
except KeyboardInterrupt:
print("\nInterrupted by user")
manager.cleanup()
except Exception as e:
print(f"Error: {e}")
manager.cleanup()
sys.exit(1)
if __name__ == "__main__":
main()