Skip to content

Commit

Permalink
chore: Analytics util refactor (appsmithorg#38089)
Browse files Browse the repository at this point in the history
  • Loading branch information
hetunandu authored Dec 19, 2024
1 parent efdc05a commit 47e766f
Show file tree
Hide file tree
Showing 28 changed files with 854 additions and 627 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@
"@redux-saga/core": "1.1.3",
"@redux-saga/types": "1.2.1",
"@reduxjs/toolkit": "^2.4.0",
"@segment/analytics-next": "^1.76.0",
"@sentry/react": "^6.2.4",
"@shared/ast": "workspace:^",
"@shared/dsl": "workspace:^",
Expand Down
16 changes: 0 additions & 16 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
return result;
};
const CLOUD_HOSTING = parseConfig('{{env "APPSMITH_CLOUD_HOSTING"}}');
const ZIPY_KEY = parseConfig('{{env "APPSMITH_ZIPY_SDK_KEY"}}');
const AIRGAPPED = parseConfig('{{env "APPSMITH_AIRGAP_ENABLED"}}');
const REO_CLIENT_ID = parseConfig('{{env "APPSMITH_REO_CLIENT_ID"}}');
</script>
Expand All @@ -64,21 +63,6 @@
})()
%>
</script>
<script>
if (CLOUD_HOSTING && ZIPY_KEY) {
const script = document.createElement("script");
script.crossOrigin = "anonymous";
script.defer = true;
script.src = "https://cdn.zipy.ai/sdk/v1.0/zipy.min.umd.js";
script.onload = () => {
window.zipy && window.zipy.init(ZIPY_KEY);
};
const head = document.getElementsByTagName("head")[0];
head && head.appendChild(script);
}


</script>

<!-- Start of Reo Javascript -->
<script type="text/javascript">
Expand Down
9 changes: 0 additions & 9 deletions src/actions/analyticsActions.ts

This file was deleted.

3 changes: 2 additions & 1 deletion src/api/interceptors/request/addAnonymousUserIdHeader.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import type { InternalAxiosRequestConfig } from "axios";
import type { ID } from "@segment/analytics-next";

export const addAnonymousUserIdHeader = (
config: InternalAxiosRequestConfig,
options: { anonymousId?: string; segmentEnabled?: boolean },
options: { anonymousId: ID; segmentEnabled?: boolean },
) => {
const { anonymousId, segmentEnabled } = options;

Expand Down
2 changes: 0 additions & 2 deletions src/ce/constants/ReduxActionConstants.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1214,8 +1214,6 @@ const TenantActionErrorTypes = {
};

const AnalyticsActionTypes = {
SEGMENT_INITIALIZED: "SEGMENT_INITIALIZED",
SEGMENT_INIT_UNCERTAIN: "SEGMENT_INIT_UNCERTAIN",
SET_BUILDING_BLOCK_DRAG_START_TIME: "SET_BUILDING_BLOCK_DRAG_START_TIME",
RESET_BUILDING_BLOCK_DRAG_START_TIME: "RESET_BUILDING_BLOCK_DRAG_START_TIME",
SEND_ANALYTICS_FOR_SIDE_BY_SIDE_HOVER:
Expand Down
2 changes: 0 additions & 2 deletions src/ce/reducers/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ import type { CanvasLevelsReduxState } from "reducers/entityReducers/autoHeightR
import type { LintErrorsStore } from "reducers/lintingReducers/lintErrorsReducers";
import lintErrorReducer from "reducers/lintingReducers";
import type { AutoHeightUIState } from "reducers/uiReducers/autoHeightReducer";
import type { AnalyticsReduxState } from "reducers/uiReducers/analyticsReducer";
import type { MetaWidgetsReduxState } from "reducers/entityReducers/metaWidgetsReducer";
import type { layoutConversionReduxState } from "reducers/uiReducers/layoutConversionReducer";
import type { OneClickBindingState } from "reducers/uiReducers/oneClickBindingReducer";
Expand Down Expand Up @@ -92,7 +91,6 @@ export const reducerObject = {
export interface AppState {
ui: {
consolidatedPageLoad: ConsolidatedPageLoadState;
analytics: AnalyticsReduxState;
editor: EditorReduxState;
propertyPane: PropertyPaneReduxState;
tableFilterPane: TableFilterPaneReduxState;
Expand Down
2 changes: 0 additions & 2 deletions src/ce/reducers/uiReducers/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ import { editorContextReducer } from "ee/reducers/uiReducers/editorContextReduce
import libraryReducer from "reducers/uiReducers/libraryReducer";
import appSettingsPaneReducer from "reducers/uiReducers/appSettingsPaneReducer";
import autoHeightUIReducer from "reducers/uiReducers/autoHeightReducer";
import analyticsReducer from "reducers/uiReducers/analyticsReducer";
import layoutConversionReducer from "reducers/uiReducers/layoutConversionReducer";
import oneClickBindingReducer from "reducers/uiReducers/oneClickBindingReducer";
import activeFieldReducer from "reducers/uiReducers/activeFieldEditorReducer";
Expand All @@ -49,7 +48,6 @@ import consolidatedPageLoadReducer from "reducers/uiReducers/consolidatedPageLoa
import { pluginActionReducer } from "PluginActionEditor/store";

export const uiReducerObject = {
analytics: analyticsReducer,
editor: editorReducer,
errors: errorReducer,
propertyPane: propertyPaneReducer,
Expand Down
35 changes: 6 additions & 29 deletions src/ce/sagas/analyticsSaga.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { getCurrentUser } from "selectors/usersSelectors";
import { getInstanceId } from "ee/selectors/tenantSelectors";
import { call, select } from "redux-saga/effects";
import type { APP_MODE } from "entities/App";
Expand All @@ -10,44 +9,37 @@ import AnalyticsUtil from "ee/utils/AnalyticsUtil";
import { getAppMode } from "ee/selectors/entitiesSelector";
import type { AppState } from "ee/reducers";
import { getWidget } from "sagas/selectors";
import { getUserSource } from "ee/utils/AnalyticsUtil";
import { getCurrentApplication } from "ee/selectors/applicationSelectors";

export interface UserAndAppDetails {
export interface AppDetails {
pageId: string;
appId: string;
appMode: APP_MODE | undefined;
appName: string;
isExampleApp: boolean;
userId: string;
email: string;
source: string;
instanceId: string;
}

export function* getUserAndAppDetails() {
export function* getAppDetails() {
const appMode: ReturnType<typeof getAppMode> = yield select(getAppMode);
const currentApp: ReturnType<typeof getCurrentApplication> = yield select(
getCurrentApplication,
);
const user: ReturnType<typeof getCurrentUser> = yield select(getCurrentUser);
const instanceId: ReturnType<typeof getInstanceId> =
yield select(getInstanceId);
const pageId: ReturnType<typeof getCurrentPageId> =
yield select(getCurrentPageId);
const userAndAppDetails: UserAndAppDetails = {

const appDetails: AppDetails = {
pageId,
appId: currentApp?.id || "",
appMode,
appName: currentApp?.name || "",
isExampleApp: currentApp?.appIsExample || false,
userId: user?.username || "",
email: user?.email || "",
source: getUserSource(),
instanceId: instanceId,
};

return userAndAppDetails;
return appDetails;
}
export function* logDynamicTriggerExecution({
dynamicTrigger,
Expand All @@ -65,13 +57,10 @@ export function* logDynamicTriggerExecution({
appId,
appMode,
appName,
email,
instanceId,
isExampleApp,
pageId,
source,
userId,
}: UserAndAppDetails = yield call(getUserAndAppDetails);
}: AppDetails = yield call(getAppDetails);
const widget: ReturnType<typeof getWidget> | undefined = yield select(
(state: AppState) => getWidget(state, triggerMeta.source?.id || ""),
);
Expand All @@ -89,12 +78,6 @@ export function* logDynamicTriggerExecution({
appMode,
appName,
isExampleApp,
userData: {
userId,
email,
appId,
source,
},
widgetName: widget?.widgetName,
widgetType: widget?.type,
propertyName: triggerMeta.triggerPropertyName,
Expand All @@ -114,12 +97,6 @@ export function* logDynamicTriggerExecution({
appMode,
appName,
isExampleApp,
userData: {
userId,
email,
appId,
source,
},
widgetName: widget?.widgetName,
widgetType: widget?.type,
propertyName: triggerMeta.triggerPropertyName,
Expand Down
40 changes: 5 additions & 35 deletions src/ce/sagas/userSagas.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { call, fork, put, race, select, take } from "redux-saga/effects";
import { call, fork, put, select, take } from "redux-saga/effects";
import type {
ReduxAction,
ReduxActionWithPromise,
Expand Down Expand Up @@ -57,14 +57,7 @@ import {
getFirstTimeUserOnboardingApplicationIds,
getFirstTimeUserOnboardingIntroModalVisibility,
} from "utils/storage";
import { initializeAnalyticsAndTrackers } from "utils/AppsmithUtils";
import { getAppsmithConfigs } from "ee/configs";
import { getSegmentState } from "selectors/analyticsSelectors";
import {
segmentInitUncertain,
segmentInitSuccess,
} from "actions/analyticsActions";
import type { SegmentState } from "reducers/uiReducers/analyticsReducer";
import type { FeatureFlags } from "ee/entities/FeatureFlag";
import { DEFAULT_FEATURE_FLAG_VALUE } from "ee/entities/FeatureFlag";
import UsagePulse from "usagePulse";
Expand All @@ -82,25 +75,6 @@ import type {
import { selectFeatureFlags } from "ee/selectors/featureFlagsSelectors";
import { getFromServerWhenNoPrefetchedResult } from "sagas/helper";

export function* waitForSegmentInit(skipWithAnonymousId: boolean) {
if (skipWithAnonymousId && AnalyticsUtil.getAnonymousId()) return;

const currentUser: User | undefined = yield select(getCurrentUser);
const segmentState: SegmentState | undefined = yield select(getSegmentState);
const appsmithConfig = getAppsmithConfigs();

if (
currentUser?.enableTelemetry &&
appsmithConfig.segment.enabled &&
!segmentState
) {
yield race([
take(ReduxActionTypes.SEGMENT_INITIALIZED),
take(ReduxActionTypes.SEGMENT_INIT_UNCERTAIN),
]);
}
}

export function* getCurrentUserSaga(action?: {
payload?: { userProfile?: ApiResponse };
}) {
Expand Down Expand Up @@ -134,14 +108,10 @@ export function* getCurrentUserSaga(action?: {
}

function* initTrackers(currentUser: User) {
const initializeSentry = initializeAnalyticsAndTrackers(currentUser);

const sentryInitialized: boolean = yield initializeSentry;

if (sentryInitialized) {
yield put(segmentInitSuccess());
} else {
yield put(segmentInitUncertain());
try {
yield call(AnalyticsUtil.initialize, currentUser);
} catch (e) {
log.error(e);
}
}

Expand Down
36 changes: 36 additions & 0 deletions src/ce/utils/Analytics/getEventExtraProperties.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { getAppsmithConfigs } from "ee/configs";
import TrackedUser from "ee/utils/Analytics/trackedUser";
import { noop } from "lodash";

let instanceId = "";

function initLicense() {
return noop();
}

function initInstanceId(id: string) {
instanceId = id;
}

function getInstanceId() {
return instanceId;
}

function getEventExtraProperties() {
const { appVersion } = getAppsmithConfigs();
let userData;

try {
userData = TrackedUser.getInstance().getUser();
} catch (e) {
userData = {};
}

return {
instanceId,
version: appVersion.id,
userData,
};
}

export { getEventExtraProperties, initInstanceId, getInstanceId, initLicense };
Loading

0 comments on commit 47e766f

Please sign in to comment.