Skip to content

Commit

Permalink
Completely replace hotjar with smartlook (#447)
Browse files Browse the repository at this point in the history
* Replace hotjar with smartlook

* Remove duplicate event declaration
  • Loading branch information
hetunandu authored Aug 27, 2020
1 parent 7d9e0cb commit 0b430d0
Show file tree
Hide file tree
Showing 12 changed files with 39 additions and 89 deletions.
5 changes: 2 additions & 3 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@
# Sentry
APPSMITH_SENTRY_DSN=

# Hotjar
APPSMITH_HOTJAR_HJID=
APPSMITH_HOTJAR_HJSV=
# Smart look
APPSMITH_SMART_LOOK_ID=

# Google OAuth
APPSMITH_OAUTH2_GOOGLE_CLIENT_ID=
Expand Down
6 changes: 2 additions & 4 deletions app/client/docker/templates/nginx-linux.conf.template
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ server {
location / {
proxy_pass http://localhost:3000;
sub_filter __APPSMITH_SENTRY_DSN__ '${APPSMITH_SENTRY_DSN}';
sub_filter __APPSMITH_APPSMITH_HOTJAR_HJID__ '${APPSMITH_HOTJAR_HJID}';
sub_filter __APPSMITH_HOTJAR_HJSV__ '${APPSMITH_HOTJAR_HJSV}';
sub_filter __APPSMITH_SMART_LOOK_ID__ '${APPSMITH_SMART_LOOK_ID}';
sub_filter __APPSMITH_OAUTH2_GOOGLE_CLIENT_ID__ '${APPSMITH_OAUTH2_GOOGLE_CLIENT_ID}';
sub_filter __APPSMITH_OAUTH2_GITHUB_CLIENT_ID__ '${APPSMITH_OAUTH2_GITHUB_CLIENT_ID}';
sub_filter __APPSMITH_MARKETPLACE_ENABLED__ '${APPSMITH_MARKETPLACE_ENABLED}';
Expand Down Expand Up @@ -86,8 +85,7 @@ server {
location / {
proxy_pass http://localhost:3000;
sub_filter __APPSMITH_SENTRY_DSN__ '${APPSMITH_SENTRY_DSN}';
sub_filter __APPSMITH_HOTJAR_HJID__ '${APPSMITH_HOTJAR_HJID}';
sub_filter __APPSMITH_HOTJAR_HJSV__ '${APPSMITH_HOTJAR_HJSV}';
sub_filter __APPSMITH_SMART_LOOK_ID__ '${APPSMITH_SMART_LOOK_ID}';
sub_filter __APPSMITH_OAUTH2_GOOGLE_CLIENT_ID__ '${APPSMITH_OAUTH2_GOOGLE_CLIENT_ID}';
sub_filter __APPSMITH_OAUTH2_GITHUB_CLIENT_ID__ '${APPSMITH_OAUTH2_GITHUB_CLIENT_ID}';
sub_filter __APPSMITH_MARKETPLACE_ENABLED__ '${APPSMITH_MARKETPLACE_ENABLED}';
Expand Down
6 changes: 2 additions & 4 deletions app/client/docker/templates/nginx-mac.conf.template
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ server {
location / {
proxy_pass http://host.docker.internal:3000;
sub_filter __APPSMITH_SENTRY_DSN__ '${APPSMITH_SENTRY_DSN}';
sub_filter __APPSMITH_HOTJAR_HJID__ '${APPSMITH_HOTJAR_HJID}';
sub_filter __APPSMITH_HOTJAR_HJSV__ '${APPSMITH_HOTJAR_HJSV}';
sub_filter __APPSMITH_SMART_LOOK_ID__ '${APPSMITH_SMART_LOOK_ID}';
sub_filter __APPSMITH_OAUTH2_GOOGLE_CLIENT_ID__ '${APPSMITH_OAUTH2_GOOGLE_CLIENT_ID}';
sub_filter __APPSMITH_OAUTH2_GITHUB_CLIENT_ID__ '${APPSMITH_OAUTH2_GITHUB_CLIENT_ID}';
sub_filter __APPSMITH_MARKETPLACE_ENABLED__ '${APPSMITH_MARKETPLACE_ENABLED}';
Expand Down Expand Up @@ -87,8 +86,7 @@ server {
location / {
proxy_pass http://host.docker.internal:3000;
sub_filter __APPSMITH_SENTRY_DSN__ '${APPSMITH_SENTRY_DSN}';
sub_filter __APPSMITH_HOTJAR_HJID__ '${APPSMITH_HOTJAR_HJID}';
sub_filter __APPSMITH_HOTJAR_HJSV__ '${APPSMITH_HOTJAR_HJSV}';
sub_filter __APPSMITH_SMART_LOOK_ID__ '${APPSMITH_SMART_LOOK_ID};
sub_filter __APPSMITH_OAUTH2_GOOGLE_CLIENT_ID__ '${APPSMITH_OAUTH2_GOOGLE_CLIENT_ID}';
sub_filter __APPSMITH_OAUTH2_GITHUB_CLIENT_ID__ '${APPSMITH_OAUTH2_GITHUB_CLIENT_ID}';
sub_filter __APPSMITH_MARKETPLACE_ENABLED__ '${APPSMITH_MARKETPLACE_ENABLED}';
Expand Down
4 changes: 1 addition & 3 deletions app/client/netlify.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@
# REACT_APP_SENTRY_DSN=
# REACT_APP_SENTRY_ENVIRONMENT=
# REACT_APP_SENTRY_RELEASE=
# REACT_APP_HOTJAR_HJID=
# REACT_APP_HOTJAR_HJSV=
# REACT_APP_OAUTH2_GOOGLE_CLIENT_ID=
# REACT_APP_OAUTH2_GITHUB_CLIENT_ID=
# REACT_APP_SEGMENT_KEY=
Expand Down Expand Up @@ -76,4 +74,4 @@
[[redirects]]
from = "/*"
to = "/index.html"
status = 200
status = 200
3 changes: 2 additions & 1 deletion app/client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@
"redux-saga": "^1.1.3",
"reselect": "^4.0.0",
"shallowequal": "^1.1.0",
"smartlook-client": "^4.5.1",
"styled-components": "^4.1.3",
"styled-system": "^5.1.5",
"tern": "^0.21.0",
Expand Down Expand Up @@ -198,4 +199,4 @@
"pre-commit": "lint-staged"
}
}
}
}
19 changes: 3 additions & 16 deletions app/client/public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
// INTERCOM SETUP
const APP_ID = "%REACT_APP_INTERCOM_APP_ID%"
const CLOUD_HOSTING = "%REACT_APP_CLOUD_HOSTING%"
if (APP_ID.length && CLOUD_HOSTING.length) {
if (APP_ID.length && APP_ID[0] !== "%" && CLOUD_HOSTING.length) {
(function () { var w = window; var ic = w.Intercom; if (typeof ic === "function") { ic('reattach_activator'); ic('update', w.intercomSettings); } else { var d = document; var i = function () { i.c(arguments); }; i.q = []; i.c = function (args) { i.q.push(args); }; w.Intercom = i; var l = function () { var s = d.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'https://widget.intercom.io/widget/' + APP_ID; var x = d.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); }; if (document.readyState === 'complete') { l(); } else if (w.attachEvent) { w.attachEvent('onload', l); } else { w.addEventListener('load', l, false); } } })();
}
</script>
Expand All @@ -33,18 +33,6 @@

gtag('config', "%REACT_APP_GOOGLE_ANALYTICS_ID%");
</script>
<script type='text/javascript'>
// SMART LOOK SETUP
const SMART_LOOK_ID = "%REACT_APP_SMART_LOOK_ID%";
if (SMART_LOOK_ID.length && CLOUD_HOSTING.length) {
window.smartlook||(function(d) {
var o=smartlook=function(){ o.api.push(arguments)},h=d.getElementsByTagName('head')[0];
var c=d.createElement('script');o.api=new Array();c.async=true;c.type='text/javascript';
c.charset='utf-8';c.src='https://rec.smartlook.com/recorder.js';h.appendChild(c);
})(document);
smartlook('init', SMART_LOOK_ID);
}
</script>
</head>

<body>
Expand Down Expand Up @@ -87,9 +75,8 @@
release: parseConfig("__APPSMITH_SENTRY_RELEASE__"),
environment: parseConfig("__APPSMITH_SENTRY_ENVIRONMENT__"),
},
hotjar: {
id: parseConfig("__APPSMITH_HOTJAR_HJID__"),
sv: parseConfig("__APPSMITH_HOTJAR_HJSV__"),
smartLook: {
id: parseConfig("__APPSMITH_SMART_LOOK_ID__"),
},
enableGoogleOAuth: parseConfig("__APPSMITH_OAUTH2_GOOGLE_CLIENT_ID__").length > 0,
enableGithubOAuth: parseConfig("__APPSMITH_OAUTH2_GITHUB_CLIENT_ID__").length > 0,
Expand Down
27 changes: 9 additions & 18 deletions app/client/src/configs/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ type INJECTED_CONFIGS = {
release: string;
environment: string;
};
hotjar: {
smartLook: {
id: string;
sv: string;
};
enableGoogleOAuth: boolean;
enableGithubOAuth: boolean;
Expand All @@ -30,7 +29,6 @@ type INJECTED_CONFIGS = {
};
intercomAppID: string;
mailEnabled: boolean;
smartLookKey: string;
};
declare global {
interface Window {
Expand All @@ -52,9 +50,8 @@ const getConfigsFromEnvVars = (): INJECTED_CONFIGS => {
release: process.env.REACT_APP_SENTRY_RELEASE || "",
environment: capitalizeText(process.env.NODE_ENV),
},
hotjar: {
id: process.env.REACT_APP_HOTJAR_HJID || "",
sv: process.env.REACT_APP_HOTJAR_HJSV || "",
smartLook: {
id: process.env.REACT_APP_SMART_LOOK_ID || "",
},
enableGoogleOAuth: process.env.REACT_APP_OAUTH2_GOOGLE_CLIENT_ID
? process.env.REACT_APP_OAUTH2_GOOGLE_CLIENT_ID.length > 0
Expand Down Expand Up @@ -95,7 +92,6 @@ const getConfigsFromEnvVars = (): INJECTED_CONFIGS => {
mailEnabled: process.env.REACT_APP_MAIL_ENABLED
? process.env.REACT_APP_MAIL_ENABLED.length > 0
: false,
smartLookKey: process.env.REACT_APP_SMART_LOOK_KEY || "",
};
};

Expand Down Expand Up @@ -144,13 +140,9 @@ export const getAppsmithConfigs = (): AppsmithUIConfigs => {

// As the following shows, the config variables can be set using a combination
// of env variables and injected configs
const hotjarId = getConfig(
ENV_CONFIG.hotjar.id,
APPSMITH_FEATURE_CONFIGS.hotjar.id,
);
const hotjarSV = getConfig(
ENV_CONFIG.hotjar.sv,
APPSMITH_FEATURE_CONFIGS.hotjar.sv,
const smartLook = getConfig(
ENV_CONFIG.smartLook.id,
APPSMITH_FEATURE_CONFIGS.smartLook.id,
);

const algoliaAPIID = getConfig(
Expand All @@ -173,10 +165,9 @@ export const getAppsmithConfigs = (): AppsmithUIConfigs => {
release: sentryRelease.value,
environment: sentryENV.value,
},
hotjar: {
enabled: hotjarId.enabled && hotjarSV.enabled,
id: hotjarId.value,
sv: hotjarSV.value, //parse as int?
smartLook: {
enabled: smartLook.enabled,
id: smartLook.value,
},
segment: {
enabled: segment.enabled,
Expand Down
8 changes: 1 addition & 7 deletions app/client/src/configs/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,6 @@ export type SentryConfig = {
environment: string;
};

export type HotjarConfig = {
id: string;
sv: string;
};

type Milliseconds = number;

export enum FeatureFlagsEnum {}
Expand All @@ -30,10 +25,9 @@ export type AppsmithUIConfigs = {
release: string;
environment: string;
};
hotjar: {
smartLook: {
enabled: boolean;
id: string;
sv: string;
};
segment: {
enabled: boolean;
Expand Down
33 changes: 7 additions & 26 deletions app/client/src/utils/AnalyticsUtil.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// Events
import * as log from "loglevel";
import FeatureFlag from "./featureFlags";
import smartlookClient from "smartlook-client";
import { getAppsmithConfigs } from "configs";

export type EventName =
| "LOGIN_CLICK"
Expand All @@ -27,15 +29,12 @@ export type EventName =
| "PREVIEW_APP"
| "EDITOR_OPEN"
| "CREATE_API"
| "IMPORT_API"
| "IMPORT_API_CLICK"
| "SAVE_API"
| "SAVE_API_CLICK"
| "RUN_API"
| "RUN_API_CLICK"
| "DELETE_API"
| "DELETE_API_CLICK"
| "DUPLICATE_API_CLICK"
| "IMPORT_API"
| "EXPAND_API"
| "IMPORT_API_CLICK"
Expand Down Expand Up @@ -85,20 +84,8 @@ function getApplicationId(location: Location) {

class AnalyticsUtil {
static user: any = undefined;
static initializeHotjar(id: string, sv: string) {
(function init(h: any, o: any, t: any, j: any, a?: any, r?: any) {
h.hj =
h.hj ||
function() {
(h.hj.q = h.hj.q || []).push(arguments); //eslint-disable-line prefer-rest-params
};
h._hjSettings = { hjid: id, hjsv: sv };
a = o.getElementsByTagName("head")[0];
r = o.createElement("script");
r.async = 1;
r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;
a.appendChild(r);
})(window, document, "//static.hotjar.com/c/hotjar-", ".js?sv=");
static initializeSmartLook(id: string) {
smartlookClient.init(id);
}

static initializeSegment(key: string) {
Expand Down Expand Up @@ -199,15 +186,9 @@ class AnalyticsUtil {
userId: userId,
});
}
if (windowDoc.hj) {
windowDoc.hj("identify", userData.email, { email: userData.email });
}
if (windowDoc.smartLook) {
windowDoc.smartlook("identify", userId, {
email: userData.email,
name: userData.name,
userId: userId,
});
const { smartLook } = getAppsmithConfigs();
if (smartLook.enabled) {
smartlookClient.identify(userData.email, { email: userData.email });
}
}

Expand Down
6 changes: 3 additions & 3 deletions app/client/src/utils/AppsmithUtils.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ export const appInitializer = () => {
if (appsmithConfigs.sentry.enabled) {
Sentry.init(appsmithConfigs.sentry);
}
if (appsmithConfigs.hotjar.enabled) {
const { id, sv } = appsmithConfigs.hotjar;
AnalyticsUtil.initializeHotjar(id, sv);
if (appsmithConfigs.smartLook.enabled) {
const { id } = appsmithConfigs.smartLook;
AnalyticsUtil.initializeSmartLook(id);
}
if (appsmithConfigs.segment.enabled) {
AnalyticsUtil.initializeSegment(appsmithConfigs.segment.apiKey);
Expand Down
5 changes: 5 additions & 0 deletions app/client/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -15385,6 +15385,11 @@ slice-ansi@^2.1.0:
astral-regex "^1.0.0"
is-fullwidth-code-point "^2.0.0"

smartlook-client@^4.5.1:
version "4.5.1"
resolved "https://registry.yarnpkg.com/smartlook-client/-/smartlook-client-4.5.1.tgz#86884e19107fbd1ec284d96fb4273e209deb7cea"
integrity sha512-Y8zBr6rD9aE9/KockRlxNtAF4B+66CJzfPt8y27nrrkXqgC58lEqsWpTmy8opP5U2OprZHYI0Yh5LNKT7r4kRA==

snapdragon-node@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
Expand Down
6 changes: 2 additions & 4 deletions deploy/template/nginx_app.conf.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ $NGINX_SSL_CMNT server_name $custom_domain ;
try_files $uri /index.html =404;
sub_filter __APPSMITH_SENTRY_DSN__ '\''${APPSMITH_SENTRY_DSN}'\'';
sub_filter __APPSMITH_APPSMITH_HOTJAR_HJID__ '\''${APPSMITH_HOTJAR_HJID}'\'';
sub_filter __APPSMITH_HOTJAR_HJSV__ '\''${APPSMITH_HOTJAR_HJSV}'\'';
sub_filter __APPSMITH_SMART_LOOK_ID__ '\''${APPSMITH_SMART_LOOK_ID}'\'';
sub_filter __APPSMITH_OAUTH2_GOOGLE_CLIENT_ID__ '\''${APPSMITH_OAUTH2_GOOGLE_CLIENT_ID}'\'';
sub_filter __APPSMITH_OAUTH2_GITHUB_CLIENT_ID__ '\''${APPSMITH_OAUTH2_GITHUB_CLIENT_ID}'\'';
sub_filter __APPSMITH_MARKETPLACE_ENABLED__ '\''${APPSMITH_MARKETPLACE_ENABLED}'\'';
Expand Down Expand Up @@ -87,8 +86,7 @@ $NGINX_SSL_CMNT location / {
$NGINX_SSL_CMNT try_files $uri /index.html =404;
$NGINX_SSL_CMNT
$NGINX_SSL_CMNT sub_filter __APPSMITH_SENTRY_DSN__ '\''${APPSMITH_SENTRY_DSN}'\'';
$NGINX_SSL_CMNT sub_filter __APPSMITH_APPSMITH_HOTJAR_HJID__ '\''${APPSMITH_HOTJAR_HJID}'\'';
$NGINX_SSL_CMNT sub_filter __APPSMITH_HOTJAR_HJSV__ '\''${APPSMITH_HOTJAR_HJSV}'\'';
$NGINX_SSL_CMNT sub_filter __APPSMITH_SMART_LOOK_ID__ '\''${APPSMITH_SMART_LOOK_ID}'\'';
$NGINX_SSL_CMNT sub_filter __APPSMITH_OAUTH2_GOOGLE_CLIENT_ID__ '\''${APPSMITH_OAUTH2_GOOGLE_CLIENT_ID}'\'';
$NGINX_SSL_CMNT sub_filter __APPSMITH_OAUTH2_GITHUB_CLIENT_ID__ '\''${APPSMITH_OAUTH2_GITHUB_CLIENT_ID}'\'';
$NGINX_SSL_CMNT sub_filter __APPSMITH_MARKETPLACE_ENABLED__ '\''${APPSMITH_MARKETPLACE_ENABLED}'\'';
Expand Down

0 comments on commit 0b430d0

Please sign in to comment.