feat: Enhance review process with streaming events and detailed logging
This commit is contained in:
@@ -131,9 +131,41 @@ async def get_review(
|
||||
|
||||
|
||||
async def run_review_task(review_id: int, pr_number: int, repository_id: int, db: AsyncSession):
|
||||
"""Background task to run review"""
|
||||
"""Background task to run review with streaming"""
|
||||
from app.main import manager
|
||||
from datetime import datetime as dt
|
||||
|
||||
# Create event handler for streaming
|
||||
async def on_review_event(event: dict):
|
||||
"""Handle review events and broadcast to clients"""
|
||||
try:
|
||||
event_data = {
|
||||
"type": event.get("type", "agent_update"),
|
||||
"review_id": review_id,
|
||||
"pr_number": pr_number,
|
||||
"timestamp": dt.utcnow().isoformat(),
|
||||
"data": event
|
||||
}
|
||||
|
||||
# Save to DB
|
||||
from app.models.review_event import ReviewEvent
|
||||
db_event = ReviewEvent(
|
||||
review_id=review_id,
|
||||
event_type=event.get("type", "agent_update"),
|
||||
step=event.get("step"),
|
||||
message=event.get("message"),
|
||||
data=event
|
||||
)
|
||||
db.add(db_event)
|
||||
await db.commit()
|
||||
|
||||
# Broadcast
|
||||
await manager.broadcast(event_data)
|
||||
except Exception as e:
|
||||
print(f"Error in review event handler: {e}")
|
||||
|
||||
agent = ReviewerAgent(db)
|
||||
await agent.run_review(review_id, pr_number, repository_id)
|
||||
await agent.run_review_stream(review_id, pr_number, repository_id, on_event=on_review_event)
|
||||
|
||||
|
||||
@router.post("/{review_id}/retry")
|
||||
|
||||
@@ -13,11 +13,43 @@ router = APIRouter()
|
||||
|
||||
|
||||
async def start_review_task(review_id: int, pr_number: int, repository_id: int):
|
||||
"""Background task to start review"""
|
||||
"""Background task to start review with streaming"""
|
||||
from app.database import async_session_maker
|
||||
from app.main import manager
|
||||
from datetime import datetime as dt
|
||||
|
||||
async with async_session_maker() as db:
|
||||
# Create event handler for streaming
|
||||
async def on_review_event(event: dict):
|
||||
"""Handle review events and broadcast to clients"""
|
||||
try:
|
||||
event_data = {
|
||||
"type": event.get("type", "agent_update"),
|
||||
"review_id": review_id,
|
||||
"pr_number": pr_number,
|
||||
"timestamp": dt.utcnow().isoformat(),
|
||||
"data": event
|
||||
}
|
||||
|
||||
# Save to DB
|
||||
from app.models.review_event import ReviewEvent
|
||||
db_event = ReviewEvent(
|
||||
review_id=review_id,
|
||||
event_type=event.get("type", "agent_update"),
|
||||
step=event.get("step"),
|
||||
message=event.get("message"),
|
||||
data=event
|
||||
)
|
||||
db.add(db_event)
|
||||
await db.commit()
|
||||
|
||||
# Broadcast
|
||||
await manager.broadcast(event_data)
|
||||
except Exception as e:
|
||||
print(f"Error in webhook review event handler: {e}")
|
||||
|
||||
agent = ReviewerAgent(db)
|
||||
await agent.run_review(review_id, pr_number, repository_id)
|
||||
await agent.run_review_stream(review_id, pr_number, repository_id, on_event=on_review_event)
|
||||
|
||||
|
||||
@router.post("/gitea/{repository_id}")
|
||||
|
||||
Reference in New Issue
Block a user