diff --git a/packages/insomnia-analytics/src/events.ts b/packages/insomnia-analytics/src/events.ts index 50dd647742c..17ffa43808d 100644 --- a/packages/insomnia-analytics/src/events.ts +++ b/packages/insomnia-analytics/src/events.ts @@ -86,6 +86,7 @@ export enum AnalyticsEvent { aiFeatureEnabled = 'AI Feature Enabled', aiFeatureDisabled = 'AI Feature Disabled', installPlugin = 'Plugin Installed', + AppMenuPreferencesClicked = 'App Menu Preferences Clicked', homepageFiltered = 'homepage-filtered', quickSearchOpenedByKeyboard = 'quick-search-opened-by-keyboard', diff --git a/packages/insomnia/src/main/window-utils.ts b/packages/insomnia/src/main/window-utils.ts index 14f199503c0..25bc91ad1b9 100644 --- a/packages/insomnia/src/main/window-utils.ts +++ b/packages/insomnia/src/main/window-utils.ts @@ -20,6 +20,7 @@ import { getAppBuildDate, getAppVersion, getProductName, isDevelopment, MNEMONIC import { docsBase } from '../common/documentation'; import { isLinux, isMac } from '../common/platform'; import { invariant } from '../utils/invariant'; +import { AnalyticsEvent, trackAnalyticsEvent } from './analytics'; import { getElectronStorage } from './electron-storage'; import { ipcMainOn } from './ipc/electron'; import { getLogDirectory } from './log'; @@ -267,6 +268,7 @@ export function createWindow(): ElectronBrowserWindow { { label: `${MNEMONIC_SYM}Preferences`, click: () => { + trackAnalyticsEvent(AnalyticsEvent.AppMenuPreferencesClicked); mainBrowserWindow.webContents?.send('toggle-preferences'); }, }, diff --git a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.new.tsx b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.new.tsx index 85b35b76aa2..d811a7bb9bc 100644 --- a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.new.tsx +++ b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.new.tsx @@ -10,6 +10,7 @@ import { } from '~/common/constants'; import type { Request, RequestBody, RequestParameter } from '~/insomnia-data'; import { services } from '~/insomnia-data'; +import type { RequestCreatedMetricsProperties } from '~/ui/analytics'; import { AnalyticsEvent } from '~/ui/analytics'; import type { CreateRequestType } from '~/ui/hooks/use-request'; import { invariant } from '~/utils/invariant'; @@ -17,13 +18,16 @@ import { createFetcherSubmitHook } from '~/utils/router'; import type { Route } from './+types/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.new'; + + export async function clientAction({ params, request }: Route.ClientActionArgs) { const { organizationId, projectId, workspaceId } = params; - const { requestType, parentId, req } = (await request.json()) as { + const { requestType, parentId, req, metrics } = (await request.json()) as { requestType: CreateRequestType; parentId?: string; req?: Request; + metrics?: RequestCreatedMetricsProperties; }; const settings = await services.settings.getOrCreate(); @@ -148,6 +152,7 @@ export async function clientAction({ params, request }: Route.ClientActionArgs) ? req.authentication.type : 'none', has_docs: !!req?.description, + source: metrics?.source, }, }); @@ -170,6 +175,7 @@ export const useRequestNewActionFetcher = createFetcherSubmitHook( requestType, parentId, req, + metrics, }: { organizationId: string; projectId: string; @@ -177,6 +183,7 @@ export const useRequestNewActionFetcher = createFetcherSubmitHook( requestType: CreateRequestType; parentId?: string; req?: Partial; + metrics?: RequestCreatedMetricsProperties; }) => { const url = href('/organization/:organizationId/project/:projectId/workspace/:workspaceId/debug/request/new', { organizationId, @@ -184,7 +191,7 @@ export const useRequestNewActionFetcher = createFetcherSubmitHook( workspaceId, }); - return submit(JSON.stringify({ requestType, parentId, req }), { + return submit(JSON.stringify({ requestType, parentId, req, metrics }), { action: url, method: 'POST', encType: 'application/json', diff --git a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.tsx b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.tsx index 32f862b4487..c7a293b9313 100644 --- a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.tsx +++ b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.tsx @@ -453,6 +453,9 @@ const Debug = () => { workspaceId, requestType: 'HTTP', parentId, + metrics: { + source: 'shortcut', + }, }); }, request_showCreateFolder: () => { @@ -527,6 +530,9 @@ const Debug = () => { requestType, parentId, req, + metrics: { + source: 'sidebar', + } }); const reorderFetcher = useDebugReorderActionFetcher(); @@ -680,61 +686,67 @@ const Debug = () => { name: 'HTTP Request', icon: 'plus-circle', hint: hotKeyRegistry.request_createHTTP, - action: () => + action: () => { createRequest({ requestType: 'HTTP', parentId: workspaceId, - }), + }); + }, }, { id: 'Event Stream', name: 'Event Stream Request (SSE)', icon: 'plus-circle', - action: () => + action: () => { createRequest({ requestType: 'Event Stream', parentId: workspaceId, - }), + }); + }, }, { id: 'GraphQL Request', name: 'GraphQL Request', icon: 'plus-circle', - action: () => + action: () => { createRequest({ requestType: 'GraphQL', parentId: workspaceId, - }), + }); + }, }, { id: 'gRPC Request', name: 'gRPC Request', icon: 'plus-circle', - action: () => + action: () => { createRequest({ requestType: 'gRPC', parentId: workspaceId, - }), + }); + }, }, { id: 'WebSocket Request', name: 'WebSocket Request', icon: 'plus-circle', - action: () => + action: () => { createRequest({ requestType: 'WebSocket', parentId: workspaceId, - }), + }); + }, }, { id: 'Socket.IO Request', name: 'Socket.IO Request', icon: 'plus-circle', - action: () => + action: () => { createRequest({ requestType: 'SocketIO', parentId: workspaceId, - }), + }); + }, }, ], }, diff --git a/packages/insomnia/src/ui/analytics.ts b/packages/insomnia/src/ui/analytics.ts index 715cbcbb582..4e1ddc37fb2 100644 --- a/packages/insomnia/src/ui/analytics.ts +++ b/packages/insomnia/src/ui/analytics.ts @@ -47,3 +47,7 @@ export function trackImportEvent(event: AnalyticsEvent, properties: Record { diff --git a/packages/insomnia/src/ui/components/modals/add-request-to-collection-modal.tsx b/packages/insomnia/src/ui/components/modals/add-request-to-collection-modal.tsx index f625c1a3ee7..0658126c062 100644 --- a/packages/insomnia/src/ui/components/modals/add-request-to-collection-modal.tsx +++ b/packages/insomnia/src/ui/components/modals/add-request-to-collection-modal.tsx @@ -70,6 +70,9 @@ export const AddRequestToCollectionModal: FC = ({ onHide } workspaceId: selectedWorkspaceId, requestType: 'HTTP', parentId: selectedWorkspaceId, + metrics: { + source: 'add-request-to-collection-modal', + } }); previousRequestFetcherState.current = 'loading'; }; diff --git a/packages/insomnia/src/ui/components/panes/placeholder-request-pane.tsx b/packages/insomnia/src/ui/components/panes/placeholder-request-pane.tsx index 77b7f95b57f..d145a3eb8cf 100644 --- a/packages/insomnia/src/ui/components/panes/placeholder-request-pane.tsx +++ b/packages/insomnia/src/ui/components/panes/placeholder-request-pane.tsx @@ -24,6 +24,9 @@ export const PlaceholderRequestPane: FC = () => { workspaceId, requestType: 'HTTP', parentId: workspaceId, + metrics: { + source: 'placeholder-request-pane', + } }), [requestFetcher, organizationId, projectId, workspaceId], ); diff --git a/packages/insomnia/src/ui/components/tabs/tab-list.tsx b/packages/insomnia/src/ui/components/tabs/tab-list.tsx index 0444529ade8..63cfd1fd6e6 100644 --- a/packages/insomnia/src/ui/components/tabs/tab-list.tsx +++ b/packages/insomnia/src/ui/components/tabs/tab-list.tsx @@ -260,6 +260,9 @@ export const OrganizationTabList = ({ showActiveStatus = true, currentPage = '' workspaceId, requestType: 'HTTP', parentId: workspaceId, + metrics: { + source: 'tab-list', + } }); } };