Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Virtual environments
.venv/
venv/
ENV/
env/

# Python
__pycache__/
*.pyc
1 change: 0 additions & 1 deletion .venv/bin/python

This file was deleted.

1 change: 0 additions & 1 deletion .venv/bin/python3

This file was deleted.

1 change: 0 additions & 1 deletion .venv/bin/python3.12

This file was deleted.

1 change: 0 additions & 1 deletion .venv/lib64

This file was deleted.

5 changes: 0 additions & 5 deletions .venv/pyvenv.cfg

This file was deleted.

1 change: 0 additions & 1 deletion backend/app/core/error_utils.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import logging
import traceback
import os
from typing import Dict, Any

from backend.app.core.config import settings
Expand Down
279 changes: 133 additions & 146 deletions backend/app/core/orchestrator.py

Large diffs are not rendered by default.

41 changes: 41 additions & 0 deletions backend/app/core/time_tracker.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import logging
from datetime import datetime
from backend.app.cache.redis_client import redis_client

logger = logging.getLogger(__name__)

REDIS_KEY_PREFIX = "report_timer:"

def start_timer(report_id: str):
"""
Records the start timestamp for a given report_id in Redis.
"""
try:
start_time = datetime.now().isoformat()
key = f"{REDIS_KEY_PREFIX}{report_id}"
redis_client.set_cache(key, start_time, ttl=3600 * 24) # Store for 24 hours
logger.info(f"Timer started for report_id: {report_id} at {start_time}")
except Exception as e:
logger.error(f"Failed to start timer for report_id {report_id}: {e}", exc_info=True)

def finish_timer(report_id: str) -> float | None:
"""
Retrieves the start timestamp, calculates the duration, and removes the timer from Redis.
Returns the duration in seconds or None if the timer was not found or an error occurred.
"""
key = f"{REDIS_KEY_PREFIX}{report_id}"
try:
start_time_str = redis_client.get_cache(key)
if start_time_str:
redis_client.delete_cache(key)
start_time = datetime.fromisoformat(start_time_str.decode('utf-8'))
end_time = datetime.now()
duration = (end_time - start_time).total_seconds()
logger.info(f"Timer finished for report_id: {report_id}. Duration: {duration:.2f} seconds.")
return duration
else:
logger.warning(f"Timer not found for report_id: {report_id}")
return None
except Exception as e:
logger.error(f"Failed to finish timer for report_id {report_id}: {e}", exc_info=True)
return None
1 change: 0 additions & 1 deletion backend/app/services/agents/code_audit_agent.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import os
import re
import logging
import json
import hashlib
from typing import Dict, Any, List
Expand Down
2 changes: 1 addition & 1 deletion backend/tests/test_orchestrator_updates.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import pytest
from unittest.mock import AsyncMock, MagicMock
from backend.app.core.orchestrator import Orchestrator
from backend.app.db.models.report_state import ReportStatusEnum, ReportState
from backend.app.db.models.report_state import ReportStatusEnum
from sqlalchemy.ext.asyncio import AsyncSession
from backend.app.db.repositories.report_repository import ReportRepository

Expand Down