diff --git a/ooniapi/services/ooniprobe/src/ooniprobe/metrics.py b/ooniapi/services/ooniprobe/src/ooniprobe/metrics.py index 324b5e116..e03d1dc0d 100644 --- a/ooniapi/services/ooniprobe/src/ooniprobe/metrics.py +++ b/ooniapi/services/ooniprobe/src/ooniprobe/metrics.py @@ -79,3 +79,7 @@ class Metrics: ) TEST_LIST_URLS_COUNT = Gauge("test_list_urls_count", "Size of reported test list") + + CLIENT_DISCONNECT = Counter( + "client_upload_disconnect", "Client disconnected while awaiting report" + ) diff --git a/ooniapi/services/ooniprobe/src/ooniprobe/routers/reports.py b/ooniapi/services/ooniprobe/src/ooniprobe/routers/reports.py index c90625ac5..3a6f4b45e 100644 --- a/ooniapi/services/ooniprobe/src/ooniprobe/routers/reports.py +++ b/ooniapi/services/ooniprobe/src/ooniprobe/routers/reports.py @@ -141,7 +141,16 @@ async def receive_measurement( Metrics.MSMNT_DISCARD_CC_ZZ.inc() return empty_measurement - data = await request.body() + try: + data = await request.body() + except ClientDisconnect: + log.info(f"Client disconnected mid-upload") + Metrics.CLIENT_DISCONNECT.inc() + error("Client disconnect") + except Exception as e: + log.error(f"Uncaught exception {e}") + error("Server error", status_code=500) + if content_encoding == "zstd": try: compressed_len = len(data)