From be0dfd758c52d17d27a2bd1580a0aa5d3c1602e6 Mon Sep 17 00:00:00 2001 From: Kaustubh Kumar Date: Mon, 5 Aug 2024 18:01:16 +0530 Subject: [PATCH] fix: rate limit events --- .../src/analytics/AnalyticsTransport.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/packages/hms-video-store/src/analytics/AnalyticsTransport.ts b/packages/hms-video-store/src/analytics/AnalyticsTransport.ts index 7f3dde0637..77a2955d6e 100644 --- a/packages/hms-video-store/src/analytics/AnalyticsTransport.ts +++ b/packages/hms-video-store/src/analytics/AnalyticsTransport.ts @@ -9,7 +9,30 @@ export abstract class AnalyticsTransport { abstract failedEvents: Queue; private readonly TAG = '[AnalyticsTransport]'; + private eventCount = 0; + private lastResetTime: number = Date.now(); + private readonly MAX_EVENTS_PER_MINUTE: number = 200; + private readonly RESET_INTERVAL_MS: number = 60000; + + private checkRateLimit() { + const now = Date.now(); + if (now - this.lastResetTime >= this.RESET_INTERVAL_MS) { + this.eventCount = 0; + this.lastResetTime = now; + } + if (this.eventCount >= this.MAX_EVENTS_PER_MINUTE) { + throw new Error('Too many events being sent, please check the implementation.'); + } + this.eventCount++; + } + sendEvent(event: AnalyticsEvent) { + try { + this.checkRateLimit(); + } catch (e) { + HMSLogger.w(this.TAG, 'Rate limit exceeded', e); + throw e; + } try { this.sendSingleEvent(event); this.flushFailedEvents();