From e3b3cdda6e4813c52076b0b9c9bd3758396bda47 Mon Sep 17 00:00:00 2001 From: TJ Date: Mon, 29 Mar 2021 13:09:00 -0600 Subject: [PATCH 1/7] feat: Add Lu editor telemetry --- Composer/packages/lib/code-editor/src/LuEditor.tsx | 9 ++++++--- .../lib/code-editor/src/lu/InsertEntityButton.tsx | 4 ++-- .../packages/lib/code-editor/src/lu/LuEditorToolbar.tsx | 2 +- .../packages/lib/code-editor/src/lu/LuLabelingMenu.tsx | 4 ++-- Composer/packages/types/src/telemetry.ts | 8 +++++++- .../packages/ui-plugins/luis/src/LuisIntentEditor.tsx | 1 + 6 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Composer/packages/lib/code-editor/src/LuEditor.tsx b/Composer/packages/lib/code-editor/src/LuEditor.tsx index 3b327d6f48..1c386dd110 100644 --- a/Composer/packages/lib/code-editor/src/LuEditor.tsx +++ b/Composer/packages/lib/code-editor/src/LuEditor.tsx @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { LuFile } from '@botframework-composer/types'; +import { LuFile, TelemetryClient } from '@botframework-composer/types'; import styled from '@emotion/styled'; import { EditorDidMount, Monaco } from '@monaco-editor/react'; import { FluentTheme, NeutralColors } from '@uifabric/fluent-theme'; @@ -76,6 +76,7 @@ export interface LULSPEditorProps extends BaseEditorProps { } | string; toolbarHidden?: boolean; + telemetryClient: TelemetryClient; onNavigateToLuPage?: (luFileId: string, luSectionId?: string) => void; } @@ -135,6 +136,7 @@ const LuEditor: React.FC = (props) => { onInit: onInitProp, placeholder = defaultPlaceholder, helpURL = LU_HELP, + telemetryClient, ...restProps } = props; const luServer = languageServer || defaultLUServer; @@ -239,7 +241,7 @@ const LuEditor: React.FC = (props) => { if (luEdits?.scrollLine) { editor.revealLineInCenter(luEdits?.scrollLine); } - + telemetryClient.track('LUEditorEntityDefinitionAdded', { entityType }); editor.focus(); } } @@ -248,11 +250,12 @@ const LuEditor: React.FC = (props) => { ); const insertEntity = useCallback( - (entityName: string) => { + (entityName: string, entityType: string) => { if (editor) { const edits = computeInsertLuEntityEdits(entityName, editor); if (edits) { editor.executeEdits('toolbarMenu', edits); + telemetryClient.track('LUEditorEntityTagAdded', { entityType }); editor.focus(); } } diff --git a/Composer/packages/lib/code-editor/src/lu/InsertEntityButton.tsx b/Composer/packages/lib/code-editor/src/lu/InsertEntityButton.tsx index 714c33175f..2c680ad5d6 100644 --- a/Composer/packages/lib/code-editor/src/lu/InsertEntityButton.tsx +++ b/Composer/packages/lib/code-editor/src/lu/InsertEntityButton.tsx @@ -30,7 +30,7 @@ const buttonStyles = { }; type Props = { - onInsertEntity: (entityName: string) => void; + onInsertEntity: (entityName: string, eventType: string) => void; labelingMenuVisible: boolean; insertEntityDisabled: boolean; tagEntityDisabled: boolean; @@ -47,7 +47,7 @@ export const InsertEntityButton = React.memo((props: Props) => { (_, item?: IContextualMenuItem) => { const entity = item?.data as LuEntity; if (entity) { - onInsertEntity(entity.Name); + onInsertEntity(entity.Name, entity.Type); } }, [onInsertEntity] diff --git a/Composer/packages/lib/code-editor/src/lu/LuEditorToolbar.tsx b/Composer/packages/lib/code-editor/src/lu/LuEditorToolbar.tsx index 3b80248d92..d1ffcaa6b3 100644 --- a/Composer/packages/lib/code-editor/src/lu/LuEditorToolbar.tsx +++ b/Composer/packages/lib/code-editor/src/lu/LuEditorToolbar.tsx @@ -29,7 +29,7 @@ type Props = { luFile?: LuFile; labelingMenuVisible: boolean; onDefineEntity: (entityType: ToolbarLuEntityType, entityName?: string) => void; - onInsertEntity: (entityName: string) => void; + onInsertEntity: (entityName: string, entityType: string) => void; }; export const LuEditorToolbar = React.memo((props: Props) => { diff --git a/Composer/packages/lib/code-editor/src/lu/LuLabelingMenu.tsx b/Composer/packages/lib/code-editor/src/lu/LuLabelingMenu.tsx index ac3849eadd..dc631558e5 100644 --- a/Composer/packages/lib/code-editor/src/lu/LuLabelingMenu.tsx +++ b/Composer/packages/lib/code-editor/src/lu/LuLabelingMenu.tsx @@ -15,7 +15,7 @@ type Props = { editor: any; luFile?: LuFile; onMenuToggled?: (visible: boolean) => void; - onInsertEntity: (entityName: string) => void; + onInsertEntity: (entityName: string, entityType: string) => void; }; export const LuLabelingMenu = ({ editor, luFile, onMenuToggled, onInsertEntity }: Props) => { @@ -79,7 +79,7 @@ export const LuLabelingMenu = ({ editor, luFile, onMenuToggled, onInsertEntity } (_, item?: IContextualMenuItem) => { const entity = item?.data as LuEntity; if (entity) { - onInsertEntity(entity.Name); + onInsertEntity(entity.Name, entity.Type); } setMenuTargetElm(null); }, diff --git a/Composer/packages/types/src/telemetry.ts b/Composer/packages/types/src/telemetry.ts index 2e69bf095f..b2cef2ce5b 100644 --- a/Composer/packages/types/src/telemetry.ts +++ b/Composer/packages/types/src/telemetry.ts @@ -135,6 +135,11 @@ type LgEditorEvents = { }; }; +type LuEditorEvents = { + LUEditorEntityTagAdded: { entityType: string }; + LUEditorEntityDefinitionAdded: { entityType: string }; +}; + type WebChatEvents = { WebChatPaneOpened: undefined; WebChatPaneClosed: undefined; @@ -185,7 +190,8 @@ export type TelemetryEvents = ApplicationEvents & AppSettingsEvents & PageView & LgEditorEvents & - WebChatEvents; + WebChatEvents & + LuEditorEvents; export type TelemetryEventName = keyof TelemetryEvents; diff --git a/Composer/packages/ui-plugins/luis/src/LuisIntentEditor.tsx b/Composer/packages/ui-plugins/luis/src/LuisIntentEditor.tsx index da231d65f5..8974b6594f 100644 --- a/Composer/packages/ui-plugins/luis/src/LuisIntentEditor.tsx +++ b/Composer/packages/ui-plugins/luis/src/LuisIntentEditor.tsx @@ -82,6 +82,7 @@ const LuisIntentEditor: React.FC> = (props) => { luOption={{ fileId: luFile.id, sectionId: luIntent.Name, projectId, luFeatures }} placeholder={placeholder || inlineModePlaceholder} value={luIntent.Body} + telemetryClient={shellApi.telemetryClient} onChange={commitChanges} onChangeSettings={handleSettingsChange} onNavigateToLuPage={navigateToLuPage} From da94c8a3a989d4c9bda71a61bd574028df5130d9 Mon Sep 17 00:00:00 2001 From: TJ Date: Mon, 29 Mar 2021 13:09:57 -0600 Subject: [PATCH 2/7] feat: Add machine info to the session started event --- Composer/packages/electron-server/src/main.ts | 12 +++++++--- .../packages/server/src/services/telemetry.ts | 22 ++++++++++++++++--- .../server/src/utility/electronContext.ts | 11 +++++++--- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/Composer/packages/electron-server/src/main.ts b/Composer/packages/electron-server/src/main.ts index 553419e4be..e2658d88d7 100644 --- a/Composer/packages/electron-server/src/main.ts +++ b/Composer/packages/electron-server/src/main.ts @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +import os from 'os'; import { join, resolve } from 'path'; import { AppUpdaterSettings, UserSettings } from '@bfc/shared'; @@ -163,9 +164,14 @@ async function loadServer() { getARMTokenForTenant: OneAuthService.getARMTokenForTenant.bind(OneAuthService), getTenants: OneAuthService.getTenants.bind(OneAuthService), logOut: OneAuthService.signOut.bind(OneAuthService), - machineId, - sessionId, - composerVersion: app.getVersion(), + telemetryData: { + composerVersion: app.getVersion(), + machineId, + sessionId, + architecture: os.arch(), + cpu: os.cpus()[0]?.model, + memory: os.totalmem(), + }, }); log(`Server started at port: ${serverPort}`); } diff --git a/Composer/packages/server/src/services/telemetry.ts b/Composer/packages/server/src/services/telemetry.ts index eaf9471a86..b90ed1d899 100644 --- a/Composer/packages/server/src/services/telemetry.ts +++ b/Composer/packages/server/src/services/telemetry.ts @@ -18,9 +18,11 @@ const getTelemetryContext = () => { const electronContext = useElectronContext(); if (electronContext) { - const { sessionId, machineId, composerVersion } = electronContext; + const { + telemetryData: { composerVersion, sessionId, machineId, architecture, cpu, memory }, + } = electronContext; const { telemetry = {} } = SettingsService.getSettings(); - return { sessionId, userId: machineId, telemetry, composerVersion }; + return { sessionId, userId: machineId, telemetry, composerVersion, architecture, cpu, memory }; } return {}; @@ -39,7 +41,7 @@ if (instrumentationKey) { // do not collect the user's machine name AppInsights.defaultClient.context.tags[AppInsights.defaultClient.context.keys.cloudRoleInstance] = ''; AppInsights.defaultClient.addTelemetryProcessor((envelope: AppInsights.Contracts.Envelope, context): boolean => { - const { sessionId, telemetry, composerVersion, userId } = getTelemetryContext(); + const { sessionId, telemetry, composerVersion, userId, architecture, cpu, memory } = getTelemetryContext(); if (!telemetry?.allowDataCollection) { return false; @@ -70,6 +72,20 @@ if (instrumentationKey) { data.baseData.properties.composerVersion = composerVersion; } + if (data.baseData.name === 'SessionStarted') { + if (architecture) { + data.baseData.properties.architecture = architecture; + } + + if (cpu) { + data.baseData.properties.cpu = cpu; + } + + if (memory) { + data.baseData.properties.memory = memory; + } + } + // remove PII for (const property of piiProperties) { if (data.baseData.properties[property] !== undefined) { diff --git a/Composer/packages/server/src/utility/electronContext.ts b/Composer/packages/server/src/utility/electronContext.ts index 1dbdd3da8f..b54b6a00a9 100644 --- a/Composer/packages/server/src/utility/electronContext.ts +++ b/Composer/packages/server/src/utility/electronContext.ts @@ -10,9 +10,14 @@ export type ElectronContext = { getARMTokenForTenant: (tenantId: string) => Promise; getTenants: () => Promise; logOut: () => void; - machineId: string; - sessionId: string; - composerVersion: string; + telemetryData: { + composerVersion: string; + machineId: string; + sessionId: string; + architecture: string; + cpu?: string; + memory: number; + }; }; let context; From a2cbf446817b45ea929d07fd559369dd3176830f Mon Sep 17 00:00:00 2001 From: TJ Date: Mon, 29 Mar 2021 16:56:12 -0600 Subject: [PATCH 3/7] requested changes --- Composer/packages/lib/code-editor/src/LuEditor.tsx | 6 +++--- Composer/packages/lib/code-editor/src/lu/LuLabelingMenu.tsx | 4 ++-- Composer/packages/types/src/telemetry.ts | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Composer/packages/lib/code-editor/src/LuEditor.tsx b/Composer/packages/lib/code-editor/src/LuEditor.tsx index 1c386dd110..6b55dad053 100644 --- a/Composer/packages/lib/code-editor/src/LuEditor.tsx +++ b/Composer/packages/lib/code-editor/src/LuEditor.tsx @@ -241,7 +241,7 @@ const LuEditor: React.FC = (props) => { if (luEdits?.scrollLine) { editor.revealLineInCenter(luEdits?.scrollLine); } - telemetryClient.track('LUEditorEntityDefinitionAdded', { entityType }); + telemetryClient.track('LUEditorToolbarEntityDefinitionAdded', { entityType }); editor.focus(); } } @@ -250,12 +250,12 @@ const LuEditor: React.FC = (props) => { ); const insertEntity = useCallback( - (entityName: string, entityType: string) => { + (entityName: string, entityType: string, method: 'toolbar' | 'floatingMenu' = 'toolbar') => { if (editor) { const edits = computeInsertLuEntityEdits(entityName, editor); if (edits) { editor.executeEdits('toolbarMenu', edits); - telemetryClient.track('LUEditorEntityTagAdded', { entityType }); + telemetryClient.track('LUEditorToolbarEntityTagAdded', { entityType: entityType || entityName, method }); editor.focus(); } } diff --git a/Composer/packages/lib/code-editor/src/lu/LuLabelingMenu.tsx b/Composer/packages/lib/code-editor/src/lu/LuLabelingMenu.tsx index dc631558e5..5ee16f0533 100644 --- a/Composer/packages/lib/code-editor/src/lu/LuLabelingMenu.tsx +++ b/Composer/packages/lib/code-editor/src/lu/LuLabelingMenu.tsx @@ -15,7 +15,7 @@ type Props = { editor: any; luFile?: LuFile; onMenuToggled?: (visible: boolean) => void; - onInsertEntity: (entityName: string, entityType: string) => void; + onInsertEntity: (entityName: string, entityType: string, method: 'toolbar' | 'floatingMenu') => void; }; export const LuLabelingMenu = ({ editor, luFile, onMenuToggled, onInsertEntity }: Props) => { @@ -79,7 +79,7 @@ export const LuLabelingMenu = ({ editor, luFile, onMenuToggled, onInsertEntity } (_, item?: IContextualMenuItem) => { const entity = item?.data as LuEntity; if (entity) { - onInsertEntity(entity.Name, entity.Type); + onInsertEntity(entity.Name, entity.Type, 'floatingMenu'); } setMenuTargetElm(null); }, diff --git a/Composer/packages/types/src/telemetry.ts b/Composer/packages/types/src/telemetry.ts index b2cef2ce5b..32bf79e4fb 100644 --- a/Composer/packages/types/src/telemetry.ts +++ b/Composer/packages/types/src/telemetry.ts @@ -136,8 +136,8 @@ type LgEditorEvents = { }; type LuEditorEvents = { - LUEditorEntityTagAdded: { entityType: string }; - LUEditorEntityDefinitionAdded: { entityType: string }; + LUEditorToolbarEntityTagAdded: { entityType: string; method: 'toolbar' | 'floatingMenu' }; + LUEditorToolbarEntityDefinitionAdded: { entityType: string }; }; type WebChatEvents = { From 77f7837d2b02afd0fe7f85d9ac117b951e324ec7 Mon Sep 17 00:00:00 2001 From: TJ Date: Mon, 29 Mar 2021 17:01:25 -0600 Subject: [PATCH 4/7] lint and cpu change --- Composer/packages/electron-server/src/main.ts | 2 +- Composer/packages/lib/code-editor/src/LuEditor.tsx | 5 ++++- Composer/packages/server/src/services/telemetry.ts | 10 +++++----- .../packages/server/src/utility/electronContext.ts | 2 +- .../packages/ui-plugins/luis/src/LuisIntentEditor.tsx | 2 +- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Composer/packages/electron-server/src/main.ts b/Composer/packages/electron-server/src/main.ts index e2658d88d7..962d4ed871 100644 --- a/Composer/packages/electron-server/src/main.ts +++ b/Composer/packages/electron-server/src/main.ts @@ -169,7 +169,7 @@ async function loadServer() { machineId, sessionId, architecture: os.arch(), - cpu: os.cpus()[0]?.model, + cpus: os.cpus().length, memory: os.totalmem(), }, }); diff --git a/Composer/packages/lib/code-editor/src/LuEditor.tsx b/Composer/packages/lib/code-editor/src/LuEditor.tsx index 6b55dad053..aa39c3c3ac 100644 --- a/Composer/packages/lib/code-editor/src/LuEditor.tsx +++ b/Composer/packages/lib/code-editor/src/LuEditor.tsx @@ -255,7 +255,10 @@ const LuEditor: React.FC = (props) => { const edits = computeInsertLuEntityEdits(entityName, editor); if (edits) { editor.executeEdits('toolbarMenu', edits); - telemetryClient.track('LUEditorToolbarEntityTagAdded', { entityType: entityType || entityName, method }); + telemetryClient.track('LUEditorToolbarEntityTagAdded', { + entityType: entityType !== 'prebuilt' ? entityType : entityName, + method, + }); editor.focus(); } } diff --git a/Composer/packages/server/src/services/telemetry.ts b/Composer/packages/server/src/services/telemetry.ts index b90ed1d899..a67c36466e 100644 --- a/Composer/packages/server/src/services/telemetry.ts +++ b/Composer/packages/server/src/services/telemetry.ts @@ -19,10 +19,10 @@ const getTelemetryContext = () => { if (electronContext) { const { - telemetryData: { composerVersion, sessionId, machineId, architecture, cpu, memory }, + telemetryData: { composerVersion, sessionId, machineId, architecture, cpus, memory }, } = electronContext; const { telemetry = {} } = SettingsService.getSettings(); - return { sessionId, userId: machineId, telemetry, composerVersion, architecture, cpu, memory }; + return { sessionId, userId: machineId, telemetry, composerVersion, architecture, cpus, memory }; } return {}; @@ -41,7 +41,7 @@ if (instrumentationKey) { // do not collect the user's machine name AppInsights.defaultClient.context.tags[AppInsights.defaultClient.context.keys.cloudRoleInstance] = ''; AppInsights.defaultClient.addTelemetryProcessor((envelope: AppInsights.Contracts.Envelope, context): boolean => { - const { sessionId, telemetry, composerVersion, userId, architecture, cpu, memory } = getTelemetryContext(); + const { sessionId, telemetry, composerVersion, userId, architecture, cpus, memory } = getTelemetryContext(); if (!telemetry?.allowDataCollection) { return false; @@ -77,11 +77,11 @@ if (instrumentationKey) { data.baseData.properties.architecture = architecture; } - if (cpu) { + if (cpus !== undefined) { data.baseData.properties.cpu = cpu; } - if (memory) { + if (memory !== undefined) { data.baseData.properties.memory = memory; } } diff --git a/Composer/packages/server/src/utility/electronContext.ts b/Composer/packages/server/src/utility/electronContext.ts index b54b6a00a9..61cdaca2b5 100644 --- a/Composer/packages/server/src/utility/electronContext.ts +++ b/Composer/packages/server/src/utility/electronContext.ts @@ -15,7 +15,7 @@ export type ElectronContext = { machineId: string; sessionId: string; architecture: string; - cpu?: string; + cpus: number; memory: number; }; }; diff --git a/Composer/packages/ui-plugins/luis/src/LuisIntentEditor.tsx b/Composer/packages/ui-plugins/luis/src/LuisIntentEditor.tsx index 8974b6594f..96a27f5486 100644 --- a/Composer/packages/ui-plugins/luis/src/LuisIntentEditor.tsx +++ b/Composer/packages/ui-plugins/luis/src/LuisIntentEditor.tsx @@ -81,8 +81,8 @@ const LuisIntentEditor: React.FC> = (props) => { luFile={luFile} luOption={{ fileId: luFile.id, sectionId: luIntent.Name, projectId, luFeatures }} placeholder={placeholder || inlineModePlaceholder} - value={luIntent.Body} telemetryClient={shellApi.telemetryClient} + value={luIntent.Body} onChange={commitChanges} onChangeSettings={handleSettingsChange} onNavigateToLuPage={navigateToLuPage} From a81b54b743cd5480eb4ce3648f756b6a26b962bc Mon Sep 17 00:00:00 2001 From: TJ Date: Mon, 29 Mar 2021 17:04:24 -0600 Subject: [PATCH 5/7] add screen resolution --- .../packages/client/src/telemetry/useInitializeLogger.ts | 7 ++++++- Composer/packages/types/src/telemetry.ts | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Composer/packages/client/src/telemetry/useInitializeLogger.ts b/Composer/packages/client/src/telemetry/useInitializeLogger.ts index 0965ca85f9..2bc5af0969 100644 --- a/Composer/packages/client/src/telemetry/useInitializeLogger.ts +++ b/Composer/packages/client/src/telemetry/useInitializeLogger.ts @@ -38,7 +38,12 @@ export const useInitializeLogger = () => { ipcRenderer?.on('session-update', (_event, name) => { switch (name) { case 'session-started': - TelemetryClient.track('SessionStarted', { os: window.navigator.platform }); + TelemetryClient.track('SessionStarted', { + os: window.navigator.platform, + height: screen.height, + width: screen.width, + devicePixelRatio: window.devicePixelRatio, + }); break; case 'session-ended': TelemetryClient.track('SessionEnded'); diff --git a/Composer/packages/types/src/telemetry.ts b/Composer/packages/types/src/telemetry.ts index 32bf79e4fb..a7c6bf1566 100644 --- a/Composer/packages/types/src/telemetry.ts +++ b/Composer/packages/types/src/telemetry.ts @@ -59,7 +59,7 @@ type PackageManagerEvents = { }; type SessionEvents = { - SessionStarted: { os: string }; + SessionStarted: { os: string; height: number; width: number; devicePixelRatio: number }; SessionEnded: undefined; NavigateTo: { sectionName: string; url: string }; }; From df15523524ff4f8aecd91f5fdb6681122d09d7dd Mon Sep 17 00:00:00 2001 From: TJ Date: Tue, 30 Mar 2021 08:24:35 -0600 Subject: [PATCH 6/7] Add AggregateClient --- .../client/src/telemetry/AggregateClient.ts | 22 +++++++++++++++++++ .../client/src/telemetry/TelemetryClient.ts | 3 ++- .../packages/lib/code-editor/src/LuEditor.tsx | 4 ++-- .../packages/server/src/services/telemetry.ts | 4 ++-- Composer/packages/types/src/telemetry.ts | 2 +- 5 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 Composer/packages/client/src/telemetry/AggregateClient.ts diff --git a/Composer/packages/client/src/telemetry/AggregateClient.ts b/Composer/packages/client/src/telemetry/AggregateClient.ts new file mode 100644 index 0000000000..fbbd20ad57 --- /dev/null +++ b/Composer/packages/client/src/telemetry/AggregateClient.ts @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +export const AggregateClient = (...loggers) => { + const drain = () => { + loggers.forEach((logger) => logger?.drain()); + }; + + const logPageView = (eventName, url, properties) => { + loggers.forEach((logger) => logger.logPageView(eventName, url, properties)); + }; + + const trackEvent = (eventName, properties) => { + loggers.forEach((logger) => logger.trackEvent(eventName, properties)); + }; + + return { + drain, + logPageView, + trackEvent, + }; +}; diff --git a/Composer/packages/client/src/telemetry/TelemetryClient.ts b/Composer/packages/client/src/telemetry/TelemetryClient.ts index 956b0771be..45bfde2c3f 100644 --- a/Composer/packages/client/src/telemetry/TelemetryClient.ts +++ b/Composer/packages/client/src/telemetry/TelemetryClient.ts @@ -3,6 +3,7 @@ import { LogData, TelemetryEventName, TelemetryEvents, TelemetrySettings } from '@bfc/shared'; +import { AggregateClient } from './AggregateClient'; import AppInsightsClient from './AppInsightsClient'; import ConsoleClient from './ConsoleClient'; @@ -44,7 +45,7 @@ export default class TelemetryClient { if (process.env.NODE_ENV !== 'development') { return AppInsightsClient; } else { - return ConsoleClient; + return AggregateClient(AppInsightsClient, ConsoleClient); } } } diff --git a/Composer/packages/lib/code-editor/src/LuEditor.tsx b/Composer/packages/lib/code-editor/src/LuEditor.tsx index aa39c3c3ac..cae133ef36 100644 --- a/Composer/packages/lib/code-editor/src/LuEditor.tsx +++ b/Composer/packages/lib/code-editor/src/LuEditor.tsx @@ -250,14 +250,14 @@ const LuEditor: React.FC = (props) => { ); const insertEntity = useCallback( - (entityName: string, entityType: string, method: 'toolbar' | 'floatingMenu' = 'toolbar') => { + (entityName: string, entityType: string, source: 'toolbar' | 'floatingMenu' = 'toolbar') => { if (editor) { const edits = computeInsertLuEntityEdits(entityName, editor); if (edits) { editor.executeEdits('toolbarMenu', edits); telemetryClient.track('LUEditorToolbarEntityTagAdded', { entityType: entityType !== 'prebuilt' ? entityType : entityName, - method, + source, }); editor.focus(); } diff --git a/Composer/packages/server/src/services/telemetry.ts b/Composer/packages/server/src/services/telemetry.ts index a67c36466e..21f52a2210 100644 --- a/Composer/packages/server/src/services/telemetry.ts +++ b/Composer/packages/server/src/services/telemetry.ts @@ -40,7 +40,7 @@ if (instrumentationKey) { .setAutoCollectRequests(true); // do not collect the user's machine name AppInsights.defaultClient.context.tags[AppInsights.defaultClient.context.keys.cloudRoleInstance] = ''; - AppInsights.defaultClient.addTelemetryProcessor((envelope: AppInsights.Contracts.Envelope, context): boolean => { + AppInsights.defaultClient.addTelemetryProcessor((envelope: AppInsights.Contracts.Envelope): boolean => { const { sessionId, telemetry, composerVersion, userId, architecture, cpus, memory } = getTelemetryContext(); if (!telemetry?.allowDataCollection) { @@ -78,7 +78,7 @@ if (instrumentationKey) { } if (cpus !== undefined) { - data.baseData.properties.cpu = cpu; + data.baseData.properties.cpus = cpus; } if (memory !== undefined) { diff --git a/Composer/packages/types/src/telemetry.ts b/Composer/packages/types/src/telemetry.ts index a7c6bf1566..dc0fa1ab10 100644 --- a/Composer/packages/types/src/telemetry.ts +++ b/Composer/packages/types/src/telemetry.ts @@ -136,7 +136,7 @@ type LgEditorEvents = { }; type LuEditorEvents = { - LUEditorToolbarEntityTagAdded: { entityType: string; method: 'toolbar' | 'floatingMenu' }; + LUEditorToolbarEntityTagAdded: { entityType: string; source: 'toolbar' | 'floatingMenu' }; LUEditorToolbarEntityDefinitionAdded: { entityType: string }; }; From ef4385e68149d5834a670a4f18baa86d5c4daaaf Mon Sep 17 00:00:00 2001 From: TJ Date: Tue, 30 Mar 2021 09:27:58 -0600 Subject: [PATCH 7/7] fix missing props --- .../components/TriggerCreationModal/resolveTriggerWidget.tsx | 2 ++ .../packages/client/src/pages/knowledge-base/code-editor.tsx | 1 + .../client/src/pages/language-understanding/code-editor.tsx | 3 +++ 3 files changed, 6 insertions(+) diff --git a/Composer/packages/client/src/components/TriggerCreationModal/resolveTriggerWidget.tsx b/Composer/packages/client/src/components/TriggerCreationModal/resolveTriggerWidget.tsx index 0c272c1207..a6ee4f15ef 100644 --- a/Composer/packages/client/src/components/TriggerCreationModal/resolveTriggerWidget.tsx +++ b/Composer/packages/client/src/components/TriggerCreationModal/resolveTriggerWidget.tsx @@ -11,6 +11,7 @@ import { LuEditor, inlineModePlaceholder } from '@bfc/code-editor'; import { TriggerFormData, TriggerFormDataErrors } from '../../utils/dialogUtil'; import { isRegExRecognizerType, isLUISnQnARecognizerType, isPVARecognizerType } from '../../utils/dialogValidator'; +import TelemetryClient from '../../telemetry/TelemetryClient'; import { intentStyles } from './styles'; import { validateEventName, validateIntentName, getLuDiagnostics, validateRegExPattern } from './validators'; @@ -108,6 +109,7 @@ export function resolveTriggerWidget( luFeatures: {}, }} placeholder={inlineModePlaceholder} + telemetryClient={TelemetryClient} value={formData.triggerPhrases} onChange={onTriggerPhrasesChange} /> diff --git a/Composer/packages/client/src/pages/knowledge-base/code-editor.tsx b/Composer/packages/client/src/pages/knowledge-base/code-editor.tsx index f61e448c66..8112d9c322 100644 --- a/Composer/packages/client/src/pages/knowledge-base/code-editor.tsx +++ b/Composer/packages/client/src/pages/knowledge-base/code-editor.tsx @@ -110,6 +110,7 @@ const CodeEditor: React.FC = (props) => { path: lspServerPath, }} placeholder={defaultQnAPlaceholder} + telemetryClient={TelemetryClient} value={content} onChange={onChangeContent} onChangeSettings={handleSettingsChange} diff --git a/Composer/packages/client/src/pages/language-understanding/code-editor.tsx b/Composer/packages/client/src/pages/language-understanding/code-editor.tsx index b5f8d343fc..72fd35e5cb 100644 --- a/Composer/packages/client/src/pages/language-understanding/code-editor.tsx +++ b/Composer/packages/client/src/pages/language-understanding/code-editor.tsx @@ -15,6 +15,7 @@ import { LuFile } from '@bfc/shared'; import { localeState, settingsState } from '../../recoilModel/atoms'; import { userSettingsState, dispatcherState, luFilesSelectorFamily } from '../../recoilModel'; +import TelemetryClient from '../../telemetry/TelemetryClient'; import { DiffCodeEditor } from './diff-editor'; @@ -155,6 +156,7 @@ const CodeEditor: React.FC = (props) => { }} luFile={file} luOption={luOption} + telemetryClient={TelemetryClient} value={content} onChange={onChange} onChangeSettings={handleSettingsChange} @@ -174,6 +176,7 @@ const CodeEditor: React.FC = (props) => { options={{ readOnly: true, }} + telemetryClient={TelemetryClient} value={defaultLangContent} onChange={() => {}} />