From 2ca5993b18b2f288c1082bb8c54574b7c21a2e66 Mon Sep 17 00:00:00 2001 From: albinAppsmith <87797149+albinAppsmith@users.noreply.github.com> Date: Mon, 20 Jan 2025 23:23:26 +0530 Subject: [PATCH] fix: Stopped calling usage pulse in air-gapped instance (#38749) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description This PR added fix for not triggering usage pulse for air gapped instances Fixes https://github.com/appsmithorg/cloud-services/issues/1883 ## Automation /ok-to-test tags="@tag.Sanity" ### :mag: Cypress test results > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: > Commit: 2300d200cf4213edfc734c1a8b89b4ad797cdb64 > Cypress dashboard. > Tags: `@tag.Sanity` > Spec: >
Mon, 20 Jan 2025 12:38:11 UTC ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [x] No ## Summary by CodeRabbit - **Bug Fixes** - Enhanced user activity tracking by introducing airgapped environment detection, preventing unnecessary tracking in restricted network settings. - **Tests** - Added a new test suite to verify the behavior of the user activity tracking method in airgapped conditions, ensuring correct functionality based on the airgapped status. --- app/client/src/usagePulse/index.ts | 6 ++++ app/client/src/usagePulse/usagePulse.test.ts | 30 ++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/app/client/src/usagePulse/index.ts b/app/client/src/usagePulse/index.ts index 0587889db1..53edcb3b04 100644 --- a/app/client/src/usagePulse/index.ts +++ b/app/client/src/usagePulse/index.ts @@ -18,6 +18,7 @@ import { PULSE_INTERVAL as PULSE_INTERVAL_CE } from "ce/constants/UsagePulse"; import { PULSE_INTERVAL as PULSE_INTERVAL_EE } from "ee/constants/UsagePulse"; import store from "store"; import type { PageListReduxState } from "reducers/entityReducers/pageListReducer"; +import { isAirgapped } from "ee/utils/airgapHelpers"; class UsagePulse { static userAnonymousId: string | undefined; @@ -26,6 +27,7 @@ class UsagePulse { static isTelemetryEnabled: boolean; static isAnonymousUser: boolean; static isFreePlan: boolean; + static isAirgapped = isAirgapped(); /* * Function to check if the given URL is trakable or not. @@ -143,6 +145,10 @@ class UsagePulse { * registers listeners to wait for the user to go to a trackable url */ static async sendPulseAndScheduleNext() { + if (UsagePulse.isAirgapped) { + return; + } + UsagePulse.sendPulse(); UsagePulse.scheduleNextActivityListeners(); } diff --git a/app/client/src/usagePulse/usagePulse.test.ts b/app/client/src/usagePulse/usagePulse.test.ts index 9929128ea5..2fa3c45076 100644 --- a/app/client/src/usagePulse/usagePulse.test.ts +++ b/app/client/src/usagePulse/usagePulse.test.ts @@ -29,4 +29,34 @@ describe("Usage pulse", () => { }); }); }); + + describe("sendPulseAndScheduleNext", () => { + let sendPulseSpy: jest.SpyInstance; + let scheduleNextActivityListenersSpy: jest.SpyInstance; + + beforeEach(() => { + sendPulseSpy = jest + .spyOn(UsagePulse, "sendPulse") + .mockImplementation(() => {}); + scheduleNextActivityListenersSpy = jest + .spyOn(UsagePulse, "scheduleNextActivityListeners") + .mockImplementation(() => {}); + UsagePulse.isAirgapped = false; + }); + + it("should not send pulse or schedule next when airgapped", () => { + UsagePulse.isAirgapped = true; + UsagePulse.sendPulseAndScheduleNext(); + + expect(sendPulseSpy).not.toHaveBeenCalled(); + expect(scheduleNextActivityListenersSpy).not.toHaveBeenCalled(); + }); + + it("should send pulse and schedule next activity listeners when not airgapped", () => { + UsagePulse.sendPulseAndScheduleNext(); + + expect(sendPulseSpy).toHaveBeenCalledTimes(1); + expect(scheduleNextActivityListenersSpy).toHaveBeenCalledTimes(1); + }); + }); });