Skip to content

Commit 812b640

Browse files
authored
telemetry(messages): maybeShowMinVscodeWarning #5762
## Problem no metrics for notifications. ## Solution add `toolkit_showNotification` to `showMessage` and use it in `maybeShowMinVscodeWarning`.
1 parent 17e3b6b commit 812b640

File tree

4 files changed

+66
-29
lines changed

4 files changed

+66
-29
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/core/src/shared/extensionStartup.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import { fs } from '../shared/fs/fs'
1414
import { getIdeProperties, getIdeType, isAmazonQ, isCloud9, isCn, productName } from './extensionUtilities'
1515
import * as localizedText from './localizedText'
1616
import { AmazonQPromptSettings, ToolkitPromptSettings } from './settings'
17+
import { showMessage } from './utilities/messages'
18+
import { getTelemetryReasonDesc } from './errors'
1719

1820
const localize = nls.loadMessageBundle()
1921

@@ -26,20 +28,24 @@ export async function maybeShowMinVscodeWarning(minVscode: string) {
2628
return
2729
}
2830
const updateButton = `Update ${vscode.env.appName}`
31+
const msg = `${productName()} will soon require VS Code ${minVscode} or newer. The currently running version ${vscode.version} will no longer receive updates.`
2932
if (getIdeType() === 'vscode' && semver.lt(vscode.version, minVscode)) {
30-
void vscode.window
31-
.showWarningMessage(
32-
`${productName()} will soon require VS Code ${minVscode} or newer. The currently running version ${vscode.version} will no longer receive updates.`,
33-
updateButton,
34-
localizedText.dontShow
35-
)
36-
.then(async (resp) => {
37-
if (resp === updateButton) {
38-
await vscode.commands.executeCommand('update.checkForUpdate')
39-
} else if (resp === localizedText.dontShow) {
40-
void settings.disablePrompt('minIdeVersion')
41-
}
42-
})
33+
void showMessage(
34+
'warn',
35+
msg,
36+
[updateButton, localizedText.dontShow],
37+
{},
38+
{
39+
id: 'maybeShowMinVscodeWarning',
40+
reasonDesc: getTelemetryReasonDesc(msg),
41+
}
42+
).then(async (resp) => {
43+
if (resp === updateButton) {
44+
await vscode.commands.executeCommand('update.checkForUpdate')
45+
} else if (resp === localizedText.dontShow) {
46+
void settings.disablePrompt('minIdeVersion')
47+
}
48+
})
4349
}
4450
}
4551

packages/core/src/shared/utilities/messages.ts

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ import { getIcon, codicon } from '../icons'
1616
import globals from '../extensionGlobals'
1717
import { openUrl } from './vsCodeUtils'
1818
import { AmazonQPromptSettings, ToolkitPromptSettings } from '../../shared/settings'
19-
import { telemetry } from '../telemetry/telemetry'
19+
import { telemetry, ToolkitShowNotification } from '../telemetry/telemetry'
2020
import { vscodeComponent } from '../vscode/commands2'
21+
import { getTelemetryReasonDesc } from '../errors'
2122

2223
export const messages = {
2324
editCredentials(icon: boolean) {
@@ -35,21 +36,31 @@ export function makeFailedWriteMessage(filename: string): string {
3536
return message
3637
}
3738

38-
function showMessageWithItems(
39-
message: string,
39+
export function showMessage(
4040
kind: 'info' | 'warn' | 'error' = 'error',
41+
message: string,
4142
items: string[] = [],
42-
useModal: boolean = false
43+
options: vscode.MessageOptions & { telemetry?: boolean } = {},
44+
metric: Partial<ToolkitShowNotification> = {}
4345
): Thenable<string | undefined> {
44-
switch (kind) {
45-
case 'info':
46-
return vscode.window.showInformationMessage(message, { modal: useModal }, ...items)
47-
case 'warn':
48-
return vscode.window.showWarningMessage(message, { modal: useModal }, ...items)
49-
case 'error':
50-
default:
51-
return vscode.window.showErrorMessage(message, { modal: useModal }, ...items)
52-
}
46+
return telemetry.toolkit_showNotification.run(async (span) => {
47+
span.record({
48+
passive: true,
49+
id: 'unknown',
50+
component: 'editor',
51+
...metric,
52+
})
53+
54+
switch (kind) {
55+
case 'info':
56+
return vscode.window.showInformationMessage(message, options, ...items)
57+
case 'warn':
58+
return vscode.window.showWarningMessage(message, options, ...items)
59+
case 'error':
60+
default:
61+
return vscode.window.showErrorMessage(message, options, ...items)
62+
}
63+
})
5364
}
5465

5566
/**
@@ -75,7 +86,16 @@ export async function showMessageWithUrl(
7586
const uri = typeof url === 'string' ? vscode.Uri.parse(url) : url
7687
const items = [...extraItems, urlItem]
7788

78-
const p = showMessageWithItems(message, kind, items, useModal)
89+
const p = showMessage(
90+
kind,
91+
message,
92+
items,
93+
{ modal: useModal },
94+
{
95+
id: 'showMessageWithUrl',
96+
reasonDesc: getTelemetryReasonDesc(message),
97+
}
98+
)
7999
return p.then<string | undefined>((selection) => {
80100
if (selection === urlItem) {
81101
void openUrl(uri)
@@ -102,7 +122,16 @@ export async function showViewLogsMessage(
102122
const logsItem = localize('AWS.generic.message.viewLogs', 'View Logs...')
103123
const items = [...extraItems, logsItem]
104124

105-
const p = showMessageWithItems(message, kind, items)
125+
const p = showMessage(
126+
kind,
127+
message,
128+
items,
129+
{},
130+
{
131+
id: 'showViewLogsMessage',
132+
reasonDesc: getTelemetryReasonDesc(message),
133+
}
134+
)
106135
return p.then<string | undefined>((selection) => {
107136
if (selection === logsItem) {
108137
globals.logOutputChannel.show(true)

packages/core/src/test/shared/extensionUtilities.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import globals from '../../shared/extensionGlobals'
2121
import { createQuickStartWebview, maybeShowMinVscodeWarning } from '../../shared/extensionStartup'
2222
import { fs } from '../../shared'
2323
import { getTestWindow } from './vscode/window'
24+
import { assertTelemetry } from '../testUtil'
2425

2526
describe('extensionUtilities', function () {
2627
it('maybeShowMinVscodeWarning', async () => {
@@ -30,6 +31,7 @@ describe('extensionUtilities', function () {
3031
/will soon require .* 99\.0\.0 or newer. The currently running version .* will no longer receive updates./
3132
const msg = await getTestWindow().waitForMessage(expectedMsg)
3233
msg.close()
34+
assertTelemetry('toolkit_showNotification', [])
3335
})
3436

3537
describe('createQuickStartWebview', async function () {

0 commit comments

Comments
 (0)