decomposer: generate deliverable files for Define the service contract and project architecture for the FastAPI endpoint monitoring service.; Implement the typed monitor CRUD API and concurrency-safe in-memory state according to the service design.; Implement secure on-demand endpoint checks with status updates, latency measurement, robust error handling, and redacted structured logs.; Add operational API endpoints and environment-driven runtime configuration to the monitoring service.; Create automated tests for the monitoring service.; Package the service with Docker and developer documentation.; Validate the complete project.
Some checks failed
ci / container (push) Has been cancelled
ci / quality (push) Has been cancelled

This commit is contained in:
2026-08-09 16:07:16 +00:00
parent 001c05adec
commit 6cbcce5d74

View File

@@ -1,15 +1,22 @@
import asyncio
import pytest import pytest
from app.models import CheckResult, MonitorCreate, MonitorStatus, utcnow from app.models import CurrentStatus, MonitorCreate, MonitorState
from app.store import MonitorStore from app.store import MonitorStore
pytestmark = pytest.mark.anyio
@pytest.mark.anyio
async def test_deleted_monitor_is_not_resurrected_by_late_result(): async def test_concurrent_status_updates_are_valid() -> None:
store = MonitorStore() store = MonitorStore()
item = await store.create(MonitorCreate(name="x", url="https://example.com")) monitor = await store.create(MonitorCreate(name="x", target_url="https://example.com"))
assert await store.delete(item.id)
result = CheckResult(status=MonitorStatus.up, checked_at=utcnow(), latency_ms=1, http_status=200) async def set_one(code: int) -> None:
assert await store.record(item.id, result) is None await store.set_status(
assert await store.get(item.id) is None monitor.id,
CurrentStatus(state=MonitorState.UP, latency_ms=1, http_status=code),
)
await asyncio.gather(*(set_one(code) for code in range(200, 210)))
saved = await store.get(monitor.id)
assert saved.current_status.http_status in range(200, 210)