mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-02-18 18:44:42 -05:00
## Summary - Created centralized service client helpers with thread caching in `util/clients.py` - Refactored service client management to eliminate health checks and improve performance - Enhanced logging in process cleanup to include error details - Improved retry mechanisms and resource cleanup across the platform - Updated multiple services to use new centralized client patterns ## Key Changes ### New Centralized Client Factory (`util/clients.py`) - Added thread-cached factory functions for all major service clients: - Database managers (sync and async) - Scheduler client - Notification manager - Execution event bus (Redis-based) - RabbitMQ execution queue (sync and async) - Integration credentials store - All clients use `@thread_cached` decorator for performance optimization ### Service Client Improvements - **Removed health checks**: Eliminated unnecessary health check calls from `get_service_client()` to reduce startup overhead - **Enhanced retry support**: Database manager clients now use request retry by default - **Better error handling**: Improved error propagation and logging ### Enhanced Logging and Cleanup - **Process termination logs**: Added error details to termination messages in `util/process.py` - **Retry mechanism updates**: Improved retry logic with better error handling in `util/retry.py` - **Resource cleanup**: Better resource management across executors and monitoring services ### Updated Service Usage - Refactored 21+ files to use new centralized client patterns - Updated all executor, monitoring, and notification services - Maintained backward compatibility while improving performance ## Files Changed - **Created**: `backend/util/clients.py` - Centralized client factory with thread caching - **Modified**: 21 files across blocks, executor, monitoring, and utility modules - **Key areas**: Service client initialization, resource cleanup, retry mechanisms ## Test Plan - [x] Verify all existing tests pass - [x] Validate service startup and client initialization - [x] Test resource cleanup on process termination - [x] Confirm retry mechanisms work correctly - [x] Validate thread caching performance improvements - [x] Ensure no breaking changes to existing functionality ## Breaking Changes None - all changes maintain backward compatibility. ## Additional Notes This refactoring centralizes client management patterns that were scattered across the codebase, making them more consistent and performant through thread caching. The removal of health checks reduces startup time while maintaining reliability through improved retry mechanisms. 🤖 Generated with [Claude Code](https://claude.ai/code)
42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
import pytest
|
|
|
|
from backend.data import db
|
|
from backend.server.model import CreateGraph
|
|
from backend.usecases.sample import create_test_graph, create_test_user
|
|
from backend.util.clients import get_scheduler_client
|
|
from backend.util.test import SpinTestServer
|
|
|
|
|
|
@pytest.mark.asyncio(loop_scope="session")
|
|
async def test_agent_schedule(server: SpinTestServer):
|
|
await db.connect()
|
|
test_user = await create_test_user()
|
|
test_graph = await server.agent_server.test_create_graph(
|
|
create_graph=CreateGraph(graph=create_test_graph()),
|
|
user_id=test_user.id,
|
|
)
|
|
|
|
scheduler = get_scheduler_client()
|
|
schedules = await scheduler.get_execution_schedules(test_graph.id, test_user.id)
|
|
assert len(schedules) == 0
|
|
|
|
schedule = await scheduler.add_execution_schedule(
|
|
graph_id=test_graph.id,
|
|
user_id=test_user.id,
|
|
graph_version=1,
|
|
cron="0 0 * * *",
|
|
input_data={"input": "data"},
|
|
input_credentials={},
|
|
)
|
|
assert schedule
|
|
|
|
schedules = await scheduler.get_execution_schedules(test_graph.id, test_user.id)
|
|
assert len(schedules) == 1
|
|
assert schedules[0].cron == "0 0 * * *"
|
|
|
|
await scheduler.delete_schedule(schedule.id, user_id=test_user.id)
|
|
schedules = await scheduler.get_execution_schedules(
|
|
test_graph.id, user_id=test_user.id
|
|
)
|
|
assert len(schedules) == 0
|