Skip to content

Commit 5f1d7be

Browse files
paula-stachomcasimirgribnoysup
authored
refactor: separate telemetry package COMPASS-8019 (#5940)
Co-authored-by: Maurizio Casimirri <[email protected]> Co-authored-by: Sergey Petushkov <[email protected]>
1 parent 8dcf863 commit 5f1d7be

File tree

237 files changed

+1644
-1007
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

237 files changed

+1644
-1007
lines changed

configs/eslint-config-compass/plugin.js

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ module.exports = {
1818
'@typescript-eslint/no-restricted-imports': [
1919
'error',
2020
restrictedProviderImport('@mongodb-js/compass-logging'),
21+
restrictedProviderImport('@mongodb-js/compass-telemetry'),
2122
restrictedProviderImport('@mongodb-js/compass-app-stores'),
2223
restrictedProviderImport('@mongodb-js/my-queries-storage'),
2324
restrictedProviderImport('@mongodb-js/atlas-service'),

package-lock.json

+281-81
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/atlas-service/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
"dependencies": {
7676
"@mongodb-js/compass-components": "^1.25.1",
7777
"@mongodb-js/compass-logging": "^1.3.0",
78+
"@mongodb-js/compass-telemetry": "^1.0.0",
7879
"@mongodb-js/compass-user-data": "^0.2.0",
7980
"@mongodb-js/compass-utils": "^0.6.4",
8081
"@mongodb-js/devtools-connect": "^2.6.3",

packages/atlas-service/src/atlas-service.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Sinon from 'sinon';
33
import { AtlasService } from './atlas-service';
44
import type { PreferencesAccess } from 'compass-preferences-model';
55
import { createSandboxFromDefaultPreferences } from 'compass-preferences-model';
6-
import { createNoopLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
6+
import { createNoopLogger } from '@mongodb-js/compass-logging/provider';
77
import { CompassAtlasAuthService } from './compass-atlas-auth-service';
88

99
const ATLAS_CONFIG = {
@@ -27,7 +27,7 @@ function getAtlasService(
2727
const atlasService = new AtlasService(
2828
authService,
2929
preferences,
30-
createNoopLoggerAndTelemetry()
30+
createNoopLogger()
3131
);
3232
atlasService['config'] = ATLAS_CONFIG;
3333
return atlasService;

packages/atlas-service/src/atlas-service.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
throwIfNetworkTrafficDisabled,
77
throwIfNotOk,
88
} from './util';
9-
import type { LoggerAndTelemetry } from '@mongodb-js/compass-logging';
9+
import type { Logger } from '@mongodb-js/compass-logging';
1010
import type { PreferencesAccess } from 'compass-preferences-model';
1111

1212
export type AtlasServiceOptions = {
@@ -18,7 +18,7 @@ export class AtlasService {
1818
constructor(
1919
private readonly authService: AtlasAuthService,
2020
private readonly preferences: PreferencesAccess,
21-
private readonly logger: LoggerAndTelemetry,
21+
private readonly logger: Logger,
2222
private readonly options?: AtlasServiceOptions
2323
) {
2424
this.config = getAtlasConfig(preferences);

packages/atlas-service/src/main.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,16 @@ import type { IntrospectInfo, AtlasUserInfo, AtlasServiceConfig } from './util';
2020
import { throwIfAborted } from '@mongodb-js/compass-utils';
2121
import type { HadronIpcMain } from 'hadron-ipc';
2222
import { ipcMain } from 'hadron-ipc';
23-
import {
24-
createLoggerAndTelemetry,
25-
mongoLogId,
26-
} from '@mongodb-js/compass-logging';
23+
import { createLogger, mongoLogId } from '@mongodb-js/compass-logging';
2724
import type { PreferencesAccess } from 'compass-preferences-model';
2825
import { SecretStore } from './secret-store';
2926
import { OidcPluginLogger } from './oidc-plugin-logger';
3027
import { spawn } from 'child_process';
3128
import { getAtlasConfig } from './util';
29+
import { createIpcTrack } from '@mongodb-js/compass-telemetry';
3230

33-
const { log, track } = createLoggerAndTelemetry('COMPASS-ATLAS-SERVICE');
31+
const { log } = createLogger('COMPASS-ATLAS-SERVICE');
32+
const track = createIpcTrack();
3433

3534
const redirectRequestHandler = oidcServerRequestHandler.bind(null, {
3635
productName: 'Compass',

packages/atlas-service/src/provider.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { createContext, useContext, useMemo } from 'react';
22
import type { AtlasAuthService } from './atlas-auth-service';
33
import { AtlasService, type AtlasServiceOptions } from './atlas-service';
44
import { preferencesLocator } from 'compass-preferences-model/provider';
5-
import { useLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
5+
import { useLogger } from '@mongodb-js/compass-logging/provider';
66
import {
77
createServiceLocator,
88
createServiceProvider,
@@ -33,7 +33,7 @@ export const AtlasServiceProvider: React.FC<{
3333
options,
3434
children,
3535
}) {
36-
const logger = useLoggerAndTelemetry('ATLAS-SERVICE');
36+
const logger = useLogger('ATLAS-SERVICE');
3737
const preferences = preferencesLocator();
3838
const authService = atlasAuthServiceLocator();
3939

packages/compass-aggregations/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
"@mongodb-js/compass-field-store": "^9.7.0",
7272
"@mongodb-js/compass-generative-ai": "^0.15.0",
7373
"@mongodb-js/compass-logging": "^1.3.0",
74+
"@mongodb-js/compass-telemetry": "^1.0.0",
7475
"@mongodb-js/compass-utils": "^0.6.4",
7576
"@mongodb-js/compass-workspaces": "^0.13.0",
7677
"@mongodb-js/explain-plan-helper": "^1.1.12",

packages/compass-aggregations/src/components/aggregation-side-panel/index.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ import {
1212
SearchInput,
1313
} from '@mongodb-js/compass-components';
1414
import { connect } from 'react-redux';
15-
import { useLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
1615
import { toggleSidePanel } from '../../modules/side-panel';
1716
import { STAGE_WIZARD_USE_CASES } from './stage-wizard-use-cases';
1817
import { FeedbackLink } from './feedback-link';
1918
import { addWizard } from '../../modules/pipeline-builder/stage-editor';
2019
import { UseCaseCard } from './stage-wizard-use-cases';
20+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
2121

2222
const containerStyles = css({
2323
height: '100%',
@@ -78,7 +78,7 @@ export const AggregationSidePanel = ({
7878
onCloseSidePanel,
7979
onSelectUseCase,
8080
}: AggregationSidePanelProps) => {
81-
const { track } = useLoggerAndTelemetry('COMPASS-AGGREGATIONS-UI');
81+
const track = useTelemetry();
8282
const [searchText, setSearchText] = useState<string>('');
8383
const darkMode = useDarkMode();
8484

packages/compass-aggregations/src/components/create-view-modal/create-view-modal.tsx

+6-7
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import {
1010
TextInput,
1111
} from '@mongodb-js/compass-components';
1212
import { createView, changeViewName, close } from '../../modules/create-view';
13-
import type { LoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
14-
import { withLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
1513
import type { CreateViewRootState } from '../../stores/create-view';
14+
import { withTelemetry } from '@mongodb-js/compass-telemetry/provider';
15+
import type { TrackFunction } from '@mongodb-js/compass-telemetry';
1616

1717
const progressContainerStyles = css({
1818
display: 'flex',
@@ -31,7 +31,7 @@ type CreateViewModalProps = {
3131
pipeline?: unknown[];
3232
isRunning?: boolean;
3333
error: Error | null;
34-
logger: LoggerAndTelemetry;
34+
track: TrackFunction;
3535
};
3636

3737
class CreateViewModal extends PureComponent<CreateViewModalProps> {
@@ -46,7 +46,7 @@ class CreateViewModal extends PureComponent<CreateViewModalProps> {
4646

4747
componentDidUpdate(prevProps: CreateViewModalProps) {
4848
if (prevProps.isVisible !== this.props.isVisible && this.props.isVisible) {
49-
this.props.logger.track('Screen', { name: 'create_view_modal' });
49+
this.props.track('Screen', { name: 'create_view_modal' });
5050
}
5151
}
5252

@@ -113,13 +113,12 @@ const mapStateToProps = (state: CreateViewRootState) => ({
113113
* Connect the redux store to the component.
114114
* (dispatch)
115115
*/
116-
const MappedCreateViewModal = withLoggerAndTelemetry(
116+
const MappedCreateViewModal = withTelemetry(
117117
connect(mapStateToProps, {
118118
createView,
119119
changeViewName,
120120
closeModal: close,
121-
})(CreateViewModal),
122-
'COMPASS-CREATE-VIEW-UI'
121+
})(CreateViewModal)
123122
);
124123

125124
export default MappedCreateViewModal;

packages/compass-aggregations/src/components/pipeline-builder-workspace/pipeline-as-text-workspace/pipeline-editor.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import type { RootState } from '../../../modules';
1919
import type { MongoServerError } from 'mongodb';
2020
import { changeEditorValue } from '../../../modules/pipeline-builder/text-editor-pipeline';
2121
import type { PipelineParserError } from '../../../modules/pipeline-builder/pipeline-parser/utils';
22-
import { useLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
2322
import { useAutocompleteFields } from '@mongodb-js/compass-field-store';
23+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
2424

2525
const containerStyles = css({
2626
position: 'relative',
@@ -79,7 +79,7 @@ export const PipelineEditor: React.FunctionComponent<PipelineEditorProps> = ({
7979
onChangePipelineText,
8080
}) => {
8181
const fields = useAutocompleteFields(namespace);
82-
const { track } = useLoggerAndTelemetry('COMPASS-AGGREGATIONS-UI');
82+
const track = useTelemetry();
8383
const editorInitialValueRef = useRef<string>(pipelineText);
8484
const editorCurrentValueRef = useRef<string>(pipelineText);
8585
editorCurrentValueRef.current = pipelineText;

packages/compass-aggregations/src/components/pipeline-builder-workspace/pipeline-builder-ui-workspace/dnd-wrapper.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
DragOverlay,
99
} from '@dnd-kit/core';
1010
import type { DragEndEvent, DragStartEvent } from '@dnd-kit/core';
11-
import { useLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
1211

1312
import {
1413
indexFromDroppableId,
@@ -17,6 +16,7 @@ import {
1716
import { UseCaseCardLayout } from '../../aggregation-side-panel/stage-wizard-use-cases/use-case-card';
1817
import type { PipelineBuilderUIWorkspaceProps } from '.';
1918
import type { DraggedUseCase } from '../../aggregation-side-panel/stage-wizard-use-cases/use-case-card';
19+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
2020

2121
// Types
2222
type PipelineBuilderDndWrapperProps = {
@@ -47,7 +47,7 @@ const PipelineBuilderDndWrapper = ({
4747
onStageMoveEnd,
4848
onUseCaseDropped,
4949
}: PipelineBuilderDndWrapperProps) => {
50-
const { track } = useLoggerAndTelemetry('COMPASS-AGGREGATIONS-UI');
50+
const track = useTelemetry();
5151

5252
const [draggedUseCase, setDraggedUseCase] = useState<DraggedUseCase | null>(
5353
null

packages/compass-aggregations/src/components/pipeline-toolbar/pipeline-ai.spec.tsx

+17-7
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ import {
1515
showInput,
1616
} from '../../modules/pipeline-builder/pipeline-ai';
1717
import { PreferencesProvider } from 'compass-preferences-model/provider';
18-
import { LoggerAndTelemetryProvider } from '@mongodb-js/compass-logging/provider';
18+
import {
19+
LoggerProvider,
20+
createNoopLogger,
21+
} from '@mongodb-js/compass-logging/provider';
22+
import { TelemetryProvider } from '@mongodb-js/compass-telemetry/provider';
1923

2024
const feedbackPopoverTextAreaId = 'feedback-popover-textarea';
2125
const thumbsUpId = 'ai-feedback-thumbs-up';
@@ -40,19 +44,25 @@ describe('PipelineAI Component', function () {
4044
render(
4145
// TODO(COMPASS-7415): use default values instead of updating values
4246
<PreferencesProvider value={preferences}>
43-
<LoggerAndTelemetryProvider
47+
<LoggerProvider
4448
value={
4549
{
4650
createLogger() {
47-
return { track, log: { info() {} }, mongoLogId() {} };
51+
return createNoopLogger();
4852
},
4953
} as any
5054
}
5155
>
52-
<Provider store={store}>
53-
<PipelineAI />
54-
</Provider>
55-
</LoggerAndTelemetryProvider>
56+
<TelemetryProvider
57+
options={{
58+
sendTrack: track,
59+
}}
60+
>
61+
<Provider store={store}>
62+
<PipelineAI />
63+
</Provider>
64+
</TelemetryProvider>
65+
</LoggerProvider>
5666
</PreferencesProvider>
5767
);
5868
return store;

packages/compass-aggregations/src/components/pipeline-toolbar/pipeline-ai.tsx

+6-4
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@ import {
1212
hideInput,
1313
} from '../../modules/pipeline-builder/pipeline-ai';
1414
import type { RootState } from '../../modules';
15-
import { useLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
15+
import { useLogger } from '@mongodb-js/compass-logging/provider';
1616
import { getPipelineStageOperatorsFromBuilderState } from '../../modules/pipeline-builder/builder-helpers';
17+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
1718

1819
const useOnSubmitFeedback = (lastAIPipelineRequestId: string | null) => {
19-
const logger = useLoggerAndTelemetry('AI-PIPELINE-UI');
20+
const logger = useLogger('AI-PIPELINE-UI');
21+
const track = useTelemetry();
2022
return useCallback(
2123
(feedback: 'positive' | 'negative', text: string) => {
22-
const { log, mongoLogId, track } = logger;
24+
const { log, mongoLogId } = logger;
2325
log.info(
2426
mongoLogId(1_001_000_232),
2527
'PipelineAI',
@@ -43,7 +45,7 @@ const useOnSubmitFeedback = (lastAIPipelineRequestId: string | null) => {
4345
timeout: 10_000,
4446
});
4547
},
46-
[logger, lastAIPipelineRequestId]
48+
[logger, track, lastAIPipelineRequestId]
4749
);
4850
};
4951

packages/compass-aggregations/src/components/saving-pipeline-modal/saving-pipeline-modal.tsx

+5-8
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import type { ChangeEvent } from 'react';
22
import React, { PureComponent } from 'react';
33
import PropTypes from 'prop-types';
44
import { FormModal, TextInput } from '@mongodb-js/compass-components';
5-
import type { LoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
6-
import { withLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
5+
import type { TrackFunction } from '@mongodb-js/compass-telemetry';
6+
import { withTelemetry } from '@mongodb-js/compass-telemetry/provider';
77

88
export interface SavingPipelineModalProps {
99
isOpen: boolean;
@@ -14,7 +14,7 @@ export interface SavingPipelineModalProps {
1414
savingPipelineNameChanged: (v: string) => void;
1515
saveCurrentPipeline: () => void;
1616
clonePipeline: () => void;
17-
logger: LoggerAndTelemetry;
17+
track: TrackFunction;
1818
}
1919

2020
/**
@@ -36,7 +36,7 @@ class SavingPipelineModal extends PureComponent<SavingPipelineModalProps> {
3636

3737
componentDidUpdate(prevProps: SavingPipelineModalProps) {
3838
if (prevProps.isOpen !== this.props.isOpen && this.props.isOpen) {
39-
this.props.logger.track('Screen', { name: 'save_pipeline_modal' });
39+
this.props.track('Screen', { name: 'save_pipeline_modal' });
4040
}
4141
}
4242

@@ -94,7 +94,4 @@ class SavingPipelineModal extends PureComponent<SavingPipelineModalProps> {
9494
}
9595
}
9696

97-
export default withLoggerAndTelemetry(
98-
SavingPipelineModal,
99-
'COMPASS-AGGREGATIONS-UI'
100-
);
97+
export default withTelemetry(SavingPipelineModal);

packages/compass-aggregations/src/components/stage-editor/stage-editor.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {
66
createStageAutocompleter,
77
} from '@mongodb-js/compass-editor';
88
import type { Annotation, EditorRef } from '@mongodb-js/compass-editor';
9-
import { useLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
109
import {
1110
css,
1211
cx,
@@ -25,6 +24,7 @@ import { mapPipelineModeToEditorViewType } from '../../modules/pipeline-builder/
2524
import type { RootState } from '../../modules';
2625
import type { PipelineParserError } from '../../modules/pipeline-builder/pipeline-parser/utils';
2726
import { useAutocompleteFields } from '@mongodb-js/compass-field-store';
27+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
2828

2929
const editorContainerStyles = css({
3030
display: 'flex',
@@ -96,7 +96,7 @@ export const StageEditor = ({
9696
editor_view_type,
9797
editorRef,
9898
}: StageEditorProps) => {
99-
const { track } = useLoggerAndTelemetry('COMPASS-AGGREGATIONS-UI');
99+
const track = useTelemetry();
100100
const darkMode = useDarkMode();
101101
const editorInitialValueRef = useRef<string | null>(stageValue);
102102
const editorCurrentValueRef = useRef<string | null>(stageValue);

packages/compass-aggregations/src/components/stage-preview/atlas-stage-preview.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
AtlasNavGraphic,
77
Body,
88
} from '@mongodb-js/compass-components';
9-
import { useLoggerAndTelemetry } from '@mongodb-js/compass-logging/provider';
9+
import { useTelemetry } from '@mongodb-js/compass-telemetry/provider';
1010

1111
const ATLAS_LINK = 'https://www.mongodb.com/cloud/atlas/lp/search-1';
1212

@@ -28,7 +28,7 @@ export const AtlasStagePreview = ({
2828
}: {
2929
stageOperator: string;
3030
}) => {
31-
const { track } = useLoggerAndTelemetry('COMPASS-AGGREGATIONS-UI');
31+
const track = useTelemetry();
3232
return (
3333
<div
3434
className={atlasContainerStyles}

packages/compass-aggregations/src/index.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ import {
1212
dataServiceLocator,
1313
type DataServiceLocator,
1414
} from '@mongodb-js/compass-connections/provider';
15-
import { createLoggerAndTelemetryLocator } from '@mongodb-js/compass-logging/provider';
15+
import { createLoggerLocator } from '@mongodb-js/compass-logging/provider';
16+
import { createTelemetryLocator } from '@mongodb-js/compass-telemetry/provider';
1617
import type {
1718
OptionalDataServiceProps,
1819
RequiredDataServiceProps,
@@ -41,7 +42,8 @@ export const CompassAggregationsHadronPlugin = registerHadronPlugin(
4142
workspaces: workspacesServiceLocator,
4243
instance: mongoDBInstanceLocator,
4344
preferences: preferencesLocator,
44-
logger: createLoggerAndTelemetryLocator('COMPASS-AGGREGATIONS-UI'),
45+
logger: createLoggerLocator('COMPASS-AGGREGATIONS-UI'),
46+
track: createTelemetryLocator(),
4547
atlasAuthService: atlasAuthServiceLocator,
4648
atlasAiService: atlasAiServiceLocator,
4749
pipelineStorage: pipelineStorageLocator,
@@ -65,7 +67,8 @@ export const CreateViewPlugin = registerHadronPlugin(
6567
},
6668
{
6769
connectionsManager: connectionsManagerLocator,
68-
logger: createLoggerAndTelemetryLocator('COMPASS-CREATE-VIEW-UI'),
70+
logger: createLoggerLocator('COMPASS-CREATE-VIEW-UI'),
71+
track: createTelemetryLocator(),
6972
workspaces: workspacesServiceLocator,
7073
}
7174
);

0 commit comments

Comments
 (0)