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."""
|
"""galaxis-agent webhook server."""
|
||||||
|
import asyncio
|
||||||
import hashlib
|
import hashlib
|
||||||
import hmac
|
import hmac
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
from contextlib import asynccontextmanager
|
||||||
|
|
||||||
from fastapi import FastAPI, Request, HTTPException
|
from fastapi import FastAPI, Request, HTTPException
|
||||||
from slowapi import Limiter
|
from slowapi import Limiter
|
||||||
@ -14,7 +16,41 @@ from slowapi.middleware import SlowAPIMiddleware
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
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)
|
limiter = Limiter(key_func=get_remote_address)
|
||||||
app.state.limiter = limiter
|
app.state.limiter = limiter
|
||||||
app.add_middleware(SlowAPIMiddleware)
|
app.add_middleware(SlowAPIMiddleware)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user