feat: Add WebSocket ping/pong + detailed streaming debug + initial review messages

This commit is contained in:
Primakov Alexandr Alexandrovich
2025-10-13 10:30:56 +03:00
parent 3df9e61b55
commit a27a0fa0f0
3 changed files with 169 additions and 47 deletions

View File

@@ -166,6 +166,25 @@ class ReviewTaskWorker:
from app.main import manager
from datetime import datetime as dt
# Send initial "review started" message
logger.info(f" 📢 Отправка начального сообщения о старте review...")
try:
initial_message = {
"type": "review_started",
"review_id": review.id,
"pr_number": pull_request.pr_number,
"timestamp": dt.utcnow().isoformat(),
"data": {
"message": f"Начало review для PR #{pull_request.pr_number}",
"repository_id": repository.id,
"repository_name": f"{repository.repo_owner}/{repository.repo_name}"
}
}
await manager.broadcast(initial_message)
logger.info(f" ✅ Начальное сообщение отправлено: {len(manager.active_connections)} подключений")
except Exception as e:
logger.error(f" ❌ Ошибка отправки начального сообщения: {e}")
# Create event handler
async def on_review_event(event: dict):
"""Handle review events and broadcast to clients"""
@@ -179,6 +198,8 @@ class ReviewTaskWorker:
"data": event
}
logger.info(f" 🔔 Broadcasting event: type={event.get('type')}, connections={len(manager.active_connections)}")
# Broadcast to all connected clients
await manager.broadcast(event_data)
@@ -188,9 +209,11 @@ class ReviewTaskWorker:
logger.info(f" 📍 Step: {step}")
elif event.get("type") == "llm_message":
message = event.get("message", "")[:100]
logger.debug(f" 💬 LLM: {message}...")
logger.info(f" 💬 LLM: {message}...")
except Exception as e:
logger.error(f" ❌ Ошибка broadcast события: {e}")
import traceback
traceback.print_exc()
agent = ReviewerAgent(db)
await agent.run_review_stream(
@@ -201,6 +224,21 @@ class ReviewTaskWorker:
)
logger.info(f" ✅ Review завершен для PR #{pull_request.pr_number}")
# Send completion message
try:
completion_message = {
"type": "review_completed",
"review_id": review.id,
"pr_number": pull_request.pr_number,
"timestamp": dt.utcnow().isoformat(),
"data": {
"message": f"Review завершен для PR #{pull_request.pr_number}"
}
}
await manager.broadcast(completion_message)
except Exception as e:
logger.error(f" ❌ Ошибка отправки сообщения о завершении: {e}")
# Global worker instance