| #!/usr/bin/env python3 |
| """ |
| Webhook服务器启动入口 |
| 用于启动独立的Webhook消息广播服务器 |
| """ |
| |
| import sys |
| import os |
| import asyncio |
| import logging |
| from pathlib import Path |
| |
| # 添加项目根目录到Python路径 |
| project_root = Path(__file__).parent.parent.parent.parent |
| sys.path.insert(0, str(project_root)) |
| |
| from src.claude_agent.utils.config import get_config_manager |
| from src.claude_agent.webhook.server import WebhookServer |
| from src.claude_agent.webhook.models import WebhookConfig |
| |
| |
| def setup_logging(config): |
| """设置日志""" |
| logging_config = config.get('logging', {}) |
| log_level = getattr(logging, logging_config.get('level', 'INFO').upper()) |
| |
| # 配置日志格式 |
| log_format = logging_config.get('format', '[%(asctime)s] %(levelname)s %(message)s') |
| |
| # 设置根日志器 |
| logging.basicConfig( |
| level=log_level, |
| format=log_format, |
| datefmt='%Y-%m-%d %H:%M:%S' |
| ) |
| |
| # 设置第三方库的日志级别 |
| logging.getLogger('aiohttp').setLevel(logging.WARNING) |
| logging.getLogger('uvicorn').setLevel(logging.INFO) |
| |
| |
| def create_webhook_config(config) -> WebhookConfig: |
| """从配置创建WebhookConfig对象""" |
| webhook_config = config.get('webhook', {}) |
| server_config = webhook_config.get('server', {}) |
| |
| return WebhookConfig( |
| server_host=server_config.get('host', '0.0.0.0'), |
| server_port=server_config.get('port', 8080), |
| auth_token=webhook_config.get('auth_token', 'default-token'), |
| webhook_url=webhook_config.get('server_url'), |
| connection_timeout=server_config.get('connection_timeout', 10.0), |
| request_timeout=server_config.get('request_timeout', 5.0), |
| max_retries=server_config.get('max_retries', 3), |
| retry_delay=server_config.get('retry_delay', 1.0) |
| ) |
| |
| |
| def main(): |
| """主函数""" |
| logger = None |
| try: |
| # 加载配置 |
| config_manager = get_config_manager() |
| config = config_manager._config |
| |
| # 检查webhook是否启用 |
| if not config.get('webhook', {}).get('enabled', False): |
| print("❌ Webhook功能未启用,请在配置文件中设置 webhook.enabled = true") |
| return |
| |
| # 设置日志 |
| setup_logging(config) |
| |
| logger = logging.getLogger(__name__) |
| logger.info("正在启动Webhook服务器...") |
| |
| # 创建Webhook配置 |
| webhook_config = create_webhook_config(config) |
| |
| # 创建并启动服务器 |
| server = WebhookServer(webhook_config) |
| |
| logger.info(f"Webhook服务器将在 {webhook_config.server_host}:{webhook_config.server_port} 启动") |
| logger.info(f"认证Token: {webhook_config.auth_token[:8]}...") |
| |
| # 启动服务器 (同步调用) |
| server.start_server() |
| |
| except KeyboardInterrupt: |
| if logger: |
| logger.info("收到中断信号,正在关闭服务器...") |
| else: |
| print("收到中断信号,正在关闭服务器...") |
| except Exception as e: |
| if logger: |
| logger.error(f"启动Webhook服务器失败: {e}") |
| else: |
| print(f"启动Webhook服务器失败: {e}") |
| sys.exit(1) |
| |
| |
| if __name__ == "__main__": |
| main() |