From 3ed70e11d512718298a307c4c96673071a9dd1ae Mon Sep 17 00:00:00 2001 From: Harsha Vardhan Mannem <144146034+HarshaVardhanMannem@users.noreply.github.com> Date: Thu, 22 May 2025 00:45:07 -0500 Subject: [PATCH] Fix/server error handling (#212) * chore: add venv/ to gitignore * fix: add server error handling and graceful shutdown * Fix linting issues in server.py --- .gitignore | 1 + server.py | 36 +++++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 5dc0a3a..a7803ea 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ static/browser_history/*.gif # Virtual environments .venv +venv/ # Environment variables .env diff --git a/server.py b/server.py index 97ebd51..04461aa 100644 --- a/server.py +++ b/server.py @@ -7,7 +7,8 @@ Server script for running the DeerFlow API. import argparse import logging - +import signal +import sys import uvicorn # Configure logging @@ -18,6 +19,17 @@ logging.basicConfig( logger = logging.getLogger(__name__) + +def handle_shutdown(signum, frame): + """Handle graceful shutdown on SIGTERM/SIGINT""" + logger.info("Received shutdown signal. Starting graceful shutdown...") + sys.exit(0) + + +# Register signal handlers +signal.signal(signal.SIGTERM, handle_shutdown) +signal.signal(signal.SIGINT, handle_shutdown) + if __name__ == "__main__": # Parse command line arguments parser = argparse.ArgumentParser(description="Run the DeerFlow API server") @@ -50,16 +62,18 @@ if __name__ == "__main__": # Determine reload setting reload = False - - # Command line arguments override defaults if args.reload: reload = True - logger.info("Starting DeerFlow API server") - uvicorn.run( - "src.server:app", - host=args.host, - port=args.port, - reload=reload, - log_level=args.log_level, - ) + try: + logger.info(f"Starting DeerFlow API server on {args.host}:{args.port}") + uvicorn.run( + "src.server:app", + host=args.host, + port=args.port, + reload=reload, + log_level=args.log_level, + ) + except Exception as e: + logger.error(f"Failed to start server: {str(e)}") + sys.exit(1)