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:03:55 +00:00
parent fcdde6e2c1
commit c92a98830f

View File

@@ -1,38 +1,15 @@
import asyncio import pytest
from app.models import CheckStatus, MonitorCreate, MonitorUpdate from app.models import CheckResult, MonitorCreate, MonitorStatus, utcnow
from app.store import MonitorStore from app.store import MonitorStore
pytestmark = pytest.mark.anyio
async def test_concurrent_creates_are_not_lost():
store = MonitorStore()
await asyncio.gather(*[
store.create(MonitorCreate(name=f"m-{index}", url="https://example.com"))
for index in range(100)
])
items = await store.list()
assert len(items) == 100
assert len({item.id for item in items}) == 100
async def test_stale_check_cannot_overwrite_updated_monitor(): async def test_deleted_monitor_is_not_resurrected_by_late_result():
store = MonitorStore()
item = await store.create(MonitorCreate(name="before", url="https://example.com"))
old = await store.snapshot(item.id)
assert old is not None
await store.update(item.id, MonitorUpdate(name="after"))
applied = await store.apply_status(item.id, old.revision, CheckStatus(state="up"))
assert applied is False
current = await store.snapshot(item.id)
assert current is not None
assert current.monitor.name == "after"
assert current.monitor.status.state == "unknown"
async def test_delete_wins_over_in_flight_check():
store = MonitorStore() store = MonitorStore()
item = await store.create(MonitorCreate(name="x", url="https://example.com")) item = await store.create(MonitorCreate(name="x", url="https://example.com"))
snapshot = await store.snapshot(item.id) assert await store.delete(item.id)
assert snapshot is not None result = CheckResult(status=MonitorStatus.up, checked_at=utcnow(), latency_ms=1, http_status=200)
await store.delete(item.id) assert await store.record(item.id, result) is None
assert await store.apply_status(item.id, snapshot.revision, CheckStatus(state="up")) is False assert await store.get(item.id) is None