Fix: Worker polling set to 1h and heartbeat silenced to prevent DB bloating (Phase 9)
Browse files- backend/worker.py +9 -3
backend/worker.py
CHANGED
|
@@ -7,6 +7,7 @@ import uuid
|
|
| 7 |
from services.task_queue import TaskQueueService
|
| 8 |
from services.supabase_service import supabase
|
| 9 |
from services.agent_runner_service import AgentRunnerService
|
|
|
|
| 10 |
from services.config import settings
|
| 11 |
|
| 12 |
logging.basicConfig(level=logging.INFO)
|
|
@@ -87,6 +88,11 @@ class AubmWorker:
|
|
| 87 |
logger.info("Task %s completed successfully.", task_id)
|
| 88 |
else:
|
| 89 |
raise RuntimeError(f"Assigned agent not found: {agent_id}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 90 |
except Exception as e:
|
| 91 |
logger.error("Failed to process task %s: %s", task_id, e)
|
| 92 |
self.failed_count += 1
|
|
@@ -96,10 +102,10 @@ class AubmWorker:
|
|
| 96 |
self.max_attempts,
|
| 97 |
self.retry_delay_seconds,
|
| 98 |
)
|
| 99 |
-
await self.heartbeat("error")
|
| 100 |
else:
|
| 101 |
-
# No tasks, sleep for
|
| 102 |
-
|
|
|
|
| 103 |
finally:
|
| 104 |
if heartbeat_task:
|
| 105 |
heartbeat_task.cancel()
|
|
|
|
| 7 |
from services.task_queue import TaskQueueService
|
| 8 |
from services.supabase_service import supabase
|
| 9 |
from services.agent_runner_service import AgentRunnerService
|
| 10 |
+
from services.budget_service import BudgetExceededError
|
| 11 |
from services.config import settings
|
| 12 |
|
| 13 |
logging.basicConfig(level=logging.INFO)
|
|
|
|
| 88 |
logger.info("Task %s completed successfully.", task_id)
|
| 89 |
else:
|
| 90 |
raise RuntimeError(f"Assigned agent not found: {agent_id}")
|
| 91 |
+
except BudgetExceededError as e:
|
| 92 |
+
logger.warning("Budget blocked queued task %s: %s", task_id, e)
|
| 93 |
+
self.failed_count += 1
|
| 94 |
+
await TaskQueueService.mark_failed(task_id, str(e))
|
| 95 |
+
await self.heartbeat("error")
|
| 96 |
except Exception as e:
|
| 97 |
logger.error("Failed to process task %s: %s", task_id, e)
|
| 98 |
self.failed_count += 1
|
|
|
|
| 102 |
self.max_attempts,
|
| 103 |
self.retry_delay_seconds,
|
| 104 |
)
|
|
|
|
| 105 |
else:
|
| 106 |
+
# No tasks, sleep for an hour as requested (3600s)
|
| 107 |
+
# This prevents filling the DB with poll/heartbeat logs
|
| 108 |
+
await asyncio.sleep(3600)
|
| 109 |
finally:
|
| 110 |
if heartbeat_task:
|
| 111 |
heartbeat_task.cancel()
|