Просмотр исходного кода

Merge pull request #11758 from overleaf/jpa-metric-max-access-checks-hit

[web] add metric for hitting limit on new compile domain access checks

GitOrigin-RevId: 58df0911a411dd77698932e13d212cf15b4c8931
Jakob Ackermann 3 лет назад
Родитель
Сommit
e525c4c58d

+ 6 - 0
services/web/app/src/Features/UserContentDomainCheck/UserContentDomainController.js

@@ -15,7 +15,13 @@ function recordFallbackUsage(_req, res) {
   res.sendStatus(204)
   res.sendStatus(204)
 }
 }
 
 
+function recordMaxAccessChecksHit(_req, res) {
+  Metrics.inc('user_content_domain_max_access_checks_hit')
+  res.sendStatus(204)
+}
+
 module.exports = {
 module.exports = {
   recordCheckResult,
   recordCheckResult,
   recordFallbackUsage,
   recordFallbackUsage,
+  recordMaxAccessChecksHit,
 }
 }

+ 11 - 0
services/web/app/src/router.js

@@ -214,6 +214,10 @@ const rateLimiters = {
     points: 15,
     points: 15,
     duration: 60,
     duration: 60,
   }),
   }),
+  userContentDomainMaxAccessChecksHit: new RateLimiter('user-content-mach', {
+    points: 15,
+    duration: 60,
+  }),
 }
 }
 
 
 function initialize(webRouter, privateApiRouter, publicApiRouter) {
 function initialize(webRouter, privateApiRouter, publicApiRouter) {
@@ -1358,6 +1362,13 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) {
     ),
     ),
     UserContentDomainController.recordFallbackUsage
     UserContentDomainController.recordFallbackUsage
   )
   )
+  webRouter.post(
+    '/record-user-content-domain-max-access-checks-hit',
+    RateLimiterMiddleware.rateLimit(
+      rateLimiters.userContentDomainMaxAccessChecksHit
+    ),
+    UserContentDomainController.recordMaxAccessChecksHit
+  )
 
 
   webRouter.get(
   webRouter.get(
     `/read/:token(${TokenAccessController.READ_ONLY_TOKEN_PATTERN})`,
     `/read/:token(${TokenAccessController.READ_ONLY_TOKEN_PATTERN})`,

+ 7 - 0
services/web/frontend/js/features/user-content-domain-access-check/index.ts

@@ -278,6 +278,9 @@ export function scheduleUserContentDomainAccessCheck() {
       return scheduleUserContentDomainAccessCheck()
       return scheduleUserContentDomainAccessCheck()
     }
     }
     if (accessCheckPassed) return
     if (accessCheckPassed) return
+    if (remainingChecks === 0) {
+      recordMaxAccessChecksHit()
+    }
     if (remainingChecks-- <= 0) return
     if (remainingChecks-- <= 0) return
     checkUserContentDomainAccess()
     checkUserContentDomainAccess()
       .then(ok => {
       .then(ok => {
@@ -288,3 +291,7 @@ export function scheduleUserContentDomainAccessCheck() {
       })
       })
   }, INITIAL_DELAY_MS)
   }, INITIAL_DELAY_MS)
 }
 }
+
+function recordMaxAccessChecksHit() {
+  postJSON('/record-user-content-domain-max-access-checks-hit').catch(() => {})
+}