|
4 | 4 | This is the main module for the agent. |
5 | 5 | It is responsible for starting the FastAPI server. |
6 | 6 | """ |
| 7 | +import os |
| 8 | +import sys |
| 9 | +import argparse |
7 | 10 | from contextlib import asynccontextmanager |
8 | 11 |
|
9 | 12 | import uvicorn |
@@ -68,4 +71,58 @@ async def root() -> dict: |
68 | 71 |
|
69 | 72 |
|
70 | 73 | def start(): |
71 | | - uvicorn.run("netdriver.agent.main:app", host="0.0.0.0", port=8000, reload=True) |
| 74 | + """Start the agent server with optional configuration file parameter.""" |
| 75 | + parser = argparse.ArgumentParser(description="NetDriver Agent Server") |
| 76 | + parser.add_argument( |
| 77 | + "-c", "--config", |
| 78 | + type=str, |
| 79 | + default=None, |
| 80 | + help="Path to configuration file (default: config/agent/agent.yml or NETDRIVER_AGENT_CONFIG env var)" |
| 81 | + ) |
| 82 | + parser.add_argument( |
| 83 | + "--host", |
| 84 | + type=str, |
| 85 | + default="0.0.0.0", |
| 86 | + help="Host to bind (default: 0.0.0.0)" |
| 87 | + ) |
| 88 | + parser.add_argument( |
| 89 | + "-p", "--port", |
| 90 | + type=int, |
| 91 | + default=8000, |
| 92 | + help="Port to bind (default: 8000)" |
| 93 | + ) |
| 94 | + parser.add_argument( |
| 95 | + "--reload", |
| 96 | + action="store_true", |
| 97 | + default=True, |
| 98 | + help="Enable auto-reload (default: True)" |
| 99 | + ) |
| 100 | + parser.add_argument( |
| 101 | + "--no-reload", |
| 102 | + action="store_true", |
| 103 | + help="Disable auto-reload" |
| 104 | + ) |
| 105 | + |
| 106 | + args = parser.parse_args() |
| 107 | + |
| 108 | + # Set config file path via environment variable if specified |
| 109 | + if args.config: |
| 110 | + os.environ["NETDRIVER_AGENT_CONFIG"] = args.config |
| 111 | + # Reload container configuration with new config file |
| 112 | + container.config.from_yaml(args.config) |
| 113 | + # Reconfigure logging with new config |
| 114 | + logman.configure_logman( |
| 115 | + level=container.config.logging.level(), |
| 116 | + intercept_loggers=container.config.logging.intercept_loggers(), |
| 117 | + log_file=container.config.logging.log_file() |
| 118 | + ) |
| 119 | + |
| 120 | + # Handle reload flag |
| 121 | + reload = args.reload and not args.no_reload |
| 122 | + |
| 123 | + uvicorn.run( |
| 124 | + "netdriver.agent.main:app", |
| 125 | + host=args.host, |
| 126 | + port=args.port, |
| 127 | + reload=reload |
| 128 | + ) |
0 commit comments