Skip to content

Commit 8f35824

Browse files
authored
Migrate over telemetry to the shared package (#908)
Migrate all telemetry calls to the shared package
1 parent be97790 commit 8f35824

31 files changed

+395
-852
lines changed

package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@
479479
"createRelease": "ts-node ./build-scripts/createRelease.ts"
480480
},
481481
"devDependencies": {
482-
"@aws-toolkits/telemetry": "0.0.6",
482+
"@aws-toolkits/telemetry": "0.0.8",
483483
"@types/adm-zip": "^0.4.32",
484484
"@types/async-lock": "^1.1.0",
485485
"@types/cross-spawn": "^6.0.0",

src/awsexplorer/activation.ts

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@ import { ext } from '../shared/extensionGlobals'
1616
import { safeGet } from '../shared/extensionUtilities'
1717
import { getLogger } from '../shared/logger'
1818
import { RegionProvider } from '../shared/regions/regionProvider'
19-
import { recordVscodeActiveregions } from '../shared/telemetry/telemetry'
20-
import { registerCommand } from '../shared/telemetry/telemetryUtils'
19+
import {
20+
recordAwsHideRegion,
21+
recordAwsRefreshExplorer,
22+
recordAwsShowRegion,
23+
recordVscodeActiveRegions
24+
} from '../shared/telemetry/telemetry'
2125
import { AWSTreeNodeBase } from '../shared/treeview/nodes/awsTreeNodeBase'
2226
import { ErrorNode } from '../shared/treeview/nodes/errorNode'
2327
import { showErrorDetails } from '../shared/treeview/webviews/showErrorDetails'
@@ -43,7 +47,7 @@ export async function activate(activateArguments: {
4347

4448
await registerAwsExplorerCommands(awsExplorer)
4549

46-
recordVscodeActiveregions({ value: awsExplorer.getRegionNodesSize() })
50+
recordVscodeActiveRegions({ value: awsExplorer.getRegionNodesSize() })
4751

4852
activateArguments.awsContextTrees.addTree(awsExplorer)
4953

@@ -58,28 +62,27 @@ async function registerAwsExplorerCommands(
5862
awsExplorer: AwsExplorer,
5963
lambdaOutputChannel: vscode.OutputChannel = vscode.window.createOutputChannel('AWS Lambda')
6064
): Promise<void> {
61-
registerCommand({
62-
command: 'aws.showRegion',
63-
callback: async () => {
65+
vscode.commands.registerCommand('aws.showRegion', async () => {
66+
try {
6467
await ext.awsContextCommands.onCommandShowRegion()
65-
recordVscodeActiveregions({ value: awsExplorer.getRegionNodesSize() })
66-
},
67-
telemetryName: 'Command_aws.showRegion'
68+
} finally {
69+
recordAwsShowRegion()
70+
recordVscodeActiveRegions({ value: awsExplorer.getRegionNodesSize() })
71+
}
6872
})
6973

70-
registerCommand({
71-
command: 'aws.hideRegion',
72-
callback: async (node?: RegionNode) => {
74+
vscode.commands.registerCommand('aws.hideRegion', async (node?: RegionNode) => {
75+
try {
7376
await ext.awsContextCommands.onCommandHideRegion(safeGet(node, x => x.regionCode))
74-
recordVscodeActiveregions({ value: awsExplorer.getRegionNodesSize() })
75-
},
76-
telemetryName: 'Command_aws.hideRegion'
77+
} finally {
78+
recordAwsHideRegion()
79+
recordVscodeActiveRegions({ value: awsExplorer.getRegionNodesSize() })
80+
}
7781
})
7882

79-
registerCommand({
80-
command: 'aws.refreshAwsExplorer',
81-
callback: async () => awsExplorer.refresh(),
82-
telemetryName: 'Command_aws.refreshAwsExplorer'
83+
vscode.commands.registerCommand('aws.refreshAwsExplorer', async () => {
84+
recordAwsRefreshExplorer()
85+
awsExplorer.refresh()
8386
})
8487

8588
vscode.commands.registerCommand(
@@ -93,36 +96,33 @@ async function registerAwsExplorerCommands(
9396
})
9497
)
9598

96-
registerCommand({
97-
command: 'aws.deleteCloudFormation',
98-
callback: async (node: CloudFormationStackNode) =>
99-
await deleteCloudFormation(() => awsExplorer.refresh(node.parent), node),
100-
telemetryName: 'cloudformation_delete'
101-
})
99+
vscode.commands.registerCommand(
100+
'aws.deleteCloudFormation',
101+
async (node: CloudFormationStackNode) =>
102+
await deleteCloudFormation(() => awsExplorer.refresh(node.parent), node)
103+
)
102104

103-
registerCommand({
104-
command: 'aws.showErrorDetails',
105-
callback: async (node: ErrorNode) => await showErrorDetails(node),
106-
telemetryName: 'Command_aws.showErrorDetails'
107-
})
105+
vscode.commands.registerCommand('aws.showErrorDetails', async (node: ErrorNode) => await showErrorDetails(node))
108106

109-
registerCommand({
110-
command: 'aws.invokeLambda',
111-
callback: async (node: LambdaFunctionNode) =>
107+
vscode.commands.registerCommand(
108+
'aws.invokeLambda',
109+
async (node: LambdaFunctionNode) =>
112110
await invokeLambda({
113111
functionNode: node,
114112
outputChannel: lambdaOutputChannel
115-
}),
116-
telemetryName: 'lambda_invokeremote'
117-
})
113+
})
114+
)
118115

119-
registerCommand({
120-
command: 'aws.refreshAwsExplorerNode',
121-
callback: async (awsexplorer: AwsExplorer, element: AWSTreeNodeBase) => {
122-
awsexplorer.refresh(element)
123-
},
124-
telemetryName: 'Command_aws.refreshAwsExplorerNode'
125-
})
116+
vscode.commands.registerCommand(
117+
'aws.refreshAwsExplorerNode',
118+
async (awsexplorer: AwsExplorer, element: AWSTreeNodeBase) => {
119+
try {
120+
awsexplorer.refresh(element)
121+
} finally {
122+
recordAwsRefreshExplorer()
123+
}
124+
}
125+
)
126126
}
127127

128128
function updateAwsExplorerWhenAwsContextCredentialsChange(

src/cdk/activation.ts

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,20 @@
55

66
import * as vscode from 'vscode'
77
import { cdkDocumentationUrl, cdkProvideFeedbackUrl } from '../shared/constants'
8-
import { ext } from '../shared/extensionGlobals'
9-
import { TelemetryEvent } from '../shared/telemetry/telemetryEvent'
10-
import { defaultMetricDatum, registerCommand } from '../shared/telemetry/telemetryUtils'
8+
import {
9+
recordCdkAppExpanded,
10+
recordCdkExplorerDisabled,
11+
recordCdkExplorerEnabled,
12+
recordCdkHelp,
13+
recordCdkProvideFeedback,
14+
recordCdkRefreshExplorer
15+
} from '../shared/telemetry/telemetry'
1116
import { AwsCdkExplorer } from './explorer/awsCdkExplorer'
1217
import { AppNode } from './explorer/nodes/appNode'
1318
import { cdk } from './globals'
1419

1520
const EXPLORER_ENABLED_CONFIG_KEY = 'aws.cdk.explorer.enabled'
1621

17-
/**
18-
* Telemetry event names for recorded metrics
19-
*/
20-
enum TelemetryEventTypes {
21-
APP_EXPANDED = 'cdk_appExpanded',
22-
EXPLORER_RE_ENABLED = 'cdk_explorerEnabled',
23-
EXPLORER_DISABLED = 'cdk_explorerDisabled'
24-
}
25-
2622
/**
2723
* Activate AWS CDK related functionality for the extension.
2824
*/
@@ -42,7 +38,7 @@ export async function activate(activateArguments: { extensionContext: vscode.Ext
4238
const appNodeExpanded = view.onDidExpandElement(e => {
4339
if (e.element instanceof AppNode && !e.element.expandMetricRecorded) {
4440
e.element.expandMetricRecorded = true
45-
ext.telemetry.record(getTelemetryEvent(TelemetryEventTypes.APP_EXPANDED))
41+
recordCdkAppExpanded()
4642
}
4743
})
4844
activateArguments.extensionContext.subscriptions.push(appNodeExpanded)
@@ -51,22 +47,15 @@ export async function activate(activateArguments: { extensionContext: vscode.Ext
5147
const explorerEnabledToggled = vscode.workspace.onDidChangeConfiguration(e => {
5248
if (e.affectsConfiguration(EXPLORER_ENABLED_CONFIG_KEY)) {
5349
if (vscode.workspace.getConfiguration().get(EXPLORER_ENABLED_CONFIG_KEY)) {
54-
ext.telemetry.record(getTelemetryEvent(TelemetryEventTypes.EXPLORER_RE_ENABLED))
50+
recordCdkExplorerEnabled()
5551
} else {
56-
ext.telemetry.record(getTelemetryEvent(TelemetryEventTypes.EXPLORER_DISABLED))
52+
recordCdkExplorerDisabled()
5753
}
5854
}
5955
})
6056
activateArguments.extensionContext.subscriptions.push(explorerEnabledToggled)
6157
}
6258

63-
function getTelemetryEvent(eventName: TelemetryEventTypes): TelemetryEvent {
64-
return {
65-
createTime: new Date(),
66-
data: [defaultMetricDatum(eventName)]
67-
}
68-
}
69-
7059
function initializeIconPaths(context: vscode.ExtensionContext) {
7160
cdk.iconPaths.dark.cdk = context.asAbsolutePath('resources/dark/cdk/cdk.svg')
7261
cdk.iconPaths.light.cdk = context.asAbsolutePath('resources/light/cdk/cdk.svg')
@@ -76,23 +65,19 @@ function initializeIconPaths(context: vscode.ExtensionContext) {
7665
}
7766

7867
async function registerCdkCommands(explorer: AwsCdkExplorer): Promise<void> {
79-
registerCommand({
80-
command: 'aws.cdk.provideFeedback',
81-
callback: async () => {
82-
vscode.env.openExternal(vscode.Uri.parse(cdkProvideFeedbackUrl))
83-
},
84-
telemetryName: 'Command_aws.cdk.provideFeedback'
68+
vscode.commands.registerCommand('aws.cdk.provideFeedback', async () => {
69+
vscode.env.openExternal(vscode.Uri.parse(cdkProvideFeedbackUrl))
70+
recordCdkProvideFeedback()
8571
})
86-
registerCommand({
87-
command: 'aws.cdk.help',
88-
callback: async () => {
89-
vscode.env.openExternal(vscode.Uri.parse(cdkDocumentationUrl))
90-
},
91-
telemetryName: 'Command_aws.cdk.help'
72+
vscode.commands.registerCommand('aws.cdk.help', async () => {
73+
vscode.env.openExternal(vscode.Uri.parse(cdkDocumentationUrl))
74+
recordCdkHelp()
9275
})
93-
registerCommand({
94-
command: 'aws.refreshCdkExplorer',
95-
callback: async () => explorer.refresh(),
96-
telemetryName: 'Command_aws.refreshCdkExplorer'
76+
vscode.commands.registerCommand('aws.refreshCdkExplorer', async () => {
77+
try {
78+
explorer.refresh()
79+
} finally {
80+
recordCdkRefreshExplorer()
81+
}
9782
})
9883
}

src/credentials/loginManager.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { AwsContext } from '../shared/awsContext'
1111
import { credentialHelpUrl } from '../shared/constants'
1212
import { getAccountId } from '../shared/credentials/accountId'
1313
import { getLogger } from '../shared/logger'
14+
import { recordAwsSetCredentials, Result } from '../shared/telemetry/telemetry'
1415
import { CredentialsStore } from './credentialsStore'
1516
import { CredentialsProvider } from './providers/credentialsProvider'
1617
import { asString, CredentialsProviderId } from './providers/credentialsProviderId'
@@ -26,6 +27,7 @@ export class LoginManager {
2627
* If an error occurs while trying to set up and verify these credentials, the Toolkit is "logged out".
2728
*/
2829
public async login(credentialsProviderId: CredentialsProviderId): Promise<void> {
30+
let loginResult: Result = 'Succeeded'
2931
try {
3032
const provider = await CredentialsProviderManager.getInstance().getCredentialsProvider(
3133
credentialsProviderId
@@ -54,6 +56,7 @@ export class LoginManager {
5456
defaultRegion: provider.getDefaultRegion()
5557
})
5658
} catch (err) {
59+
loginResult = 'Failed'
5760
getLogger().error(
5861
`Error trying to connect to AWS with Credentials Provider ${asString(
5962
credentialsProviderId
@@ -65,6 +68,8 @@ export class LoginManager {
6568
await this.logout()
6669

6770
this.notifyUserInvalidCredentials(credentialsProviderId)
71+
} finally {
72+
recordAwsSetCredentials({ result: loginResult })
6873
}
6974
}
7075

src/eventSchemas/activation.ts

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6+
import * as vscode from 'vscode'
67
import { downloadSchemaItemCode } from '../eventSchemas/commands/downloadSchemaItemCode'
78
import { createSearchSchemasWebView } from '../eventSchemas/commands/searchSchemas'
89
import { viewSchemaItem } from '../eventSchemas/commands/viewSchemaItem'
910
import { RegistryItemNode } from '../eventSchemas/explorer/registryItemNode'
1011
import { SchemaItemNode } from '../eventSchemas/explorer/schemaItemNode'
1112
import { SchemasNode } from '../eventSchemas/explorer/schemasNode'
12-
import { registerCommand } from '../shared/telemetry/telemetryUtils'
1313

1414
/**
1515
* Activate Schemas functionality for the extension.
@@ -19,33 +19,17 @@ export async function activate(): Promise<void> {
1919
}
2020

2121
async function registerSchemasCommands(): Promise<void> {
22-
registerCommand({
23-
command: 'aws.viewSchemaItem',
24-
callback: async (node: SchemaItemNode) => await viewSchemaItem(node),
25-
telemetryName: 'schemas_view'
26-
})
27-
28-
registerCommand({
29-
command: 'aws.downloadSchemaItemCode',
30-
callback: async (node: SchemaItemNode) => await downloadSchemaItemCode(node),
31-
telemetryName: 'schemas_download'
32-
})
33-
34-
registerCommand({
35-
command: 'aws.searchSchema',
36-
callback: async (node: SchemasNode) =>
37-
await createSearchSchemasWebView({
38-
node: node
39-
}),
40-
telemetryName: 'schemas_search'
41-
})
42-
43-
registerCommand({
44-
command: 'aws.searchSchemaPerRegistry',
45-
callback: async (node: RegistryItemNode) =>
46-
await createSearchSchemasWebView({
47-
node: node
48-
}),
49-
telemetryName: 'schemas_search'
50-
})
22+
vscode.commands.registerCommand('aws.viewSchemaItem', async (node: SchemaItemNode) => await viewSchemaItem(node))
23+
vscode.commands.registerCommand(
24+
'aws.downloadSchemaItemCode',
25+
async (node: SchemaItemNode) => await downloadSchemaItemCode(node)
26+
)
27+
vscode.commands.registerCommand(
28+
'aws.searchSchema',
29+
async (node: SchemasNode) => await createSearchSchemasWebView({ node: node })
30+
)
31+
vscode.commands.registerCommand(
32+
'aws.searchSchemaPerRegistry',
33+
async (node: RegistryItemNode) => await createSearchSchemasWebView({ node: node })
34+
)
5135
}

src/eventSchemas/commands/downloadSchemaItemCode.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import * as vscode from 'vscode'
1212
import { SchemaClient } from '../../shared/clients/schemaClient'
1313
import { makeTemporaryToolkitFolder } from '../../shared/filesystemUtilities'
1414
import { getLogger, Logger } from '../../shared/logger'
15+
import { recordSchemasDownload, Result } from '../../shared/telemetry/telemetry'
1516
import { ExtensionDisposableFiles } from '../../shared/utilities/disposableFiles'
1617
import { SchemaItemNode } from '../explorer/schemaItemNode'
1718
import { getLanguageDetails } from '../models/schemaCodeLangs'
@@ -34,6 +35,7 @@ const MAX_RETRIES = 150 // p100 of Java code generation is 250 seconds. So retry
3435

3536
export async function downloadSchemaItemCode(node: SchemaItemNode) {
3637
const logger: Logger = getLogger()
38+
let downloadResult: Result = 'Succeeded'
3739

3840
try {
3941
const wizardContext = new DefaultSchemaCodeDownloadWizardContext(node)
@@ -75,6 +77,7 @@ export async function downloadSchemaItemCode(node: SchemaItemNode) {
7577
await vscode.window.showTextDocument(vscode.Uri.file(coreCodeFilePath))
7678
}
7779
} catch (err) {
80+
downloadResult = 'Failed'
7881
const error = err as Error
7982
let errorMessage = localize(
8083
'AWS.message.error.schemas.downloadCodeBindings.failed_to_download',
@@ -86,6 +89,8 @@ export async function downloadSchemaItemCode(node: SchemaItemNode) {
8689
}
8790
vscode.window.showErrorMessage(errorMessage)
8891
logger.error('Error downloading schema', error)
92+
} finally {
93+
recordSchemasDownload({ result: downloadResult })
8994
}
9095
}
9196

0 commit comments

Comments
 (0)