Skip to content

Commit 33a492c

Browse files
authored
feat: Add analytics for early index journey guidance CLOUDP-311789 (#6976)
* set up for analytics in telemetry events * added the rest of analytics * renamed prop to onToggle and removed sorting for telemetry events * use existing setOpen instead of new onToggle
1 parent d794da1 commit 33a492c

File tree

8 files changed

+162
-5
lines changed

8 files changed

+162
-5
lines changed

packages/compass-indexes/src/components/create-index-actions/create-index-actions.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { connect } from 'react-redux';
44
import { areAllFieldsFilledIn } from '../../utils/create-index-modal-validation';
55
import type { Field, Tab } from '../../modules/create-index';
66
import type { RootState } from '../../modules';
7+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
78

89
const containerStyles = css({
910
display: 'flex',
@@ -45,6 +46,8 @@ function CreateIndexActions({
4546
showIndexesGuidanceVariant: boolean;
4647
indexSuggestions: Record<string, number> | null;
4748
}) {
49+
const track = useTelemetry();
50+
4851
let isCreateIndexButtonDisabled = false;
4952

5053
if (showIndexesGuidanceVariant) {
@@ -81,7 +84,12 @@ function CreateIndexActions({
8184

8285
<Button
8386
data-testid="create-index-actions-cancel-button"
84-
onClick={onCancelCreateIndexClick}
87+
onClick={() => {
88+
onCancelCreateIndexClick();
89+
track('Cancel Button Clicked', {
90+
context: 'Create Index Modal',
91+
});
92+
}}
8593
>
8694
Cancel
8795
</Button>

packages/compass-indexes/src/components/create-index-fields.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
} from '@mongodb-js/compass-components';
1414

1515
import type { Field } from '../modules/create-index';
16+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
1617

1718
/**
1819
* Current allowed types for indexes.
@@ -63,6 +64,8 @@ function CreateIndexFields({
6364
onSelectFieldNameClick,
6465
onSelectFieldTypeClick,
6566
}: CreateIndexFieldsProps): React.ReactElement {
67+
const track = useTelemetry();
68+
6669
const [indexTypes, selectorWidth] = useMemo(() => {
6770
const serverSupportsColumnStoreIndex =
6871
hasColumnstoreIndexesSupport(serverVersion);
@@ -88,6 +91,13 @@ function CreateIndexFields({
8891
[onSelectFieldNameClick]
8992
);
9093

94+
const handleOnAddFieldClick = useCallback(() => {
95+
onAddFieldClick();
96+
track('New Index Field Added', {
97+
context: 'Create Index Modal',
98+
});
99+
}, []);
100+
91101
const comboboxOptions = schemaFields.map((value) => ({ value }));
92102

93103
return (
@@ -154,7 +164,7 @@ function CreateIndexFields({
154164
</div>
155165
</div>
156166
)}
157-
onAddItem={onAddFieldClick}
167+
onAddItem={handleOnAddFieldClick}
158168
onRemoveItem={onRemoveFieldClick}
159169
addButtonTestId="add-index-field-button"
160170
removeButtonTestId="remove-index-field-button"

packages/compass-indexes/src/components/create-index-form/create-index-form.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import IndexFlowSection from './index-flow-section';
2222
import QueryFlowSection from './query-flow-section';
2323
import toNS from 'mongodb-ns';
2424
import type { Document } from 'mongodb';
25+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
2526

2627
const createIndexModalFieldsStyles = css({
2728
margin: `${spacing[600]}px 0 ${spacing[800]}px 0`,
@@ -74,6 +75,9 @@ function CreateIndexForm({
7475
);
7576
const showRollingIndexOption =
7677
rollingIndexesFeatureEnabled && supportsRollingIndexes;
78+
79+
const track = useTelemetry();
80+
7781
const schemaFields = useAutocompleteFields(namespace);
7882
const schemaFieldNames = useMemo(() => {
7983
return schemaFields
@@ -108,6 +112,13 @@ function CreateIndexForm({
108112
data-testid="create-index-form-flows"
109113
id="create-index-form-flows"
110114
onChange={(e) => {
115+
const tabName =
116+
e.target.value === 'IndexFlow'
117+
? 'Start with an Index'
118+
: 'Start with a Query';
119+
track(`${tabName} Tab Clicked`, {
120+
context: 'Create Index Modal',
121+
});
111122
onTabClick(e.target.value as Tab);
112123
}}
113124
value={currentTab}
@@ -173,6 +184,11 @@ function CreateIndexForm({
173184
<Accordion
174185
data-testid="create-index-modal-toggle-options"
175186
text={showIndexesGuidanceVariant ? 'Index Options' : 'Options'}
187+
setOpen={() => {
188+
track('Options Clicked', {
189+
context: 'Create Index Modal',
190+
});
191+
}}
176192
>
177193
<div
178194
data-testid="create-index-modal-options"

packages/compass-indexes/src/components/create-index-form/index-flow-section.tsx

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,10 @@ const IndexFlowSection = ({
210210
return { [field.name]: index + 1 };
211211
});
212212

213+
track('Covered Queries Button Clicked', {
214+
context: 'Create Index Modal',
215+
});
216+
213217
try {
214218
setCoveredQueriesObj({
215219
coveredQueries: generateCoveredQueries(coveredQueriesArr, track),
@@ -251,7 +255,12 @@ const IndexFlowSection = ({
251255
size="xsmall"
252256
id="code-equivalent-toggle"
253257
aria-label="Toggle Code Equivalent"
254-
onChange={(value) => setIsCodeEquivalentToggleChecked(value)}
258+
onChange={(value) => {
259+
setIsCodeEquivalentToggleChecked(value);
260+
track('Code Equivalent Toggled', {
261+
context: 'Create Index Modal',
262+
});
263+
}}
255264
checked={isCodeEquivalentToggleChecked}
256265
disabled={!areAllFieldsFilledIn}
257266
/>
@@ -336,7 +345,14 @@ const IndexFlowSection = ({
336345
{optimalQueries}
337346
</Body>
338347
</p>
339-
<Link href="https://www.mongodb.com/docs/manual/core/query-optimization/">
348+
<Link
349+
href="https://www.mongodb.com/docs/manual/core/query-optimization/"
350+
onClick={() => {
351+
track('Covered Queries Learn More Clicked', {
352+
context: 'Create Index Modal',
353+
});
354+
}}
355+
>
340356
Learn More
341357
</Link>
342358
</>

packages/compass-indexes/src/components/create-index-form/mdb-code-viewer.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { Code, Link, css, spacing } from '@mongodb-js/compass-components';
2+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
23
import React from 'react';
34

45
const containerStyles = css({
@@ -62,6 +63,7 @@ const MDBCodeViewer = ({
6263
indexNameTypeMap: Record<string, string | number>;
6364
dataTestId?: string;
6465
}) => {
66+
const track = useTelemetry();
6567
const GeneratedCode = generateCode({
6668
dbName,
6769
collectionName,
@@ -79,6 +81,11 @@ const MDBCodeViewer = ({
7981
href="https://www.mongodb.com/docs/manual/core/indexes/create-index/"
8082
target="_blank"
8183
rel="noreferrer noopener"
84+
onClick={() => {
85+
track('View Programming Language Syntax Clicked', {
86+
context: 'Create Index Modal',
87+
});
88+
}}
8289
>
8390
here
8491
</Link>

packages/compass-indexes/src/components/create-index-form/query-flow-section.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import type {
2323
} from '../../modules/create-index';
2424
import { connect } from 'react-redux';
2525
import { parseFilter } from 'mongodb-query-parser';
26+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
2627

2728
const inputQueryContainerStyles = css({
2829
display: 'flex',
@@ -109,8 +110,9 @@ const QueryFlowSection = ({
109110
fetchingSuggestionsState: IndexSuggestionState;
110111
initialQuery: Document | null;
111112
}) => {
113+
const track = useTelemetry();
112114
const [inputQuery, setInputQuery] = React.useState(
113-
JSON.stringify(initialQuery ?? '', null, 2)
115+
initialQuery ? JSON.stringify(initialQuery, null, 2) : ''
114116
);
115117
const [hasNewChanges, setHasNewChanges] = React.useState(
116118
initialQuery !== null
@@ -143,6 +145,10 @@ const QueryFlowSection = ({
143145
inputQuery: sanitizedInputQuery,
144146
});
145147

148+
track('Suggested Index Button Clicked', {
149+
context: 'Create Index Modal',
150+
});
151+
146152
setHasNewChanges(false);
147153
}, [inputQuery, dbName, collectionName, onSuggestedIndexButtonClick]);
148154

packages/compass-indexes/src/components/create-index-modal/create-index-modal.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import {
2525
type TrackFunction,
2626
useFireExperimentViewed,
2727
TestName,
28+
useTelemetry,
2829
} from '@mongodb-js/compass-telemetry/provider';
2930
import { useConnectionInfoRef } from '@mongodb-js/compass-connections/provider';
3031
import { usePreference } from 'compass-preferences-model/provider';
@@ -55,10 +56,15 @@ function CreateIndexModal({
5556
...props
5657
}: CreateIndexModalProps) {
5758
const connectionInfoRef = useConnectionInfoRef();
59+
const track = useTelemetry();
60+
5861
const onSetOpen = useCallback(
5962
(open) => {
6063
if (!open) {
6164
onCancelCreateIndexClick();
65+
track('Create Index Modal Closed', {
66+
context: 'Create Index Modal',
67+
});
6268
}
6369
},
6470
[onCancelCreateIndexClick]

packages/compass-telemetry/src/telemetry-events.ts

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2771,6 +2771,83 @@ type UUIDEncounteredEvent = CommonEvent<{
27712771
};
27722772
}>;
27732773

2774+
type CreateIndexNewFieldAdded = CommonEvent<{
2775+
name: 'New Index Field Added';
2776+
payload: {
2777+
context: CreateIndexModalContext;
2778+
};
2779+
}>;
2780+
2781+
type CreateIndexOptionsClicked = CommonEvent<{
2782+
name: 'Options Clicked';
2783+
payload: {
2784+
context: CreateIndexModalContext;
2785+
};
2786+
}>;
2787+
2788+
type CreateIndexCoveredQueriesButtonClicked = CommonEvent<{
2789+
name: 'Covered Queries Button Clicked';
2790+
payload: {
2791+
context: CreateIndexModalContext;
2792+
};
2793+
}>;
2794+
2795+
type CreateIndexSuggestedIndexButtonClicked = CommonEvent<{
2796+
name: 'Suggested Index Button Clicked';
2797+
payload: {
2798+
context: CreateIndexModalContext;
2799+
};
2800+
}>;
2801+
2802+
type CreateIndexIndexTabClicked = CommonEvent<{
2803+
name: 'Start with an Index Tab Clicked';
2804+
payload: {
2805+
context: CreateIndexModalContext;
2806+
};
2807+
}>;
2808+
2809+
type CreateIndexQueryTabClicked = CommonEvent<{
2810+
name: 'Start with a Query Tab Clicked';
2811+
payload: {
2812+
context: CreateIndexModalContext;
2813+
};
2814+
}>;
2815+
2816+
type CreateIndexCodeEquivalentToggled = CommonEvent<{
2817+
name: 'Code Equivalent Toggled';
2818+
payload: {
2819+
context: CreateIndexModalContext;
2820+
};
2821+
}>;
2822+
2823+
type CreateIndexModalClosed = CommonEvent<{
2824+
name: 'Create Index Modal Closed';
2825+
payload: {
2826+
context: CreateIndexModalContext;
2827+
};
2828+
}>;
2829+
2830+
type CreateIndexModalCancelled = CommonEvent<{
2831+
name: 'Cancel Button Clicked';
2832+
payload: {
2833+
context: CreateIndexModalContext;
2834+
};
2835+
}>;
2836+
2837+
type CreateIndexProgrammingLanguageLinkClicked = CommonEvent<{
2838+
name: 'View Programming Language Syntax Clicked';
2839+
payload: {
2840+
context: CreateIndexModalContext;
2841+
};
2842+
}>;
2843+
2844+
type CreateIndexCoveredQueriesLearnMoreClicked = CommonEvent<{
2845+
name: 'Covered Queries Learn More Clicked';
2846+
payload: {
2847+
context: CreateIndexModalContext;
2848+
};
2849+
}>;
2850+
27742851
export type TelemetryEvent =
27752852
| AggregationCanceledEvent
27762853
| AggregationCopiedEvent
@@ -2901,4 +2978,15 @@ export type TelemetryEvent =
29012978
| CreateIndexButtonClickedEvent
29022979
| CreateIndexErrorParsingQueryEvent
29032980
| CreateIndexErrorGettingCoveredQueriesEvent
2981+
| CreateIndexCodeEquivalentToggled
2982+
| CreateIndexCoveredQueriesButtonClicked
2983+
| CreateIndexCoveredQueriesLearnMoreClicked
2984+
| CreateIndexIndexTabClicked
2985+
| CreateIndexModalCancelled
2986+
| CreateIndexModalClosed
2987+
| CreateIndexNewFieldAdded
2988+
| CreateIndexOptionsClicked
2989+
| CreateIndexProgrammingLanguageLinkClicked
2990+
| CreateIndexQueryTabClicked
2991+
| CreateIndexSuggestedIndexButtonClicked
29042992
| UUIDEncounteredEvent;

0 commit comments

Comments
 (0)