feat: Enhance review process with streaming events and detailed logging

This commit is contained in:
Primakov Alexandr Alexandrovich
2025-10-13 17:26:41 +03:00
parent a762d09b3b
commit 2f29ccff74
10 changed files with 309 additions and 205 deletions

View File

@@ -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")

View File

@@ -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}")