From 3da4566702d3fa17f42d5235b5f075cf92f65a22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 10:25:50 +0200 Subject: [PATCH 01/42] :heavy_plus_sign: Add `posthog-js` --- packages/editor-ui/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/editor-ui/package.json b/packages/editor-ui/package.json index 1bf5145fd07f9..6e3cd457fc44b 100644 --- a/packages/editor-ui/package.json +++ b/packages/editor-ui/package.json @@ -82,6 +82,7 @@ "n8n-workflow": "~0.109.0", "monaco-editor-webpack-plugin": "^5.0.0", "normalize-wheel": "^1.0.1", + "posthog-js": "^1.23.0", "prismjs": "^1.17.1", "quill": "^2.0.0-dev.3", "quill-autoformat": "^0.1.1", From 26b4f523810a13ef40feaf697d7e0969f98ec887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 10:26:00 +0200 Subject: [PATCH 02/42] :package: Update `package-lock.json` --- package-lock.json | 60 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3fd2d871f7c95..5147533b78d2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "n8n", - "version": "0.186.1", + "version": "0.187.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "n8n", - "version": "0.186.1", + "version": "0.187.1", "dependencies": { "@apidevtools/swagger-cli": "4.0.0", "@babel/core": "^7.14.6", @@ -224,6 +224,7 @@ "pdf-parse": "^1.1.1", "pg": "^8.3.0", "pg-promise": "^10.5.8", + "posthog-js": "^1.23.0", "prettier": "^2.3.2", "prismjs": "^1.17.1", "prom-client": "^13.1.0", @@ -12625,6 +12626,14 @@ "url": "https://ko-fi.com/killymxi" } }, + "node_modules/@sentry/types": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.7.0.tgz", + "integrity": "sha512-4x8O7uerSGLnYC10krHl9t8h7xXHn5FextqKYbTCXCnx2hC8D+9lz8wcbQAFo0d97wiUYqI8opmEgFVGx7c5hQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/@servie/events": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@servie/events/-/events-1.0.0.tgz", @@ -48724,6 +48733,21 @@ "node": ">=0.10.0" } }, + "node_modules/posthog-js": { + "version": "1.25.2", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.25.2.tgz", + "integrity": "sha512-La+fue4tVOZ5fYYO/2TzxG0WZ3mErrnhHGJkqAUr2ram27AdtrRZZrUbiLHytwDV8f5Atn17FGw+7dEY6EDf+Q==", + "dependencies": { + "@sentry/types": "^7.2.0", + "fflate": "^0.4.1", + "rrweb-snapshot": "^1.1.14" + } + }, + "node_modules/posthog-js/node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -51217,6 +51241,11 @@ "fsevents": "~2.3.2" } }, + "node_modules/rrweb-snapshot": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/rrweb-snapshot/-/rrweb-snapshot-1.1.14.tgz", + "integrity": "sha512-eP5pirNjP5+GewQfcOQY4uBiDnpqxNRc65yKPW0eSoU1XamDfc4M8oqpXGMyUyvLyxFDB0q0+DChuxxiU2FXBQ==" + }, "node_modules/rss-parser": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.12.0.tgz", @@ -71207,6 +71236,11 @@ "selderee": "^0.6.0" } }, + "@sentry/types": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.7.0.tgz", + "integrity": "sha512-4x8O7uerSGLnYC10krHl9t8h7xXHn5FextqKYbTCXCnx2hC8D+9lz8wcbQAFo0d97wiUYqI8opmEgFVGx7c5hQ==" + }, "@servie/events": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@servie/events/-/events-1.0.0.tgz", @@ -99580,6 +99614,23 @@ "xtend": "^4.0.0" } }, + "posthog-js": { + "version": "1.25.2", + "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.25.2.tgz", + "integrity": "sha512-La+fue4tVOZ5fYYO/2TzxG0WZ3mErrnhHGJkqAUr2ram27AdtrRZZrUbiLHytwDV8f5Atn17FGw+7dEY6EDf+Q==", + "requires": { + "@sentry/types": "^7.2.0", + "fflate": "^0.4.1", + "rrweb-snapshot": "^1.1.14" + }, + "dependencies": { + "fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + } + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -101546,6 +101597,11 @@ "fsevents": "~2.3.2" } }, + "rrweb-snapshot": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/rrweb-snapshot/-/rrweb-snapshot-1.1.14.tgz", + "integrity": "sha512-eP5pirNjP5+GewQfcOQY4uBiDnpqxNRc65yKPW0eSoU1XamDfc4M8oqpXGMyUyvLyxFDB0q0+DChuxxiU2FXBQ==" + }, "rss-parser": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/rss-parser/-/rss-parser-3.12.0.tgz", From bcb35faee95a001cf1e92b422c50dbbb8d859dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 10:26:28 +0200 Subject: [PATCH 03/42] :blue_book: Fix TS import issue --- packages/design-system/src/main.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/design-system/src/main.d.ts b/packages/design-system/src/main.d.ts index 9a58de1c940e6..2116dd4bcec80 100644 --- a/packages/design-system/src/main.d.ts +++ b/packages/design-system/src/main.d.ts @@ -14,3 +14,4 @@ declare module 'n8n-design-system' { } export * from './types'; +export { locale } from './locale'; From 991a92df3eb71fd4c1fd33b9f75568e371ac6a27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 11:24:17 +0200 Subject: [PATCH 04/42] :zap: Send `deploymentType` to FE --- packages/cli/src/Interfaces.ts | 3 +++ packages/cli/src/Server.ts | 3 +++ packages/editor-ui/src/Interface.ts | 3 +++ 3 files changed, 9 insertions(+) diff --git a/packages/cli/src/Interfaces.ts b/packages/cli/src/Interfaces.ts index fea69be90524c..91a5395522e3f 100644 --- a/packages/cli/src/Interfaces.ts +++ b/packages/cli/src/Interfaces.ts @@ -515,6 +515,9 @@ export interface IN8nUISettings { missingPackages?: boolean; executionMode: 'regular' | 'queue'; communityNodesEnabled: boolean; + deployment: { + type: string; + }; } export interface IPersonalizationSurveyAnswers { diff --git a/packages/cli/src/Server.ts b/packages/cli/src/Server.ts index d74a83b21fd00..7ed13c042dc7d 100644 --- a/packages/cli/src/Server.ts +++ b/packages/cli/src/Server.ts @@ -336,6 +336,9 @@ class App { }, executionMode: config.getEnv('executions.mode'), communityNodesEnabled: config.getEnv('nodes.communityPackages.enabled'), + deployment: { + type: config.getEnv('deployment.type'), + }, }; } diff --git a/packages/editor-ui/src/Interface.ts b/packages/editor-ui/src/Interface.ts index d9e5ae880cadf..78c89bcbe2ee3 100644 --- a/packages/editor-ui/src/Interface.ts +++ b/packages/editor-ui/src/Interface.ts @@ -706,6 +706,9 @@ export interface IN8nUISettings { latestVersion: number; path: string; }; + deployment: { + type: string; + }; } export interface IWorkflowSettings extends IWorkflowSettingsWorkflow { From fe80b96e93226e0610ed8852a437afd7284fb0bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 13:05:41 +0200 Subject: [PATCH 05/42] :zap: Add `deploymentType` getter --- packages/editor-ui/src/modules/settings.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/editor-ui/src/modules/settings.ts b/packages/editor-ui/src/modules/settings.ts index 094e49e360200..aea6c081c6e81 100644 --- a/packages/editor-ui/src/modules/settings.ts +++ b/packages/editor-ui/src/modules/settings.ts @@ -89,6 +89,9 @@ const module: Module = { isQueueModeEnabled: (state): boolean => { return state.settings.executionMode === 'queue'; }, + deploymentType: (state): string => { + return state.settings.deployment.type; + }, }, mutations: { setSettings(state: ISettingsState, settings: IN8nUISettings) { From f72b74c94e0064ec713af89be3fe91cd58668758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 13:06:05 +0200 Subject: [PATCH 06/42] :zap: Set up PostHog constants --- packages/editor-ui/src/constants.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/editor-ui/src/constants.ts b/packages/editor-ui/src/constants.ts index 5ec4996ddffd0..dfca74a91fe6e 100644 --- a/packages/editor-ui/src/constants.ts +++ b/packages/editor-ui/src/constants.ts @@ -289,3 +289,7 @@ export const TEST_PIN_DATA = [ }, ]; export const MAPPING_PARAMS = [`$evaluateExpression`, `$item`, `$jmespath`, `$node`, `$binary`, `$data`, `$env`, `$json`, `$now`, `$parameters`, `$position`, `$resumeWebhookUrl`, `$runIndex`, `$today`, `$workflow`, '$parameter']; + +// telemetry +export const POSTHOG_API_KEY = "phc_QLECpA3yiIJcyafUv0pe6EoxvdfIDZ5A12dGpGXH4jV"; // @TODO: Replace with paid account's key +export const POSTHOG_API_HOST = "https://app.posthog.com"; From 0d89e28eb2a1091ef11a094e526ce992c2bad9a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 13:06:24 +0200 Subject: [PATCH 07/42] :blue_book: Split types into own file --- .../src/plugins/telemetry/telemetry.types.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 packages/editor-ui/src/plugins/telemetry/telemetry.types.ts diff --git a/packages/editor-ui/src/plugins/telemetry/telemetry.types.ts b/packages/editor-ui/src/plugins/telemetry/telemetry.types.ts new file mode 100644 index 0000000000000..07a7e42697741 --- /dev/null +++ b/packages/editor-ui/src/plugins/telemetry/telemetry.types.ts @@ -0,0 +1,18 @@ +import type { Telemetry } from '.'; + +export interface IUserNodesPanelSession { + sessionId: string; + data: IUserNodesPanelSessionData; +} + +interface IUserNodesPanelSessionData { + nodeFilter: string; + resultsNodes: string[]; + filterMode: string; +} + +declare module 'vue/types/vue' { + interface Vue { + $telemetry: Telemetry; + } +} From 42e25a356ccd3279dc3504f317ff547df6a1d8f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 14:18:05 +0200 Subject: [PATCH 08/42] :zap: Set up Telemetry component --- .../editor-ui/src/components/Telemetry.vue | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/packages/editor-ui/src/components/Telemetry.vue b/packages/editor-ui/src/components/Telemetry.vue index ea9fca1d7a321..cc2156e0c37a5 100644 --- a/packages/editor-ui/src/components/Telemetry.vue +++ b/packages/editor-ui/src/components/Telemetry.vue @@ -11,13 +11,14 @@ export default Vue.extend({ name: 'Telemetry', data() { return { - initialised: false, + isTelemetryInitialized: false, }; }, computed: { - ...mapGetters('settings', ['telemetry']), + ...mapGetters('settings', ['telemetry', 'logLevel', 'deploymentType']), ...mapGetters('users', ['currentUserId']), - isTelemeteryEnabledOnRoute(): boolean { + ...mapGetters(['instanceId']), + isTelemetryEnabledOnRoute(): boolean { return this.$route.meta && this.$route.meta.telemetry ? !this.$route.meta.telemetry.disabled: true; }, }, @@ -26,17 +27,24 @@ export default Vue.extend({ }, methods: { init() { - if (this.initialised || !this.isTelemeteryEnabledOnRoute) { - return; - } - const opts = this.telemetry; - if (opts && opts.enabled) { - this.initialised = true; - const instanceId = this.$store.getters.instanceId; - const userId = this.$store.getters['users/currentUserId']; - const logLevel = this.$store.getters['settings/logLevel']; - this.$telemetry.init(opts, { instanceId, logLevel, userId, store: this.$store }); - } + if (this.isTelemetryInitialized || !this.isTelemetryEnabledOnRoute) return; + + const telemetrySettings = this.telemetry; + + if (!telemetrySettings || !telemetrySettings.enabled) return; + + this.$telemetry.init( + telemetrySettings, + { + instanceId: this.instanceId, + userId: this.currentUserId, + logLevel: this.logLevel, + store: this.$store, + deploymentType: this.deploymentType, + }, + ); + + this.isTelemetryInitialized = true; }, }, watch: { @@ -44,10 +52,9 @@ export default Vue.extend({ this.init(); }, currentUserId(userId) { - const instanceId = this.$store.getters.instanceId; - this.$telemetry.identify(instanceId, userId); + this.$telemetry.identify(this.instanceId, userId); }, - isTelemeteryEnabledOnRoute(enabled) { + isTelemetryEnabledOnRoute(enabled) { if (enabled) { this.init(); } From b0ab2b3146a3ae5fb8587053840619ad34d7036f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 14:18:27 +0200 Subject: [PATCH 09/42] :sparkles: Introduce PostHog to Telemetry class --- .../editor-ui/src/plugins/telemetry/index.ts | 164 ++++++++++++------ 1 file changed, 111 insertions(+), 53 deletions(-) diff --git a/packages/editor-ui/src/plugins/telemetry/index.ts b/packages/editor-ui/src/plugins/telemetry/index.ts index 5b6b4660eb293..4473332e1d3b2 100644 --- a/packages/editor-ui/src/plugins/telemetry/index.ts +++ b/packages/editor-ui/src/plugins/telemetry/index.ts @@ -4,15 +4,14 @@ import { ITelemetryTrackProperties, IDataObject, } from 'n8n-workflow'; -import { ILogLevel, INodeCreateElement, IRootState } from "@/Interface"; import { Route } from "vue-router"; -import { Store } from "vuex"; +import posthog from "posthog-js"; -declare module 'vue/types/vue' { - interface Vue { - $telemetry: Telemetry; - } -} +import { POSTHOG_API_KEY, POSTHOG_API_HOST } from "@/constants"; + +import type { ILogLevel, INodeCreateElement, IRootState } from "@/Interface"; +import type { Store } from "vuex"; +import type { IUserNodesPanelSession } from "./telemetry.types"; export function TelemetryPlugin(vue: typeof _Vue): void { const telemetry = new Telemetry(); @@ -25,28 +24,21 @@ export function TelemetryPlugin(vue: typeof _Vue): void { }); } -interface IUserNodesPanelSessionData { - nodeFilter: string; - resultsNodes: string[]; - filterMode: string; -} - -interface IUserNodesPanelSession { - sessionId: string; - data: IUserNodesPanelSessionData; -} - -class Telemetry { +export class Telemetry { private pageEventQueue: Array<{route: Route}>; private previousPath: string; private store: Store | null; - private get telemetry() { + private logLevel: string | null = null; + + private get rudderStack() { // @ts-ignore return window.rudderanalytics; } + private postHogInitialized = false; + private userNodesPanelSession: IUserNodesPanelSession = { sessionId: '', data: { @@ -62,45 +54,96 @@ class Telemetry { this.store = null; } - init(options: ITelemetrySettings, { instanceId, logLevel, userId, store }: { instanceId: string, logLevel?: ILogLevel, userId?: string, store: Store }) { - if (options.enabled && !this.telemetry) { - if(!options.config) { - return; - } + init( + telemetrySettings: ITelemetrySettings, + { instanceId, logLevel, userId, store, deploymentType }: { + instanceId: string; + logLevel?: ILogLevel; + userId?: string; + store: Store; + deploymentType: string; + }, + ) { + if (!telemetrySettings.enabled) return; + + if (logLevel) this.logLevel = logLevel; + + this.store = store; // @TODO: Look into removing store from class + + if (!this.postHogInitialized) { + + /** + * @TODO: If initPostHog() is called from inside class/plugin, + * self-capture events are not sent and feature flags are not checked, + * so calling directly from App.vue for now + * + * @TODO: After completion, set `disableSessionRecording` to the following check: + * `!['desktop_mac', 'desktop_win', 'cloud'].includes(this.deploymentType)` + */ + this.initPostHog({ disableSessionRecording: true }); - this.store = store; - const logging = logLevel === 'debug' ? { logLevel: 'DEBUG'} : {}; - this.loadTelemetryLibrary(options.config.key, options.config.url, { integrations: { All: false }, loadIntegration: false, ...logging}); this.identify(instanceId, userId); + } + + if (!this.rudderStack && telemetrySettings.config) { + const logging = this.logLevel === 'debug' ? { logLevel: 'DEBUG' } : {}; + + this.initRudderStack( + telemetrySettings.config.key, + telemetrySettings.config.url, + { + integrations: { All: false }, + loadIntegration: false, + ...logging, + }, + ); + } + + this.identify(instanceId, userId); + + if (this.rudderStack) { this.flushPageEvents(); this.track('Session started', { session_id: store.getters.sessionId }); } } + /** + * Identify instance and user or only instance with all telemetry services. + */ identify(instanceId: string, userId?: string) { const traits = { instance_id: instanceId }; + if (userId) { - this.telemetry.identify(`${instanceId}#${userId}`, traits); + const fullId = [instanceId, userId].join('#'); + if (this.rudderStack) this.rudderStack.identify(fullId, traits); + if (this.postHogInitialized) posthog.identify(fullId, traits); + return; } - else { - this.telemetry.reset(); - this.telemetry.identify(undefined, traits); + + if (this.rudderStack) { + this.rudderStack.reset(); + this.rudderStack.identify(undefined, traits); + } + + if (this.postHogInitialized) { + posthog.reset(); + posthog.identify(undefined, traits); } } track(event: string, properties?: ITelemetryTrackProperties) { - if (this.telemetry) { - const updatedProperties = { - ...properties, - version_cli: this.store && this.store.getters.versionCli, - }; + if (!this.rudderStack) return; - this.telemetry.track(event, updatedProperties); - } + const updatedProperties = { + ...properties, + version_cli: this.store && this.store.getters.versionCli, + }; + + this.rudderStack.track(event, updatedProperties); } page(route: Route) { - if (this.telemetry) { + if (this.rudderStack) { if (route.path === this.previousPath) { // avoid duplicate requests query is changed for example on search page return; } @@ -113,7 +156,7 @@ class Telemetry { } const category = (route.meta && route.meta.telemetry && route.meta.telemetry.pageCategory) || 'Editor'; - this.telemetry.page(category, pageName, properties); + this.rudderStack.page(category, pageName, properties); } else { this.pageEventQueue.push({ @@ -131,7 +174,7 @@ class Telemetry { } trackNodesPanel(event: string, properties: IDataObject = {}) { - if (this.telemetry) { + if (this.rudderStack) { properties.nodes_panel_session_id = this.userNodesPanelSession.sessionId; switch (event) { case 'nodeView.createNodeActiveChanged': @@ -203,26 +246,26 @@ class Telemetry { }; } - private loadTelemetryLibrary(key: string, url: string, options: IDataObject) { + private initRudderStack(key: string, url: string, options: IDataObject) { // @ts-ignore window.rudderanalytics = window.rudderanalytics || []; - this.telemetry.methods = ["load", "page", "track", "identify", "alias", "group", "ready", "reset", "getAnonymousId", "setAnonymousId"]; - this.telemetry.factory = (t: any) => { // tslint:disable-line:no-any + this.rudderStack.methods = ["load", "page", "track", "identify", "alias", "group", "ready", "reset", "getAnonymousId", "setAnonymousId"]; + this.rudderStack.factory = (t: any) => { // tslint:disable-line:no-any return (...args: any[]) => { // tslint:disable-line:no-any const r = Array.prototype.slice.call(args); r.unshift(t); - this.telemetry.push(r); - return this.telemetry; + this.rudderStack.push(r); + return this.rudderStack; }; }; - for (let t = 0; t < this.telemetry.methods.length; t++) { - const r = this.telemetry.methods[t]; - this.telemetry[r] = this.telemetry.factory(r); + for (let t = 0; t < this.rudderStack.methods.length; t++) { + const r = this.rudderStack.methods[t]; + this.rudderStack[r] = this.rudderStack.factory(r); } - this.telemetry.loadJS = () => { + this.rudderStack.loadJS = () => { const r = document.createElement("script"); r.type = "text/javascript"; r.async = !0; @@ -232,7 +275,22 @@ class Telemetry { a.parentNode.insertBefore(r, a); } }; - this.telemetry.loadJS(); - this.telemetry.load(key, url, options); + this.rudderStack.loadJS(); + this.rudderStack.load(key, url, options); + } + + // @TODO: After moving call to init(), set to private + initPostHog({ disableSessionRecording }: { disableSessionRecording: boolean }) { + posthog.init(POSTHOG_API_KEY, { + api_host: POSTHOG_API_HOST, + autocapture: false, // @TODO: Confirm later if needed for session recording, if so enable + disable_session_recording: disableSessionRecording, + }); + + // @TODO: After completion, make conditional on `this.logLevel === 'debug'` + // to prevent debug noise from Rudderstack + posthog.debug(); + + this.postHogInitialized = true; } } From c3ddaa3a30f9a48a6b25a8f8aefb63640aebba0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 14:21:39 +0200 Subject: [PATCH 10/42] :construction: Temporarily init PH from `App.vue` --- packages/editor-ui/src/App.vue | 20 ++++++++++++++++++- .../editor-ui/src/plugins/telemetry/index.ts | 4 ++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/packages/editor-ui/src/App.vue b/packages/editor-ui/src/App.vue index d4a8a2d2b2cc1..bbb7e4fbd5a08 100644 --- a/packages/editor-ui/src/App.vue +++ b/packages/editor-ui/src/App.vue @@ -43,7 +43,16 @@ export default mixins( Modals, }, computed: { - ...mapGetters('settings', ['isHiringBannerEnabled', 'isTemplatesEnabled', 'isTemplatesEndpointReachable', 'isUserManagementEnabled', 'showSetupPage']), + ...mapGetters( + 'settings', [ + 'isHiringBannerEnabled', + 'isTemplatesEnabled', + 'isTemplatesEndpointReachable', + 'isUserManagementEnabled', + 'showSetupPage', + 'deploymentType', + ], + ), ...mapGetters('users', ['currentUser']), defaultLocale (): string { return this.$store.getters.defaultLocale; @@ -163,6 +172,15 @@ export default mixins( const headers = await this.restApi().getNodeTranslationHeaders(); if (headers) addHeaders(headers, this.defaultLocale); } + + // @TODO: Move this call to telemetry class init(), see comment in method + try { + this.$telemetry.initPostHog({ disableSessionRecording: true }); + } catch (error) { + console.error('Failed to init PostHog'); + console.error(error); + // @TODO: Show in console? Track in RudderStack? + } }, watch: { $route(route) { diff --git a/packages/editor-ui/src/plugins/telemetry/index.ts b/packages/editor-ui/src/plugins/telemetry/index.ts index 4473332e1d3b2..1ee810b3507e3 100644 --- a/packages/editor-ui/src/plugins/telemetry/index.ts +++ b/packages/editor-ui/src/plugins/telemetry/index.ts @@ -73,14 +73,14 @@ export class Telemetry { if (!this.postHogInitialized) { /** - * @TODO: If initPostHog() is called from inside class/plugin, + * @TODO: If initPostHog() is called here inside class/plugin, * self-capture events are not sent and feature flags are not checked, * so calling directly from App.vue for now * * @TODO: After completion, set `disableSessionRecording` to the following check: * `!['desktop_mac', 'desktop_win', 'cloud'].includes(this.deploymentType)` */ - this.initPostHog({ disableSessionRecording: true }); + // this.initPostHog({ disableSessionRecording: true }); this.identify(instanceId, userId); } From 55c7b6e9cc95b1cb3e726ae71c3cfb9da288360d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Thu, 21 Jul 2022 14:23:03 +0200 Subject: [PATCH 11/42] :construction: Set up sample event and feature flag --- packages/editor-ui/src/views/NodeView.vue | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/editor-ui/src/views/NodeView.vue b/packages/editor-ui/src/views/NodeView.vue index 9de746dd9e95d..ab7d36900c36b 100644 --- a/packages/editor-ui/src/views/NodeView.vue +++ b/packages/editor-ui/src/views/NodeView.vue @@ -149,6 +149,7 @@ `; From f52e1dc30a5e037a4246eeac6a62210a95cf6166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Mon, 25 Jul 2022 18:43:12 +0200 Subject: [PATCH 34/42] :fire: Remove leftover method --- packages/editor-ui/src/components/PersonalizationModal.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/editor-ui/src/components/PersonalizationModal.vue b/packages/editor-ui/src/components/PersonalizationModal.vue index 0ac6415f71edb..a05844b28b2dd 100644 --- a/packages/editor-ui/src/components/PersonalizationModal.vue +++ b/packages/editor-ui/src/components/PersonalizationModal.vue @@ -498,8 +498,6 @@ export default mixins(showMessage, workflowHelpers).extend({ await this.$store.dispatch('users/submitPersonalizationSurvey', survey); - this.$telemetry.setMetaData(survey, { target: 'user' }); - if (Object.keys(values).length === 0) { this.closeDialog(); } From bc1d6a05e8724847b00bc0e4b9d715ae20b6e3ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Ovejero?= Date: Tue, 26 Jul 2022 09:28:39 +0200 Subject: [PATCH 35/42] :pencil2: Update comment --- packages/cli/src/telemetry/scripts.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/telemetry/scripts.ts b/packages/cli/src/telemetry/scripts.ts index 4daa925a31e92..aaf072170ee12 100644 --- a/packages/cli/src/telemetry/scripts.ts +++ b/packages/cli/src/telemetry/scripts.ts @@ -1,5 +1,5 @@ /** - * Return a `