mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 01:56:46 +00:00
fix: Stop telemetry events to Posthog (#16788)
This commit is contained in:
@@ -195,11 +195,7 @@ export class Telemetry {
|
||||
});
|
||||
}
|
||||
|
||||
track(
|
||||
eventName: string,
|
||||
properties: ITelemetryTrackProperties = {},
|
||||
{ withPostHog } = { withPostHog: false }, // whether to additionally track with PostHog
|
||||
) {
|
||||
track(eventName: string, properties: ITelemetryTrackProperties = {}) {
|
||||
if (!this.rudderStack) {
|
||||
return;
|
||||
}
|
||||
@@ -219,10 +215,6 @@ export class Telemetry {
|
||||
context: {},
|
||||
};
|
||||
|
||||
if (withPostHog) {
|
||||
this.postHog?.track(payload);
|
||||
}
|
||||
|
||||
return this.rudderStack.track({
|
||||
...payload,
|
||||
// provide a fake IP address to instruct RudderStack to not use the user's IP address
|
||||
|
||||
@@ -257,14 +257,10 @@ const isSingleLineInput: ComputedRef<boolean> = computed(
|
||||
function applyOverride() {
|
||||
if (!fromAIOverride.value) return;
|
||||
|
||||
telemetry.track(
|
||||
'User turned on fromAI override',
|
||||
{
|
||||
telemetry.track('User turned on fromAI override', {
|
||||
nodeType: activeNode.value?.type,
|
||||
parameter: props.path,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
updateFromAIOverrideValues(fromAIOverride.value, String(props.value));
|
||||
const value = buildValueFromOverride(fromAIOverride.value, props, true);
|
||||
valueChanged({
|
||||
@@ -277,14 +273,10 @@ function applyOverride() {
|
||||
function removeOverride(clearField = false) {
|
||||
if (!fromAIOverride.value) return;
|
||||
|
||||
telemetry.track(
|
||||
'User turned off fromAI override',
|
||||
{
|
||||
telemetry.track('User turned off fromAI override', {
|
||||
nodeType: activeNode.value?.type,
|
||||
parameter: props.path,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
valueChanged({
|
||||
node: activeNode.value?.name,
|
||||
name: props.path,
|
||||
|
||||
@@ -847,14 +847,10 @@ function onInputBlur(event: FocusEvent) {
|
||||
function applyOverride() {
|
||||
if (!props.node || !fromAIOverride.value) return;
|
||||
|
||||
telemetry.track(
|
||||
'User turned on fromAI override',
|
||||
{
|
||||
telemetry.track('User turned on fromAI override', {
|
||||
nodeType: props.node.type,
|
||||
parameter: props.path,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
updateFromAIOverrideValues(fromAIOverride.value, props.modelValue.value?.toString() ?? '');
|
||||
|
||||
emit('update:modelValue', {
|
||||
@@ -866,14 +862,10 @@ function applyOverride() {
|
||||
function removeOverride() {
|
||||
if (!props.node || !fromAIOverride.value) return;
|
||||
|
||||
telemetry.track(
|
||||
'User turned off fromAI override',
|
||||
{
|
||||
telemetry.track('User turned off fromAI override', {
|
||||
nodeType: props.node.type,
|
||||
parameter: props.path,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
emit('update:modelValue', {
|
||||
...props.modelValue,
|
||||
value: buildValueFromOverride(fromAIOverride.value, props, false),
|
||||
|
||||
@@ -715,18 +715,12 @@ onMounted(() => {
|
||||
const errorsToTrack = ['unknown error'];
|
||||
|
||||
if (error && errorsToTrack.some((e) => error.message?.toLowerCase().includes(e))) {
|
||||
telemetry.track(
|
||||
'User encountered an error',
|
||||
{
|
||||
telemetry.track('User encountered an error', {
|
||||
node: node.value.type,
|
||||
errorMessage: error.message,
|
||||
nodeVersion: node.value.typeVersion,
|
||||
n8nVersion: rootStore.versionCli,
|
||||
},
|
||||
{
|
||||
withPostHog: true,
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -108,9 +108,7 @@ const onDragEnd = (el: HTMLElement) => {
|
||||
|
||||
setTimeout(() => {
|
||||
void externalHooks.run('runDataJson.onDragEnd', telemetryPayload);
|
||||
telemetry.track('User dragged data for mapping', telemetryPayload, {
|
||||
withPostHog: true,
|
||||
});
|
||||
telemetry.track('User dragged data for mapping', telemetryPayload);
|
||||
}, 1000); // ensure dest data gets set if drop
|
||||
};
|
||||
|
||||
|
||||
@@ -308,9 +308,7 @@ function onDragEnd(column: string, src: string, depth = '0') {
|
||||
|
||||
void externalHooks.run('runDataTable.onDragEnd', telemetryPayload);
|
||||
|
||||
telemetry.track('User dragged data for mapping', telemetryPayload, {
|
||||
withPostHog: true,
|
||||
});
|
||||
telemetry.track('User dragged data for mapping', telemetryPayload);
|
||||
}, 1000); // ensure dest data gets set if drop
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ const {
|
||||
onMounted(() => {
|
||||
setInitialCredentialSelection();
|
||||
|
||||
telemetry.track('User opened cred setup', { source: 'canvas' }, { withPostHog: true });
|
||||
telemetry.track('User opened cred setup', { source: 'canvas' });
|
||||
});
|
||||
|
||||
onUnmounted(() => {
|
||||
|
||||
@@ -569,7 +569,6 @@ describe('VirtualSchema.vue', () => {
|
||||
src_nodes_back: '1',
|
||||
src_has_credential: false,
|
||||
}),
|
||||
{ withPostHog: true },
|
||||
),
|
||||
);
|
||||
});
|
||||
@@ -616,7 +615,6 @@ describe('VirtualSchema.vue', () => {
|
||||
src_view: 'schema_preview',
|
||||
src_has_credential: true,
|
||||
}),
|
||||
{ withPostHog: true },
|
||||
),
|
||||
);
|
||||
});
|
||||
|
||||
@@ -407,7 +407,7 @@ const onDragEnd = (el: HTMLElement) => {
|
||||
|
||||
void useExternalHooks().run('runDataJson.onDragEnd', telemetryPayload);
|
||||
|
||||
telemetry.track('User dragged data for mapping', telemetryPayload, { withPostHog: true });
|
||||
telemetry.track('User dragged data for mapping', telemetryPayload);
|
||||
}, 250); // ensure dest data gets set if drop
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -171,7 +171,7 @@ function onInputChange(workflowId: NodeParameterValue): void {
|
||||
}
|
||||
|
||||
function onListItemSelected(value: NodeParameterValue) {
|
||||
telemetry.track('User chose sub-workflow', {}, { withPostHog: true });
|
||||
telemetry.track('User chose sub-workflow', {});
|
||||
onInputChange(value);
|
||||
hideDropdown();
|
||||
}
|
||||
@@ -258,7 +258,7 @@ const onAddResourceClicked = async () => {
|
||||
if (projectId) {
|
||||
workflow.projectId = projectId;
|
||||
}
|
||||
telemetry.track('User clicked create new sub-workflow button', {}, { withPostHog: true });
|
||||
telemetry.track('User clicked create new sub-workflow button', {});
|
||||
|
||||
const newWorkflow = await workflowsStore.createNewWorkflow(workflow);
|
||||
const { href } = router.resolve({
|
||||
|
||||
@@ -526,15 +526,11 @@ describe('useCanvasOperations', () => {
|
||||
const { tidyUp } = useCanvasOperations();
|
||||
tidyUp(event);
|
||||
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User tidied up canvas',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User tidied up canvas', {
|
||||
nodes_count: 2,
|
||||
source: 'canvas-button',
|
||||
target: 'all',
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -188,15 +188,11 @@ export function useCanvasOperations() {
|
||||
}
|
||||
|
||||
function trackTidyUp({ result, source, target }: CanvasLayoutEvent) {
|
||||
telemetry.track(
|
||||
'User tidied up canvas',
|
||||
{
|
||||
telemetry.track('User tidied up canvas', {
|
||||
source,
|
||||
target,
|
||||
nodes_count: result.nodes.length,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function updateNodesPosition(
|
||||
|
||||
@@ -59,13 +59,9 @@ export async function executionFinished(
|
||||
const easyAiWorkflowJson = getEasyAiWorkflowJson();
|
||||
const isEasyAIWorkflow = workflow.meta.templateId === easyAiWorkflowJson.meta.templateId;
|
||||
if (isEasyAIWorkflow) {
|
||||
telemetry.track(
|
||||
'User executed test AI workflow',
|
||||
{
|
||||
telemetry.track('User executed test AI workflow', {
|
||||
status: data.status,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -313,9 +309,7 @@ export function handleExecutionFinishedWithErrorOrCanceled(
|
||||
}
|
||||
}
|
||||
|
||||
telemetry.track('Instance FE emitted paired item error', eventData, {
|
||||
withPostHog: true,
|
||||
});
|
||||
telemetry.track('Instance FE emitted paired item error', eventData);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -190,9 +190,8 @@ describe('telemetry', () => {
|
||||
|
||||
const event = 'testEvent';
|
||||
const properties = { test: '1' };
|
||||
const options = { withPostHog: false };
|
||||
|
||||
telemetry.track(event, properties, options);
|
||||
telemetry.track(event, properties);
|
||||
|
||||
expect(trackFunction).toHaveBeenCalledTimes(1);
|
||||
expect(trackFunction).toHaveBeenCalledWith(
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
} from '@/constants';
|
||||
import { useRootStore } from '@n8n/stores/useRootStore';
|
||||
import { useNDVStore } from '@/stores/ndv.store';
|
||||
import { usePostHog } from '@/stores/posthog.store';
|
||||
import { useSettingsStore } from '@/stores/settings.store';
|
||||
import { useUIStore } from '@/stores/ui.store';
|
||||
|
||||
@@ -97,11 +96,7 @@ export class Telemetry {
|
||||
}
|
||||
}
|
||||
|
||||
track(
|
||||
event: string,
|
||||
properties?: ITelemetryTrackProperties,
|
||||
options: { withPostHog?: boolean } = {},
|
||||
) {
|
||||
track(event: string, properties?: ITelemetryTrackProperties) {
|
||||
if (!this.rudderStack) return;
|
||||
|
||||
const updatedProperties = {
|
||||
@@ -115,10 +110,6 @@ export class Telemetry {
|
||||
ip: '0.0.0.0',
|
||||
},
|
||||
});
|
||||
|
||||
if (options.withPostHog) {
|
||||
usePostHog().capture(event, updatedProperties);
|
||||
}
|
||||
}
|
||||
|
||||
page(route: RouteLocation) {
|
||||
@@ -170,7 +161,7 @@ export class Telemetry {
|
||||
|
||||
switch (event) {
|
||||
case 'askAi.generationFinished':
|
||||
this.track('Ai code generation finished', properties, { withPostHog: true });
|
||||
this.track('Ai code generation finished', properties);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -184,7 +175,7 @@ export class Telemetry {
|
||||
|
||||
switch (event) {
|
||||
case 'generationFinished':
|
||||
this.track('Ai Transform code generation finished', properties, { withPostHog: true });
|
||||
this.track('Ai Transform code generation finished', properties);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -202,14 +193,10 @@ export class Telemetry {
|
||||
};
|
||||
const changeName = changeNameMap[nodeType] || APPEND_ATTRIBUTION_DEFAULT_PATH;
|
||||
if (change.name === changeName) {
|
||||
this.track(
|
||||
'User toggled n8n reference option',
|
||||
{
|
||||
this.track('User toggled n8n reference option', {
|
||||
node: nodeType,
|
||||
toValue: change.value,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -371,18 +371,12 @@ describe('AI Assistant store', () => {
|
||||
source: 'error',
|
||||
has_existing_session: true,
|
||||
});
|
||||
expect(track).toHaveBeenCalledWith(
|
||||
'Assistant session started',
|
||||
{
|
||||
expect(track).toHaveBeenCalledWith('Assistant session started', {
|
||||
chat_session_id: 'test',
|
||||
node_type: 'n8n-nodes-base.stopAndError',
|
||||
task: 'error',
|
||||
credential_type: undefined,
|
||||
},
|
||||
{
|
||||
withPostHog: true,
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
expect(track).toHaveBeenCalledWith('User opened assistant', {
|
||||
chat_session_id: 'test',
|
||||
|
||||
@@ -291,16 +291,12 @@ export const useAssistantStore = defineStore(STORES.ASSISTANT, () => {
|
||||
function onEachStreamingMessage(response: ChatRequest.ResponsePayload, id: string) {
|
||||
if (response.sessionId && !currentSessionId.value) {
|
||||
currentSessionId.value = response.sessionId;
|
||||
telemetry.track(
|
||||
'Assistant session started',
|
||||
{
|
||||
telemetry.track('Assistant session started', {
|
||||
chat_session_id: currentSessionId.value,
|
||||
task: chatSessionTask.value,
|
||||
node_type: chatSessionError.value?.node.type,
|
||||
credential_type: chatSessionCredType.value?.name,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
// Track first user message in support chat now that we have a session id
|
||||
if (usersMessages.value.length === 1 && chatSessionTask.value === 'support') {
|
||||
const firstUserMessage = usersMessages.value[0] as ChatUI.TextMessage;
|
||||
|
||||
@@ -242,14 +242,10 @@ export const useBuilderStore = defineStore(STORES.BUILDER, () => {
|
||||
function onEachStreamingMessage(response: ChatRequest.ResponsePayload, id: string) {
|
||||
if (response.sessionId && !currentSessionId.value) {
|
||||
currentSessionId.value = response.sessionId;
|
||||
telemetry.track(
|
||||
'Assistant session started',
|
||||
{
|
||||
telemetry.track('Assistant session started', {
|
||||
chat_session_id: currentSessionId.value,
|
||||
task: 'workflow-generation',
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
} else if (currentSessionId.value !== response.sessionId) {
|
||||
// Ignore messages from other sessions
|
||||
return;
|
||||
@@ -263,14 +259,10 @@ export const useBuilderStore = defineStore(STORES.BUILDER, () => {
|
||||
|
||||
// Core API functions
|
||||
async function initBuilderChat(userMessage: string, source: 'chat' | 'canvas') {
|
||||
telemetry.track(
|
||||
'User submitted workflow prompt',
|
||||
{
|
||||
telemetry.track('User submitted workflow prompt', {
|
||||
source,
|
||||
prompt: userMessage,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
resetBuilderChat();
|
||||
const id = getRandomId();
|
||||
|
||||
|
||||
@@ -80,18 +80,12 @@ describe('useNodeCreatorStore', () => {
|
||||
workflow_id,
|
||||
});
|
||||
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User opened nodes panel',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User opened nodes panel', {
|
||||
mode,
|
||||
source,
|
||||
nodes_panel_session_id: getSessionId(now),
|
||||
workflow_id,
|
||||
},
|
||||
{
|
||||
withPostHog: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('resets session id every time node creator is opened', () => {
|
||||
@@ -101,18 +95,12 @@ describe('useNodeCreatorStore', () => {
|
||||
workflow_id,
|
||||
});
|
||||
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User opened nodes panel',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User opened nodes panel', {
|
||||
mode,
|
||||
source,
|
||||
nodes_panel_session_id: getSessionId(now),
|
||||
workflow_id,
|
||||
},
|
||||
{
|
||||
withPostHog: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
vi.setSystemTime(now1);
|
||||
|
||||
@@ -122,18 +110,12 @@ describe('useNodeCreatorStore', () => {
|
||||
workflow_id,
|
||||
});
|
||||
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User opened nodes panel',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User opened nodes panel', {
|
||||
mode,
|
||||
source,
|
||||
nodes_panel_session_id: getSessionId(now1),
|
||||
workflow_id,
|
||||
},
|
||||
{
|
||||
withPostHog: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('tracks event on category expanded', () => {
|
||||
@@ -144,18 +126,12 @@ describe('useNodeCreatorStore', () => {
|
||||
});
|
||||
nodeCreatorStore.onCategoryExpanded({ workflow_id, category_name });
|
||||
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User viewed node category',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User viewed node category', {
|
||||
category_name,
|
||||
is_subcategory: false,
|
||||
nodes_panel_session_id: getSessionId(now),
|
||||
workflow_id,
|
||||
},
|
||||
{
|
||||
withPostHog: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('tracks event when node is added to canvas', () => {
|
||||
@@ -174,9 +150,7 @@ describe('useNodeCreatorStore', () => {
|
||||
input_node_type,
|
||||
});
|
||||
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User added node to workflow canvas',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User added node to workflow canvas', {
|
||||
node_id,
|
||||
node_type,
|
||||
node_version,
|
||||
@@ -185,11 +159,7 @@ describe('useNodeCreatorStore', () => {
|
||||
input_node_type,
|
||||
nodes_panel_session_id: getSessionId(now),
|
||||
workflow_id,
|
||||
},
|
||||
{
|
||||
withPostHog: true,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('tracks event when action is added', () => {
|
||||
@@ -205,19 +175,13 @@ describe('useNodeCreatorStore', () => {
|
||||
resource,
|
||||
});
|
||||
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User added action',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User added action', {
|
||||
node_type,
|
||||
action,
|
||||
source_mode,
|
||||
resource,
|
||||
nodes_panel_session_id: getSessionId(now),
|
||||
},
|
||||
{
|
||||
withPostHog: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('tracks when custom api action is clicked', () => {
|
||||
@@ -230,16 +194,10 @@ describe('useNodeCreatorStore', () => {
|
||||
app_identifier: node_type,
|
||||
});
|
||||
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User clicked custom API from node actions',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User clicked custom API from node actions', {
|
||||
app_identifier: node_type,
|
||||
nodes_panel_session_id: getSessionId(now),
|
||||
},
|
||||
{
|
||||
withPostHog: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('tracks when action is viewed', () => {
|
||||
@@ -255,19 +213,13 @@ describe('useNodeCreatorStore', () => {
|
||||
trigger_action_count: 2,
|
||||
});
|
||||
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User viewed node actions',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User viewed node actions', {
|
||||
app_identifier: node_type,
|
||||
actions,
|
||||
regular_action_count: 1,
|
||||
trigger_action_count: 2,
|
||||
nodes_panel_session_id: getSessionId(now),
|
||||
},
|
||||
{
|
||||
withPostHog: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('tracks when search filter is updated, ignoring custom actions in count', () => {
|
||||
@@ -308,9 +260,7 @@ describe('useNodeCreatorStore', () => {
|
||||
title,
|
||||
});
|
||||
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User entered nodes panel search term',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User entered nodes panel search term', {
|
||||
search_string: newValue,
|
||||
filter_mode: 'regular',
|
||||
category_name: subcategory,
|
||||
@@ -319,11 +269,7 @@ describe('useNodeCreatorStore', () => {
|
||||
regular_count: 1,
|
||||
nodes_panel_session_id: getSessionId(now),
|
||||
title,
|
||||
},
|
||||
{
|
||||
withPostHog: false,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
describe('selective connection view', () => {
|
||||
const mockedParseCanvasConnectionHandleString = vi.mocked(
|
||||
|
||||
@@ -292,17 +292,11 @@ export const useNodeCreatorStore = defineStore(STORES.NODE_CREATOR, () => {
|
||||
nodePanelSessionId.value = `nodes_panel_session_${new Date().valueOf()}`;
|
||||
}
|
||||
|
||||
function trackNodeCreatorEvent(event: string, properties: IDataObject = {}, withPostHog = false) {
|
||||
telemetry.track(
|
||||
event,
|
||||
{
|
||||
function trackNodeCreatorEvent(event: string, properties: IDataObject = {}) {
|
||||
telemetry.track(event, {
|
||||
...properties,
|
||||
nodes_panel_session_id: nodePanelSessionId.value,
|
||||
},
|
||||
{
|
||||
withPostHog,
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
function onCreatorOpened({
|
||||
@@ -419,7 +413,7 @@ export const useNodeCreatorStore = defineStore(STORES.NODE_CREATOR, () => {
|
||||
drag_and_drop?: boolean;
|
||||
input_node_type?: string;
|
||||
}) {
|
||||
trackNodeCreatorEvent('User added node to workflow canvas', properties, true);
|
||||
trackNodeCreatorEvent('User added node to workflow canvas', properties);
|
||||
}
|
||||
|
||||
function getMode(mode: NodeFilterType): string {
|
||||
|
||||
@@ -164,12 +164,6 @@ export const usePostHog = defineStore('posthog', () => {
|
||||
}
|
||||
};
|
||||
|
||||
const capture = (event: string, properties: IDataObject) => {
|
||||
if (typeof window.posthog?.capture === 'function') {
|
||||
window.posthog.capture(event, properties);
|
||||
}
|
||||
};
|
||||
|
||||
const setMetadata = (metadata: IDataObject, target: 'user' | 'events') => {
|
||||
if (typeof window.posthog?.people?.set !== 'function') return;
|
||||
if (typeof window.posthog?.register !== 'function') return;
|
||||
@@ -188,7 +182,6 @@ export const usePostHog = defineStore('posthog', () => {
|
||||
getVariant,
|
||||
reset,
|
||||
identify,
|
||||
capture,
|
||||
setMetadata,
|
||||
overrides,
|
||||
};
|
||||
|
||||
@@ -647,20 +647,14 @@ describe('useWorkflowsStore', () => {
|
||||
},
|
||||
},
|
||||
});
|
||||
expect(track).toHaveBeenCalledWith(
|
||||
'Manual exec errored',
|
||||
{
|
||||
expect(track).toHaveBeenCalledWith('Manual exec errored', {
|
||||
error_title: 'invalid syntax',
|
||||
node_type: 'n8n-nodes-base.set',
|
||||
node_type_version: 3.4,
|
||||
node_id: '554c7ff4-7ee2-407c-8931-e34234c5056a',
|
||||
node_graph_string:
|
||||
'{"node_types":["n8n-nodes-base.set"],"node_connections":[],"nodes":{"0":{"id":"554c7ff4-7ee2-407c-8931-e34234c5056a","type":"n8n-nodes-base.set","version":3.4,"position":[680,180]}},"notes":{},"is_pinned":false}',
|
||||
},
|
||||
{
|
||||
withPostHog: true,
|
||||
},
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
it('sets workflow pin data', () => {
|
||||
|
||||
@@ -1511,9 +1511,7 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => {
|
||||
|
||||
if (pushData.data.error) {
|
||||
const node = getNodeByName(nodeName);
|
||||
telemetry.track(
|
||||
'Manual exec errored',
|
||||
{
|
||||
telemetry.track('Manual exec errored', {
|
||||
error_title: pushData.data.error.message,
|
||||
node_type: node?.type,
|
||||
node_type_version: node?.typeVersion,
|
||||
@@ -1527,9 +1525,7 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => {
|
||||
},
|
||||
).nodeGraph,
|
||||
),
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ async function openTemplateCredentialSetup(opts: {
|
||||
}) {
|
||||
const { router, templateId, inNewBrowserTab = false, telemetry, source } = opts;
|
||||
|
||||
telemetry.track('User opened cred setup', { source }, { withPostHog: true });
|
||||
telemetry.track('User opened cred setup', { source });
|
||||
|
||||
const routeLocation: RouteLocationRaw = {
|
||||
name: VIEWS.TEMPLATE_SETUP,
|
||||
|
||||
@@ -103,9 +103,7 @@ watch(
|
||||
(ready) => {
|
||||
if (ready) {
|
||||
if (showWizard.value) {
|
||||
telemetry.track(
|
||||
'User viewed tests tab',
|
||||
{
|
||||
telemetry.track('User viewed tests tab', {
|
||||
workflow_id: props.name,
|
||||
test_type: 'evaluation',
|
||||
view: 'setup',
|
||||
@@ -113,20 +111,14 @@ watch(
|
||||
output_set_up: evaluationStore.evaluationSetOutputsNodeExist,
|
||||
metrics_set_up: evaluationStore.evaluationSetMetricsNodeExist,
|
||||
quota_reached: evaluationsQuotaExceeded.value,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
} else {
|
||||
telemetry.track(
|
||||
'User viewed tests tab',
|
||||
{
|
||||
telemetry.track('User viewed tests tab', {
|
||||
workflow_id: props.name,
|
||||
test_type: 'evaluation',
|
||||
view: 'overview',
|
||||
run_count: runs.value.length,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -144,9 +144,7 @@ describe('EvaluationsRootView', () => {
|
||||
renderComponent({ props: { name: mockWorkflow.id } });
|
||||
|
||||
await waitFor(() => {
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User viewed tests tab',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User viewed tests tab', {
|
||||
workflow_id: mockWorkflow.id,
|
||||
test_type: 'evaluation',
|
||||
view: 'setup',
|
||||
@@ -154,9 +152,7 @@ describe('EvaluationsRootView', () => {
|
||||
output_set_up: false,
|
||||
metrics_set_up: false,
|
||||
quota_reached: false,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -176,16 +172,12 @@ describe('EvaluationsRootView', () => {
|
||||
renderComponent({ props: { name: mockWorkflow.id } });
|
||||
|
||||
await waitFor(() => {
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User viewed tests tab',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User viewed tests tab', {
|
||||
workflow_id: mockWorkflow.id,
|
||||
test_type: 'evaluation',
|
||||
view: 'overview',
|
||||
run_count: 2,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -223,9 +215,7 @@ describe('EvaluationsRootView', () => {
|
||||
renderComponent({ props: { name: mockWorkflow.id } });
|
||||
|
||||
await waitFor(() => {
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User viewed tests tab',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User viewed tests tab', {
|
||||
workflow_id: mockWorkflow.id,
|
||||
test_type: 'evaluation',
|
||||
view: 'setup',
|
||||
@@ -233,9 +223,7 @@ describe('EvaluationsRootView', () => {
|
||||
output_set_up: false,
|
||||
metrics_set_up: false,
|
||||
quota_reached: false,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -279,9 +267,7 @@ describe('EvaluationsRootView', () => {
|
||||
renderComponent({ props: { name: mockWorkflow.id } });
|
||||
|
||||
await waitFor(() => {
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User viewed tests tab',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User viewed tests tab', {
|
||||
workflow_id: mockWorkflow.id,
|
||||
test_type: 'evaluation',
|
||||
view: 'setup',
|
||||
@@ -289,9 +275,7 @@ describe('EvaluationsRootView', () => {
|
||||
output_set_up: true,
|
||||
metrics_set_up: false,
|
||||
quota_reached: false,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -335,9 +319,7 @@ describe('EvaluationsRootView', () => {
|
||||
renderComponent({ props: { name: mockWorkflow.id } });
|
||||
|
||||
await waitFor(() => {
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User viewed tests tab',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User viewed tests tab', {
|
||||
workflow_id: mockWorkflow.id,
|
||||
test_type: 'evaluation',
|
||||
view: 'setup',
|
||||
@@ -345,9 +327,7 @@ describe('EvaluationsRootView', () => {
|
||||
output_set_up: false,
|
||||
metrics_set_up: true,
|
||||
quota_reached: false,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -367,9 +347,7 @@ describe('EvaluationsRootView', () => {
|
||||
renderComponent({ props: { name: mockWorkflow.id } });
|
||||
|
||||
await waitFor(() => {
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith(
|
||||
'User viewed tests tab',
|
||||
{
|
||||
expect(useTelemetry().track).toHaveBeenCalledWith('User viewed tests tab', {
|
||||
workflow_id: mockWorkflow.id,
|
||||
test_type: 'evaluation',
|
||||
view: 'setup',
|
||||
@@ -377,9 +355,7 @@ describe('EvaluationsRootView', () => {
|
||||
output_set_up: false,
|
||||
metrics_set_up: false,
|
||||
quota_reached: true,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -554,9 +554,6 @@ function trackOpenWorkflowFromOnboardingTemplate() {
|
||||
{
|
||||
workflow_id: workflowId.value,
|
||||
},
|
||||
{
|
||||
withPostHog: true,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -646,17 +643,11 @@ async function openWorkflowTemplate(templateId: string) {
|
||||
}
|
||||
|
||||
function trackOpenWorkflowTemplate(templateId: string) {
|
||||
telemetry.track(
|
||||
'User inserted workflow template',
|
||||
{
|
||||
telemetry.track('User inserted workflow template', {
|
||||
source: 'workflow',
|
||||
template_id: tryToParseNumber(templateId),
|
||||
wf_template_repo_session_id: templatesStore.previousSessionId,
|
||||
},
|
||||
{
|
||||
withPostHog: true,
|
||||
},
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -62,17 +62,11 @@ const nodeNames = computed(() => {
|
||||
//#region Methods
|
||||
|
||||
const onCredentialModalOpened = () => {
|
||||
telemetry.track(
|
||||
'User opened Credential modal',
|
||||
{
|
||||
telemetry.track('User opened Credential modal', {
|
||||
source: 'cred_setup',
|
||||
credentialType: props.credentials.credentialType,
|
||||
new_credential: !props.selectedCredentialId,
|
||||
},
|
||||
{
|
||||
withPostHog: true,
|
||||
},
|
||||
);
|
||||
});
|
||||
};
|
||||
|
||||
//#endregion Methods
|
||||
|
||||
@@ -197,15 +197,11 @@ export const useSetupTemplateStore = defineStore('setupTemplate', () => {
|
||||
workflow_id: createdWorkflow.id,
|
||||
});
|
||||
|
||||
telemetry.track(
|
||||
'User inserted workflow template',
|
||||
{
|
||||
telemetry.track('User inserted workflow template', {
|
||||
source: 'workflow',
|
||||
template_id: tryToParseNumber(templateId.value),
|
||||
wf_template_repo_session_id: templatesStore.currentSessionId,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
|
||||
telemetry.track('User saved new workflow from template', {
|
||||
template_id: tryToParseNumber(templateId.value),
|
||||
|
||||
@@ -765,13 +765,9 @@ function isValidProjectId(projectId: string) {
|
||||
|
||||
const openAIWorkflow = async (source: string) => {
|
||||
dismissEasyAICallout();
|
||||
telemetry.track(
|
||||
'User clicked test AI workflow',
|
||||
{
|
||||
telemetry.track('User clicked test AI workflow', {
|
||||
source,
|
||||
},
|
||||
{ withPostHog: true },
|
||||
);
|
||||
});
|
||||
|
||||
const easyAiWorkflowJson = getEasyAiWorkflowJson();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user