Merge pull request #1557 from appsmithorg/feature/telemetry
Adding telemetry for community edition
This commit is contained in:
commit
5e84dcaa95
|
|
@ -47,3 +47,8 @@ APPSMITH_MAIL_PASSWORD=
|
||||||
# true | false values
|
# true | false values
|
||||||
APPSMITH_MAIL_SMTP_AUTH=
|
APPSMITH_MAIL_SMTP_AUTH=
|
||||||
APPSMITH_MAIL_SMTP_TLS_ENABLED=
|
APPSMITH_MAIL_SMTP_TLS_ENABLED=
|
||||||
|
|
||||||
|
# Disable all telemetry
|
||||||
|
# Note: This only takes effect in self-hosted scenarios.
|
||||||
|
# Please visit: https://docs.appsmith.com/telemetry/telemetry to read more about anonymized data collected by Appsmith
|
||||||
|
# APPSMITH_DISABLE_TELEMETRY=false
|
||||||
4
.github/workflows/client.yml
vendored
4
.github/workflows/client.yml
vendored
|
|
@ -73,8 +73,10 @@ jobs:
|
||||||
- name: Run the jest tests
|
- name: Run the jest tests
|
||||||
run: REACT_APP_ENVIRONMENT=${{steps.vars.outputs.REACT_APP_ENVIRONMENT}} yarn run test:unit
|
run: REACT_APP_ENVIRONMENT=${{steps.vars.outputs.REACT_APP_ENVIRONMENT}} yarn run test:unit
|
||||||
|
|
||||||
|
# We burn React environment & the Segment analytics key into the build itself.
|
||||||
|
# This is to ensure that we don't need to configure it in each installation
|
||||||
- name: Create the bundle
|
- name: Create the bundle
|
||||||
run: REACT_APP_ENVIRONMENT=${{steps.vars.outputs.REACT_APP_ENVIRONMENT}} yarn build
|
run: REACT_APP_ENVIRONMENT=${{steps.vars.outputs.REACT_APP_ENVIRONMENT}} REACT_APP_SEGMENT_CE_KEY=${{ secrets.APPSMITH_SEGMENT_CE_KEY }} yarn build
|
||||||
|
|
||||||
# Upload the build artifact so that it can be used by the test & deploy job in the workflow
|
# Upload the build artifact so that it can be used by the test & deploy job in the workflow
|
||||||
- name: Upload react build bundle
|
- name: Upload react build bundle
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@ sudo docker run --network host --name postgres -d -p 5432:5432 \
|
||||||
--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 \
|
--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 \
|
||||||
postgres:latest &
|
postgres:latest &
|
||||||
|
|
||||||
echo "Sleeping for 10 seconds to let the servers start"
|
echo "Sleeping for 20 seconds to let the servers start"
|
||||||
sleep 10
|
sleep 20
|
||||||
|
|
||||||
echo "Checking if the containers have started"
|
echo "Checking if the containers have started"
|
||||||
sudo docker ps -a
|
sudo docker ps -a
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ server {
|
||||||
sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '${APPSMITH_VERSION_RELEASE_DATE}';
|
sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '${APPSMITH_VERSION_RELEASE_DATE}';
|
||||||
sub_filter __APPSMITH_INTERCOM_APP_ID__ '${APPSMITH_INTERCOM_APP_ID}';
|
sub_filter __APPSMITH_INTERCOM_APP_ID__ '${APPSMITH_INTERCOM_APP_ID}';
|
||||||
sub_filter __APPSMITH_MAIL_ENABLED__ '${APPSMITH_MAIL_ENABLED}';
|
sub_filter __APPSMITH_MAIL_ENABLED__ '${APPSMITH_MAIL_ENABLED}';
|
||||||
|
sub_filter __APPSMITH_DISABLE_TELEMETRY__ '${APPSMITH_DISABLE_TELEMETRY}';
|
||||||
}
|
}
|
||||||
|
|
||||||
location /f {
|
location /f {
|
||||||
|
|
@ -103,6 +104,7 @@ server {
|
||||||
sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '${APPSMITH_VERSION_RELEASE_DATE}';
|
sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '${APPSMITH_VERSION_RELEASE_DATE}';
|
||||||
sub_filter __APPSMITH_INTERCOM_APP_ID__ '${APPSMITH_INTERCOM_APP_ID}';
|
sub_filter __APPSMITH_INTERCOM_APP_ID__ '${APPSMITH_INTERCOM_APP_ID}';
|
||||||
sub_filter __APPSMITH_MAIL_ENABLED__ '${APPSMITH_MAIL_ENABLED}';
|
sub_filter __APPSMITH_MAIL_ENABLED__ '${APPSMITH_MAIL_ENABLED}';
|
||||||
|
sub_filter __APPSMITH_DISABLE_TELEMETRY__ '${APPSMITH_DISABLE_TELEMETRY}';
|
||||||
}
|
}
|
||||||
|
|
||||||
location /f {
|
location /f {
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@ server {
|
||||||
sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '${APPSMITH_VERSION_RELEASE_DATE}';
|
sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '${APPSMITH_VERSION_RELEASE_DATE}';
|
||||||
sub_filter __APPSMITH_INTERCOM_APP_ID__ '${APPSMITH_INTERCOM_APP_ID}';
|
sub_filter __APPSMITH_INTERCOM_APP_ID__ '${APPSMITH_INTERCOM_APP_ID}';
|
||||||
sub_filter __APPSMITH_MAIL_ENABLED__ '${APPSMITH_MAIL_ENABLED}';
|
sub_filter __APPSMITH_MAIL_ENABLED__ '${APPSMITH_MAIL_ENABLED}';
|
||||||
|
sub_filter __APPSMITH_DISABLE_TELEMETRY__ '${APPSMITH_DISABLE_TELEMETRY}';
|
||||||
}
|
}
|
||||||
|
|
||||||
location /f {
|
location /f {
|
||||||
|
|
@ -104,6 +105,7 @@ server {
|
||||||
sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '${APPSMITH_VERSION_RELEASE_DATE}';
|
sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '${APPSMITH_VERSION_RELEASE_DATE}';
|
||||||
sub_filter __APPSMITH_INTERCOM_APP_ID__ '${APPSMITH_INTERCOM_APP_ID}';
|
sub_filter __APPSMITH_INTERCOM_APP_ID__ '${APPSMITH_INTERCOM_APP_ID}';
|
||||||
sub_filter __APPSMITH_MAIL_ENABLED__ '${APPSMITH_MAIL_ENABLED}';
|
sub_filter __APPSMITH_MAIL_ENABLED__ '${APPSMITH_MAIL_ENABLED}';
|
||||||
|
sub_filter __APPSMITH_DISABLE_TELEMETRY__ '${APPSMITH_DISABLE_TELEMETRY}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,7 @@
|
||||||
"interweave": "^12.1.1",
|
"interweave": "^12.1.1",
|
||||||
"interweave-autolink": "^4.0.1",
|
"interweave-autolink": "^4.0.1",
|
||||||
"js-base64": "^3.4.5",
|
"js-base64": "^3.4.5",
|
||||||
|
"js-sha256": "^0.9.0",
|
||||||
"json-fn": "^1.1.1",
|
"json-fn": "^1.1.1",
|
||||||
"lint-staged": "^9.2.5",
|
"lint-staged": "^9.2.5",
|
||||||
"localforage": "^1.7.3",
|
"localforage": "^1.7.3",
|
||||||
|
|
@ -141,7 +142,6 @@
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"extends": "react-app",
|
"extends": "react-app",
|
||||||
"parser": "@typescript-eslint/parser"
|
"parser": "@typescript-eslint/parser"
|
||||||
|
|
||||||
},
|
},
|
||||||
"browserslist": [
|
"browserslist": [
|
||||||
">0.2%",
|
">0.2%",
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,10 @@
|
||||||
enableGoogleOAuth: parseConfig("__APPSMITH_OAUTH2_GOOGLE_CLIENT_ID__").length > 0,
|
enableGoogleOAuth: parseConfig("__APPSMITH_OAUTH2_GOOGLE_CLIENT_ID__").length > 0,
|
||||||
enableGithubOAuth: parseConfig("__APPSMITH_OAUTH2_GITHUB_CLIENT_ID__").length > 0,
|
enableGithubOAuth: parseConfig("__APPSMITH_OAUTH2_GITHUB_CLIENT_ID__").length > 0,
|
||||||
enableRapidAPI: parseConfig("__APPSMITH_MARKETPLACE_ENABLED__").length > 0,
|
enableRapidAPI: parseConfig("__APPSMITH_MARKETPLACE_ENABLED__").length > 0,
|
||||||
segment: parseConfig("__APPSMITH_SEGMENT_KEY__"),
|
segment: {
|
||||||
|
apiKey: parseConfig("__APPSMITH_SEGMENT_KEY__"),
|
||||||
|
ceKey: parseConfig("__APPSMITH_SEGMENT_CE_KEY__"),
|
||||||
|
},
|
||||||
optimizely: parseConfig("__APPSMITH_OPTIMIZELY_KEY__"),
|
optimizely: parseConfig("__APPSMITH_OPTIMIZELY_KEY__"),
|
||||||
enableMixpanel: parseConfig("__APPSMITH_SEGMENT_KEY__").length > 0,
|
enableMixpanel: parseConfig("__APPSMITH_SEGMENT_KEY__").length > 0,
|
||||||
algolia: {
|
algolia: {
|
||||||
|
|
@ -137,6 +140,7 @@
|
||||||
},
|
},
|
||||||
intercomAppID: parseConfig("__APPSMITH_INTERCOM_APP_ID__"),
|
intercomAppID: parseConfig("__APPSMITH_INTERCOM_APP_ID__"),
|
||||||
mailEnabled: parseConfig("__APPSMITH_MAIL_ENABLED__").length > 0,
|
mailEnabled: parseConfig("__APPSMITH_MAIL_ENABLED__").length > 0,
|
||||||
|
disableTelemetry: parseConfig("__APPSMITH_DISABLE_TELEMETRY__").toLowerCase() === 'true' ,
|
||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,10 @@ type INJECTED_CONFIGS = {
|
||||||
enableGoogleOAuth: boolean;
|
enableGoogleOAuth: boolean;
|
||||||
enableGithubOAuth: boolean;
|
enableGithubOAuth: boolean;
|
||||||
enableRapidAPI: boolean;
|
enableRapidAPI: boolean;
|
||||||
segment: string;
|
segment: {
|
||||||
|
apiKey: string;
|
||||||
|
ceKey: string;
|
||||||
|
};
|
||||||
optimizely: string;
|
optimizely: string;
|
||||||
enableMixpanel: boolean;
|
enableMixpanel: boolean;
|
||||||
google: string;
|
google: string;
|
||||||
|
|
@ -34,6 +37,7 @@ type INJECTED_CONFIGS = {
|
||||||
};
|
};
|
||||||
intercomAppID: string;
|
intercomAppID: string;
|
||||||
mailEnabled: boolean;
|
mailEnabled: boolean;
|
||||||
|
disableTelemetry: boolean;
|
||||||
};
|
};
|
||||||
declare global {
|
declare global {
|
||||||
interface Window {
|
interface Window {
|
||||||
|
|
@ -66,7 +70,10 @@ const getConfigsFromEnvVars = (): INJECTED_CONFIGS => {
|
||||||
enableGithubOAuth: process.env.REACT_APP_OAUTH2_GITHUB_CLIENT_ID
|
enableGithubOAuth: process.env.REACT_APP_OAUTH2_GITHUB_CLIENT_ID
|
||||||
? process.env.REACT_APP_OAUTH2_GITHUB_CLIENT_ID.length > 0
|
? process.env.REACT_APP_OAUTH2_GITHUB_CLIENT_ID.length > 0
|
||||||
: false,
|
: false,
|
||||||
segment: process.env.REACT_APP_SEGMENT_KEY || "",
|
segment: {
|
||||||
|
apiKey: process.env.REACT_APP_SEGMENT_KEY || "",
|
||||||
|
ceKey: process.env.REACT_APP_SEGMENT_CE_KEY || "",
|
||||||
|
},
|
||||||
optimizely: process.env.REACT_APP_OPTIMIZELY_KEY || "",
|
optimizely: process.env.REACT_APP_OPTIMIZELY_KEY || "",
|
||||||
enableMixpanel: process.env.REACT_APP_SEGMENT_KEY
|
enableMixpanel: process.env.REACT_APP_SEGMENT_KEY
|
||||||
? process.env.REACT_APP_SEGMENT_KEY.length > 0
|
? process.env.REACT_APP_SEGMENT_KEY.length > 0
|
||||||
|
|
@ -99,6 +106,7 @@ const getConfigsFromEnvVars = (): INJECTED_CONFIGS => {
|
||||||
mailEnabled: process.env.REACT_APP_MAIL_ENABLED
|
mailEnabled: process.env.REACT_APP_MAIL_ENABLED
|
||||||
? process.env.REACT_APP_MAIL_ENABLED.length > 0
|
? process.env.REACT_APP_MAIL_ENABLED.length > 0
|
||||||
: false,
|
: false,
|
||||||
|
disableTelemetry: false,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -140,8 +148,8 @@ export const getAppsmithConfigs = (): AppsmithUIConfigs => {
|
||||||
APPSMITH_FEATURE_CONFIGS.sentry.environment,
|
APPSMITH_FEATURE_CONFIGS.sentry.environment,
|
||||||
);
|
);
|
||||||
const segment = getConfig(
|
const segment = getConfig(
|
||||||
ENV_CONFIG.segment,
|
ENV_CONFIG.segment.apiKey,
|
||||||
APPSMITH_FEATURE_CONFIGS.segment,
|
APPSMITH_FEATURE_CONFIGS.segment.apiKey,
|
||||||
);
|
);
|
||||||
const google = getConfig(ENV_CONFIG.google, APPSMITH_FEATURE_CONFIGS.google);
|
const google = getConfig(ENV_CONFIG.google, APPSMITH_FEATURE_CONFIGS.google);
|
||||||
|
|
||||||
|
|
@ -154,7 +162,7 @@ export const getAppsmithConfigs = (): AppsmithUIConfigs => {
|
||||||
|
|
||||||
const algoliaAPIID = getConfig(
|
const algoliaAPIID = getConfig(
|
||||||
ENV_CONFIG.algolia.apiId,
|
ENV_CONFIG.algolia.apiId,
|
||||||
APPSMITH_FEATURE_CONFIGS.algolia.apiKey,
|
APPSMITH_FEATURE_CONFIGS.algolia.apiId,
|
||||||
);
|
);
|
||||||
const algoliaAPIKey = getConfig(
|
const algoliaAPIKey = getConfig(
|
||||||
ENV_CONFIG.algolia.apiKey,
|
ENV_CONFIG.algolia.apiKey,
|
||||||
|
|
@ -165,6 +173,11 @@ export const getAppsmithConfigs = (): AppsmithUIConfigs => {
|
||||||
APPSMITH_FEATURE_CONFIGS.algolia.indexName,
|
APPSMITH_FEATURE_CONFIGS.algolia.indexName,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const segmentCEKey = getConfig(
|
||||||
|
ENV_CONFIG.segment.ceKey,
|
||||||
|
APPSMITH_FEATURE_CONFIGS.segment.ceKey,
|
||||||
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
sentry: {
|
sentry: {
|
||||||
enabled: sentryDSN.enabled && sentryRelease.enabled && sentryENV.enabled,
|
enabled: sentryDSN.enabled && sentryRelease.enabled && sentryENV.enabled,
|
||||||
|
|
@ -187,6 +200,7 @@ export const getAppsmithConfigs = (): AppsmithUIConfigs => {
|
||||||
segment: {
|
segment: {
|
||||||
enabled: segment.enabled,
|
enabled: segment.enabled,
|
||||||
apiKey: segment.value,
|
apiKey: segment.value,
|
||||||
|
ceKey: segmentCEKey.value,
|
||||||
},
|
},
|
||||||
algolia: {
|
algolia: {
|
||||||
enabled: true,
|
enabled: true,
|
||||||
|
|
@ -219,5 +233,6 @@ export const getAppsmithConfigs = (): AppsmithUIConfigs => {
|
||||||
intercomAppID:
|
intercomAppID:
|
||||||
ENV_CONFIG.intercomAppID || APPSMITH_FEATURE_CONFIGS.intercomAppID,
|
ENV_CONFIG.intercomAppID || APPSMITH_FEATURE_CONFIGS.intercomAppID,
|
||||||
mailEnabled: ENV_CONFIG.mailEnabled || APPSMITH_FEATURE_CONFIGS.mailEnabled,
|
mailEnabled: ENV_CONFIG.mailEnabled || APPSMITH_FEATURE_CONFIGS.mailEnabled,
|
||||||
|
disableTelemetry: APPSMITH_FEATURE_CONFIGS.disableTelemetry,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ export type AppsmithUIConfigs = {
|
||||||
segment: {
|
segment: {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
apiKey: string;
|
apiKey: string;
|
||||||
|
ceKey: string;
|
||||||
};
|
};
|
||||||
algolia: {
|
algolia: {
|
||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
|
|
@ -64,4 +65,6 @@ export type AppsmithUIConfigs = {
|
||||||
};
|
};
|
||||||
intercomAppID: string;
|
intercomAppID: string;
|
||||||
mailEnabled: boolean;
|
mailEnabled: boolean;
|
||||||
|
|
||||||
|
disableTelemetry: boolean;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ export type User = {
|
||||||
username: string;
|
username: string;
|
||||||
name: string;
|
name: string;
|
||||||
gender: Gender;
|
gender: Gender;
|
||||||
|
anonymousId: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface UserApplication {
|
export interface UserApplication {
|
||||||
|
|
@ -29,4 +30,5 @@ export const DefaultCurrentUserDetails: User = {
|
||||||
username: ANONYMOUS_USERNAME,
|
username: ANONYMOUS_USERNAME,
|
||||||
applications: [],
|
applications: [],
|
||||||
gender: "MALE",
|
gender: "MALE",
|
||||||
|
anonymousId: "anonymousId",
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ export function* getCurrentUserSaga() {
|
||||||
!response.data.isAnonymous &&
|
!response.data.isAnonymous &&
|
||||||
response.data.username !== ANONYMOUS_USERNAME
|
response.data.username !== ANONYMOUS_USERNAME
|
||||||
) {
|
) {
|
||||||
AnalyticsUtil.identifyUser(response.data.username, response.data);
|
AnalyticsUtil.identifyUser(response.data);
|
||||||
}
|
}
|
||||||
if (window.location.pathname === BASE_URL) {
|
if (window.location.pathname === BASE_URL) {
|
||||||
if (response.data.isAnonymous) {
|
if (response.data.isAnonymous) {
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import smartlookClient from "smartlook-client";
|
||||||
import { getAppsmithConfigs } from "configs";
|
import { getAppsmithConfigs } from "configs";
|
||||||
import * as Sentry from "@sentry/react";
|
import * as Sentry from "@sentry/react";
|
||||||
import { ANONYMOUS_USERNAME, User } from "../constants/userConstants";
|
import { ANONYMOUS_USERNAME, User } from "../constants/userConstants";
|
||||||
|
import { sha256 } from "js-sha256";
|
||||||
|
|
||||||
export type EventLocation =
|
export type EventLocation =
|
||||||
| "LIGHTNING_MENU"
|
| "LIGHTNING_MENU"
|
||||||
|
|
@ -98,6 +99,8 @@ function getApplicationId(location: Location) {
|
||||||
}
|
}
|
||||||
|
|
||||||
class AnalyticsUtil {
|
class AnalyticsUtil {
|
||||||
|
static cachedAnonymoustId: string;
|
||||||
|
static cachedUserId: string;
|
||||||
static user?: User = undefined;
|
static user?: User = undefined;
|
||||||
static initializeSmartLook(id: string) {
|
static initializeSmartLook(id: string) {
|
||||||
smartlookClient.init(id);
|
smartlookClient.init(id);
|
||||||
|
|
@ -169,38 +172,59 @@ class AnalyticsUtil {
|
||||||
const userData = AnalyticsUtil.user;
|
const userData = AnalyticsUtil.user;
|
||||||
const appId = getApplicationId(windowDoc.location);
|
const appId = getApplicationId(windowDoc.location);
|
||||||
if (userData) {
|
if (userData) {
|
||||||
|
const { segment } = getAppsmithConfigs();
|
||||||
const app = (userData.applications || []).find(
|
const app = (userData.applications || []).find(
|
||||||
(app: any) => app.id === appId,
|
(app: any) => app.id === appId,
|
||||||
);
|
);
|
||||||
const user = {
|
let user: any = {};
|
||||||
|
if (segment.enabled && segment.apiKey) {
|
||||||
|
user = {
|
||||||
userId: userData.username,
|
userId: userData.username,
|
||||||
email: userData.email,
|
email: userData.email,
|
||||||
currentOrgId: userData.currentOrganizationId,
|
currentOrgId: userData.currentOrganizationId,
|
||||||
appId: appId,
|
appId: appId,
|
||||||
appName: app ? app.name : undefined,
|
appName: app ? app.name : undefined,
|
||||||
};
|
};
|
||||||
|
}
|
||||||
finalEventData = {
|
finalEventData = {
|
||||||
...eventData,
|
...eventData,
|
||||||
userData: user.userId === ANONYMOUS_USERNAME ? undefined : user,
|
userData: user.userId === ANONYMOUS_USERNAME ? undefined : user,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
if (windowDoc.analytics) {
|
if (windowDoc.analytics) {
|
||||||
|
log.debug("Event fired", eventName, finalEventData);
|
||||||
windowDoc.analytics.track(eventName, finalEventData);
|
windowDoc.analytics.track(eventName, finalEventData);
|
||||||
}
|
}
|
||||||
log.debug("Event fired", eventName, finalEventData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static identifyUser(userId: string, userData: User) {
|
static identifyUser(userData: User) {
|
||||||
log.debug("Identify User " + userId);
|
const { segment, smartLook } = getAppsmithConfigs();
|
||||||
const windowDoc: any = window;
|
const windowDoc: any = window;
|
||||||
AnalyticsUtil.user = userData;
|
const userId = userData.username;
|
||||||
FeatureFlag.identify(userData);
|
FeatureFlag.identify(userData);
|
||||||
if (windowDoc.analytics) {
|
if (windowDoc.analytics) {
|
||||||
windowDoc.analytics.identify(userId, {
|
// This flag is only set on Appsmith Cloud. In this case, we get more detailed analytics of the user
|
||||||
|
if (segment.apiKey) {
|
||||||
|
const userProperties = {
|
||||||
email: userData.email,
|
email: userData.email,
|
||||||
name: userData.name,
|
name: userData.name,
|
||||||
userId: userId,
|
userId: userId,
|
||||||
});
|
};
|
||||||
|
AnalyticsUtil.user = userData;
|
||||||
|
log.debug("Identify User " + userId);
|
||||||
|
windowDoc.analytics.identify(userId, userProperties);
|
||||||
|
} else if (segment.ceKey) {
|
||||||
|
// This is a self-hosted instance. Only send data if the analytics are NOT disabled by the user
|
||||||
|
// This is done by setting environment variable APPSMITH_DISABLE_TELEMETRY in the docker.env file
|
||||||
|
if (userId !== AnalyticsUtil.cachedUserId) {
|
||||||
|
AnalyticsUtil.cachedAnonymoustId = sha256(userId);
|
||||||
|
AnalyticsUtil.cachedUserId = userId;
|
||||||
|
}
|
||||||
|
log.debug(
|
||||||
|
"Identify Anonymous User " + AnalyticsUtil.cachedAnonymoustId,
|
||||||
|
);
|
||||||
|
windowDoc.analytics.identify(AnalyticsUtil.cachedAnonymoustId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Sentry.configureScope(function(scope) {
|
Sentry.configureScope(function(scope) {
|
||||||
scope.setUser({
|
scope.setUser({
|
||||||
|
|
@ -209,7 +233,7 @@ class AnalyticsUtil {
|
||||||
email: userData.email,
|
email: userData.email,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
const { smartLook } = getAppsmithConfigs();
|
|
||||||
if (smartLook.enabled) {
|
if (smartLook.enabled) {
|
||||||
smartlookClient.identify(userId, { email: userData.email });
|
smartlookClient.identify(userId, { email: userData.email });
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,14 +48,19 @@ export const appInitializer = () => {
|
||||||
if (appsmithConfigs.sentry.enabled) {
|
if (appsmithConfigs.sentry.enabled) {
|
||||||
Sentry.init(appsmithConfigs.sentry);
|
Sentry.init(appsmithConfigs.sentry);
|
||||||
}
|
}
|
||||||
|
if (!appsmithConfigs.disableTelemetry) {
|
||||||
if (appsmithConfigs.smartLook.enabled) {
|
if (appsmithConfigs.smartLook.enabled) {
|
||||||
const { id } = appsmithConfigs.smartLook;
|
const { id } = appsmithConfigs.smartLook;
|
||||||
AnalyticsUtil.initializeSmartLook(id);
|
AnalyticsUtil.initializeSmartLook(id);
|
||||||
}
|
}
|
||||||
if (appsmithConfigs.segment.enabled) {
|
if (appsmithConfigs.segment.enabled && appsmithConfigs.segment.apiKey) {
|
||||||
|
// This value is only enabled for Appsmith's cloud hosted version. It is not set in self-hosted environments
|
||||||
AnalyticsUtil.initializeSegment(appsmithConfigs.segment.apiKey);
|
AnalyticsUtil.initializeSegment(appsmithConfigs.segment.apiKey);
|
||||||
|
} else if (appsmithConfigs.segment.ceKey) {
|
||||||
|
// This value is set in self-hosted environments. But if the analytics are disabled, it's never used.
|
||||||
|
AnalyticsUtil.initializeSegment(appsmithConfigs.segment.ceKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
log.setLevel(getEnvLogLevel(appsmithConfigs.logLevel));
|
log.setLevel(getEnvLogLevel(appsmithConfigs.logLevel));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11781,6 +11781,11 @@ js-base64@^3.4.5:
|
||||||
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.5.2.tgz#3cc800e4f10812b55fb5ec53e7cabaef35dc6d3c"
|
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.5.2.tgz#3cc800e4f10812b55fb5ec53e7cabaef35dc6d3c"
|
||||||
integrity sha512-VG2qfvV5rEQIVxq9UmAVyWIaOdZGt9M16BLu8vFkyWyhv709Hyg4nKUb5T+Ru+HmAr9RHdF+kQDKAhbJlcdKeQ==
|
integrity sha512-VG2qfvV5rEQIVxq9UmAVyWIaOdZGt9M16BLu8vFkyWyhv709Hyg4nKUb5T+Ru+HmAr9RHdF+kQDKAhbJlcdKeQ==
|
||||||
|
|
||||||
|
js-sha256@^0.9.0:
|
||||||
|
version "0.9.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966"
|
||||||
|
integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==
|
||||||
|
|
||||||
js-string-escape@^1.0.1:
|
js-string-escape@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef"
|
resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef"
|
||||||
|
|
|
||||||
|
|
@ -706,4 +706,6 @@ else
|
||||||
}
|
}
|
||||||
}' > /dev/null
|
}' > /dev/null
|
||||||
fi
|
fi
|
||||||
|
echo -e "Thank you for installing appsmith! We want to be transparent and inform you that we do perform telemetry in our on-prem installations. This helps us understand your needs and prioritise features & bug fixes better."
|
||||||
|
echo -e "All telemetry is 100% anonymous and only statistical in nature. You can read more about it and how to disable it in our documentation https://docs.appsmith.com/telemetry/telemetry"
|
||||||
echo -e "\nPeace out ✌️\n"
|
echo -e "\nPeace out ✌️\n"
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ $NGINX_SSL_CMNT server_name $custom_domain ;
|
||||||
sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '\${APPSMITH_VERSION_RELEASE_DATE}';
|
sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '\${APPSMITH_VERSION_RELEASE_DATE}';
|
||||||
sub_filter __APPSMITH_INTERCOM_APP_ID__ '\${APPSMITH_INTERCOM_APP_ID}';
|
sub_filter __APPSMITH_INTERCOM_APP_ID__ '\${APPSMITH_INTERCOM_APP_ID}';
|
||||||
sub_filter __APPSMITH_MAIL_ENABLED__ '\${APPSMITH_MAIL_ENABLED}';
|
sub_filter __APPSMITH_MAIL_ENABLED__ '\${APPSMITH_MAIL_ENABLED}';
|
||||||
|
sub_filter __APPSMITH_DISABLE_TELEMETRY__ '${APPSMITH_DISABLE_TELEMETRY}';
|
||||||
}
|
}
|
||||||
|
|
||||||
location /f {
|
location /f {
|
||||||
|
|
@ -103,6 +104,7 @@ $NGINX_SSL_CMNT sub_filter __APPSMITH_VERSION_ID__ '\${APPSMITH_VERSION_I
|
||||||
$NGINX_SSL_CMNT sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '\${APPSMITH_VERSION_RELEASE_DATE}';
|
$NGINX_SSL_CMNT sub_filter __APPSMITH_VERSION_RELEASE_DATE__ '\${APPSMITH_VERSION_RELEASE_DATE}';
|
||||||
$NGINX_SSL_CMNT sub_filter __APPSMITH_INTERCOM_APP_ID__ '\${APPSMITH_INTERCOM_APP_ID}';
|
$NGINX_SSL_CMNT sub_filter __APPSMITH_INTERCOM_APP_ID__ '\${APPSMITH_INTERCOM_APP_ID}';
|
||||||
$NGINX_SSL_CMNT sub_filter __APPSMITH_MAIL_ENABLED__ '\${APPSMITH_MAIL_ENABLED}';
|
$NGINX_SSL_CMNT sub_filter __APPSMITH_MAIL_ENABLED__ '\${APPSMITH_MAIL_ENABLED}';
|
||||||
|
$NGINX_SSL_CMNT sub_filter __APPSMITH_DISABLE_TELEMETRY__ '${APPSMITH_DISABLE_TELEMETRY}';
|
||||||
$NGINX_SSL_CMNT }
|
$NGINX_SSL_CMNT }
|
||||||
$NGINX_SSL_CMNT
|
$NGINX_SSL_CMNT
|
||||||
$NGINX_SSL_CMNT location /f {
|
$NGINX_SSL_CMNT location /f {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user