ujwal55's picture
Update start.py
15aac81 verified
import subprocess
import sys
import time
import os
import signal
import atexit
# Global process references
processes = []
def cleanup_processes():
"""Clean up all processes"""
print("\n🧹 Cleaning up processes...")
# Kill our spawned processes
for proc in processes:
try:
if proc and proc.poll() is None:
proc.terminate()
proc.wait(timeout=5)
except:
pass
# Kill any remaining processes by name
os.system("pkill -f 'uvicorn' 2>/dev/null")
os.system("pkill -f 'streamlit' 2>/dev/null")
print("βœ… Cleanup completed")
def signal_handler(signum, frame):
"""Handle shutdown signals"""
print(f"\n⚠️ Received signal {signum}, shutting down...")
cleanup_processes()
sys.exit(0)
def main():
print("πŸš€ Starting GitHub Activity Feed...")
# Register cleanup function
atexit.register(cleanup_processes)
# Set up signal handlers
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
# Clean up any existing processes
cleanup_processes()
time.sleep(2)
try:
# Start FastAPI in background
print("πŸ“‘ Starting FastAPI webhook server...")
fastapi_process = subprocess.Popen([
sys.executable, "-c", """
import uvicorn
from api import app
import socket
def find_free_port(start=7861):
for port in range(start, start + 20):
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(('', port))
print(f'FastAPI running on port {port}')
return port
except OSError:
continue
return 8000
port = find_free_port()
uvicorn.run(app, host='0.0.0.0', port=port, log_level='warning', access_log=False)
"""
], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
processes.append(fastapi_process)
# Wait for FastAPI to start
print("⏳ Waiting for FastAPI to initialize...")
time.sleep(8)
# Start Streamlit
print("πŸ–₯️ Starting Streamlit dashboard...")
streamlit_process = subprocess.Popen([
"streamlit", "run", "app.py",
"--server.port=8501",
"--server.address=0.0.0.0",
"--server.headless=true",
"--global.disableWatchdogWarning=true",
"--server.enableCORS=false",
"--server.enableXsrfProtection=false",
"--browser.gatherUsageStats=false"
], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
processes.append(streamlit_process)
print("βœ… Both services started successfully!")
print("πŸ“‘ FastAPI webhook server is running")
print("πŸ–₯️ Streamlit dashboard available on port 8501")
print("πŸ”„ Monitoring services...")
# Monitor processes
while True:
# Check if processes are still running
if fastapi_process.poll() is not None:
print("❌ FastAPI process stopped")
break
if streamlit_process.poll() is not None:
print("❌ Streamlit process stopped")
break
time.sleep(10)
except KeyboardInterrupt:
print("\n⚠️ Received keyboard interrupt")
cleanup_processes()
except Exception as e:
print(f"❌ Error: {e}")
cleanup_processes()
sys.exit(1)
if __name__ == "__main__":
main()