blob: cc539ba1a4223557a40e1ba2540e0c61c7d8b005 [file] [log] [blame] [raw]
#!/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()