Files
freemo 92c83ecc7e
CI / benchmark-publish (pull_request) Has been skipped
CI / lint (pull_request) Successful in 16s
CI / build (pull_request) Successful in 17s
CI / quality (pull_request) Successful in 19s
CI / typecheck (pull_request) Successful in 33s
CI / security (pull_request) Successful in 35s
CI / integration_tests (pull_request) Successful in 2m41s
CI / unit_tests (pull_request) Successful in 6m18s
CI / docker (pull_request) Successful in 1m2s
CI / benchmark-regression (pull_request) Successful in 15m41s
CI / coverage (pull_request) Failing after 20m52s
Fix: Fixed linting errors
2026-02-22 14:18:24 -05:00

107 lines
2.9 KiB
Python

"""ASV benchmarks for CONC3 cleanup service throughput.
Measures the performance of scan and purge operations to ensure
cleanup overhead stays within acceptable bounds.
"""
from __future__ import annotations
import importlib
import sys
import tempfile
from pathlib import Path
# Ensure the local *source* tree is importable.
_SRC = str(Path(__file__).resolve().parents[1] / "src")
if _SRC not in sys.path:
sys.path.insert(0, _SRC)
import cleveragents # noqa: E402
importlib.reload(cleveragents)
from datetime import UTC # noqa: E402
from cleveragents.application.services.cleanup_service import ( # noqa: E402
CleanupService,
)
from cleveragents.config.settings import Settings # noqa: E402
def _make_settings(**overrides: object) -> Settings:
"""Create Settings with overrides."""
Settings._instance = None
settings = Settings()
for key, value in overrides.items():
setattr(settings, key, value)
return settings
class ScanBenchmark:
"""Benchmark cleanup scan operations."""
def setup(self) -> None:
self.settings = _make_settings(cleanup_sandbox_max_age_hours=48)
self.service = CleanupService(
settings=self.settings,
active_plan_ids=frozenset(),
)
def time_scan_empty(self) -> None:
"""Scan with no stale resources."""
self.service.scan()
class CheckpointBenchmark:
"""Benchmark checkpoint scanning and pruning."""
def setup(self) -> None:
self.settings = _make_settings(cleanup_checkpoint_max_per_plan=50)
self.service = CleanupService(
settings=self.settings,
active_plan_ids=frozenset(),
)
self.checkpoint_dir = Path(
tempfile.mkdtemp(prefix="ca-bench-checkpoint-"),
)
for i in range(100):
f = self.checkpoint_dir / f"checkpoint_{i:04d}.json"
f.write_text(f'{{"step": {i}}}')
def teardown(self) -> None:
import shutil
shutil.rmtree(self.checkpoint_dir, ignore_errors=True)
def time_scan_checkpoints(self) -> None:
self.service.scan_checkpoints_for_plan(self.checkpoint_dir)
def time_prune_checkpoints(self) -> None:
self.service.prune_checkpoints_for_plan(self.checkpoint_dir)
class SessionScanBenchmark:
"""Benchmark session inactivity scanning."""
def setup(self) -> None:
from datetime import datetime, timedelta
self.settings = _make_settings(
cleanup_session_inactivity_days=30,
)
self.service = CleanupService(
settings=self.settings,
active_plan_ids=frozenset(),
)
now = datetime.now(tz=UTC)
self.sessions = [
{
"session_id": f"sess-{i:04d}",
"updated_at": now - timedelta(days=i),
}
for i in range(100)
]
def time_scan_sessions(self) -> None:
self.service.scan_inactive_sessions(self.sessions)