#!/usr/bin/env python3
"""
Main entry point for weather-by-met application.
Runs both the scheduler and server processes concurrently.
"""
import subprocess
import sys
import signal
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def run_both_processes():
"""Run scheduler and server processes concurrently."""
processes = []
try:
logger.info("Starting weather-by-met application...")
logger.info("Launching scheduler process...")
scheduler = subprocess.Popen(
[sys.executable, 'scheduler.py'],
stdout=sys.stdout,
stderr=sys.stderr
)
processes.append(('scheduler', scheduler))
logger.info("Launching server process...")
server = subprocess.Popen(
[sys.executable, 'server.py'],
stdout=sys.stdout,
stderr=sys.stderr
)
processes.append(('server', server))
logger.info("Both processes started successfully")
# Wait for processes to complete
for name, proc in processes:
proc.wait()
logger.error(f"{name} process exited with code {proc.returncode}")
except KeyboardInterrupt:
logger.info("Received interrupt signal, shutting down...")
for name, proc in processes:
if proc.poll() is None:
logger.info(f"Terminating {name} process...")
proc.terminate()
try:
proc.wait(timeout=5)
except subprocess.TimeoutExpired:
logger.warning(f"Force killing {name} process...")
proc.kill()
except Exception as e:
logger.error(f"Error running processes: {e}", exc_info=True)
for name, proc in processes:
if proc.poll() is None:
proc.kill()
sys.exit(1)
if __name__ == '__main__':
run_both_processes()