feat: integrate Discord bot and Dispatcher in FastAPI lifespan
Adds asynccontextmanager lifespan to webapp.py that: - Initializes task_queue and message_store on startup - Starts Dispatcher as background task - Starts Discord bot gateway if DISCORD_TOKEN is set - Properly shuts down all resources on application exit This completes Phase 3 Task 6, enabling the webapp to run Discord bot and dispatcher concurrently with the webhook server.
This commit is contained in:
parent
da9caca791
commit
7e95aeb8ce
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user