From 00b594a14f99afe60e1b1f785e3e2ef05f5181cc Mon Sep 17 00:00:00 2001 From: Kristina <7614497+khjrtbrg@users.noreply.github.com> Date: Wed, 12 Aug 2026 11:49:37 +0200 Subject: [PATCH] [web] block idle connection-restored events (#36425) GitOrigin-RevId: 74b142f72f7982e6df9e0208965d8372e23afc74 --- .../Features/Analytics/AnalyticsController.mjs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/services/web/app/src/Features/Analytics/AnalyticsController.mjs b/services/web/app/src/Features/Analytics/AnalyticsController.mjs index 76b5452e58..97753be08c 100644 --- a/services/web/app/src/Features/Analytics/AnalyticsController.mjs +++ b/services/web/app/src/Features/Analytics/AnalyticsController.mjs @@ -45,10 +45,25 @@ async function updateEditingSession(req, res, next) { res.sendStatus(202) } +// TODO: remove after clients running pre-#36315 code have drained +function isIdleConnectionRestoredEvent(event, body) { + if (event !== 'connection-restored') { + return false + } + if (body.resolution === 'out-of-sync') { + return false + } + return body.pendingChars === 0 && body.inflightChars === 0 +} + function recordEvent(req, res, next) { if (!Features.hasFeature('analytics')) { return res.sendStatus(202) } + if (isIdleConnectionRestoredEvent(req.params.event, req.body)) { + metrics.inc('analytics_idle_connection_restored_blocked') + return res.sendStatus(202) + } delete req.body._csrf AnalyticsManager.recordEventForSession( req.session,