diff --git a/agent/webapp.py b/agent/webapp.py index ebcc316..5f6e646 100644 --- a/agent/webapp.py +++ b/agent/webapp.py @@ -1,10 +1,12 @@ """galaxis-agent webhook server.""" +import asyncio import hashlib import hmac import json import logging import os import re +from contextlib import asynccontextmanager from fastapi import FastAPI, Request, HTTPException from slowapi import Limiter @@ -14,7 +16,41 @@ from slowapi.middleware import SlowAPIMiddleware logger = logging.getLogger(__name__) -app = FastAPI(title="galaxis-agent") + +@asynccontextmanager +async def lifespan(app: FastAPI): + """애플리케이션 시작/종료 시 리소스를 관리한다.""" + from agent.task_queue import get_task_queue + from agent.message_store import get_message_store + from agent.dispatcher import Dispatcher + from agent.integrations.discord_handler import DiscordHandler + + task_queue = await get_task_queue() + message_store = await get_message_store() + + dispatcher = Dispatcher(task_queue=task_queue) + await dispatcher.start() + app.state.dispatcher = dispatcher + + discord_token = os.environ.get("DISCORD_TOKEN", "") + discord_handler = None + if discord_token: + discord_handler = DiscordHandler() + discord_task = asyncio.create_task(discord_handler.start(discord_token)) + app.state.discord_handler = discord_handler + logger.info("Discord bot starting...") + + yield + + await dispatcher.stop() + if discord_handler: + await discord_handler.close() + await task_queue.close() + await message_store.close() + logger.info("Application shutdown complete") + + +app = FastAPI(title="galaxis-agent", lifespan=lifespan) limiter = Limiter(key_func=get_remote_address) app.state.limiter = limiter app.add_middleware(SlowAPIMiddleware)