Skip to content

Commit f752c1a

Browse files
tomcat323tomzu
and
tomzu
authored
telemetry(amazonq): deprecate codewhisperer_userDecision metric (#6702)
## Problem the `codewhisperer_userDecision ` metric isn't used by the codewhisperer/Q team. And it is very noisy (5x more emits than second most frequent metric, 20x more emits than the third). ## Solution Stop emitting this metric from vsCode ## Note The user decision [events](https://github.com/aws/aws-toolkit-vscode/blob/ebb932698ff32c8d65504c702065a18cc2d325b0/packages/core/src/codewhisperer/util/telemetryHelper.ts#L261C19-L261C24) are still kept since they are used to calculate `userTriggerDecision`. De-noising it would be the next TODO --- - Treat all work as PUBLIC. Private `feature/x` branches will not be squash-merged at release time. - Your code changes must meet the guidelines in [CONTRIBUTING.md](https://github.com/aws/aws-toolkit-vscode/blob/master/CONTRIBUTING.md#guidelines). - License: I confirm that my contribution is made under the terms of the Apache 2.0 license. --------- Co-authored-by: tomzu <[email protected]>
1 parent a6677ac commit f752c1a

File tree

6 files changed

+2
-193
lines changed

6 files changed

+2
-193
lines changed

packages/amazonq/test/unit/codewhisperer/commands/onAcceptance.test.ts

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,8 @@
66
import assert from 'assert'
77
import * as vscode from 'vscode'
88
import * as sinon from 'sinon'
9-
import {
10-
onAcceptance,
11-
AcceptedSuggestionEntry,
12-
session,
13-
CodeWhispererTracker,
14-
RecommendationHandler,
15-
AuthUtil,
16-
} from 'aws-core-vscode/codewhisperer'
9+
import { onAcceptance, AcceptedSuggestionEntry, session, CodeWhispererTracker } from 'aws-core-vscode/codewhisperer'
1710
import { resetCodeWhispererGlobalVariables, createMockTextEditor } from 'aws-core-vscode/test'
18-
import { assertTelemetryCurried } from 'aws-core-vscode/test'
1911

2012
describe('onAcceptance', function () {
2113
describe('onAcceptance', function () {
@@ -68,46 +60,5 @@ describe('onAcceptance', function () {
6860
assert.deepStrictEqual(actualArg.endPosition, new vscode.Position(1, 26))
6961
assert.strictEqual(actualArg.index, 0)
7062
})
71-
72-
it('Should report telemetry that records this user decision event', async function () {
73-
const testStartUrl = 'testStartUrl'
74-
sinon.stub(AuthUtil.instance, 'startUrl').value(testStartUrl)
75-
const mockEditor = createMockTextEditor()
76-
session.requestIdList = ['test']
77-
RecommendationHandler.instance.requestId = 'test'
78-
session.sessionId = 'test'
79-
session.startPos = new vscode.Position(1, 0)
80-
mockEditor.selection = new vscode.Selection(new vscode.Position(1, 0), new vscode.Position(1, 0))
81-
session.recommendations = [{ content: "print('Hello World!')" }]
82-
session.setSuggestionState(0, 'Showed')
83-
session.triggerType = 'OnDemand'
84-
session.setCompletionType(0, session.recommendations[0])
85-
const assertTelemetry = assertTelemetryCurried('codewhisperer_userDecision')
86-
await onAcceptance({
87-
editor: mockEditor,
88-
range: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
89-
effectiveRange: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 26)),
90-
acceptIndex: 0,
91-
recommendation: "print('Hello World!')",
92-
requestId: '',
93-
sessionId: '',
94-
triggerType: 'OnDemand',
95-
completionType: 'Line',
96-
language: 'python',
97-
references: undefined,
98-
})
99-
assertTelemetry({
100-
codewhispererRequestId: 'test',
101-
codewhispererSessionId: 'test',
102-
codewhispererPaginationProgress: 1,
103-
codewhispererTriggerType: 'OnDemand',
104-
codewhispererSuggestionIndex: 0,
105-
codewhispererSuggestionState: 'Accept',
106-
codewhispererSuggestionReferenceCount: 0,
107-
codewhispererCompletionType: 'Line',
108-
codewhispererLanguage: 'python',
109-
credentialStartUrl: testStartUrl,
110-
})
111-
})
11263
})
11364
})

packages/amazonq/test/unit/codewhisperer/commands/onInlineAcceptance.test.ts

Lines changed: 1 addition & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ import assert from 'assert'
77
import * as vscode from 'vscode'
88
import * as sinon from 'sinon'
99
import { resetCodeWhispererGlobalVariables, createMockTextEditor } from 'aws-core-vscode/test'
10-
import { assertTelemetryCurried } from 'aws-core-vscode/test'
11-
import { onInlineAcceptance, RecommendationHandler, AuthUtil, session } from 'aws-core-vscode/codewhisperer'
12-
import { globals } from 'aws-core-vscode/shared'
13-
import { extensionVersion } from 'aws-core-vscode/shared'
10+
import { onInlineAcceptance, RecommendationHandler, session } from 'aws-core-vscode/codewhisperer'
1411

1512
describe('onInlineAcceptance', function () {
1613
describe('onInlineAcceptance', function () {
@@ -42,51 +39,5 @@ describe('onInlineAcceptance', function () {
4239
})
4340
assert.ok(spy.calledWith())
4441
})
45-
46-
it('Should report telemetry that records this user decision event', async function () {
47-
await globals.globalState.update('CODEWHISPERER_USER_GROUP', {
48-
version: extensionVersion,
49-
})
50-
51-
const testStartUrl = 'testStartUrl'
52-
sinon.stub(AuthUtil.instance, 'startUrl').value(testStartUrl)
53-
const mockEditor = createMockTextEditor()
54-
session.requestIdList = ['test']
55-
RecommendationHandler.instance.requestId = 'test'
56-
session.requestIdList = ['test']
57-
session.sessionId = 'test'
58-
session.startPos = new vscode.Position(1, 0)
59-
mockEditor.selection = new vscode.Selection(new vscode.Position(1, 0), new vscode.Position(1, 0))
60-
session.recommendations = [{ content: "print('Hello World!')" }]
61-
session.setSuggestionState(0, 'Showed')
62-
session.triggerType = 'OnDemand'
63-
session.setCompletionType(0, session.recommendations[0])
64-
const assertTelemetry = assertTelemetryCurried('codewhisperer_userDecision')
65-
await onInlineAcceptance({
66-
editor: mockEditor,
67-
range: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
68-
effectiveRange: new vscode.Range(new vscode.Position(1, 0), new vscode.Position(1, 21)),
69-
acceptIndex: 0,
70-
recommendation: "print('Hello World!')",
71-
requestId: '',
72-
sessionId: '',
73-
triggerType: 'OnDemand',
74-
completionType: 'Line',
75-
language: 'python',
76-
references: undefined,
77-
})
78-
assertTelemetry({
79-
codewhispererRequestId: 'test',
80-
codewhispererSessionId: 'test',
81-
codewhispererPaginationProgress: 1,
82-
codewhispererTriggerType: 'OnDemand',
83-
codewhispererSuggestionIndex: 0,
84-
codewhispererSuggestionState: 'Accept',
85-
codewhispererSuggestionReferenceCount: 0,
86-
codewhispererCompletionType: 'Line',
87-
codewhispererLanguage: 'python',
88-
credentialStartUrl: testStartUrl,
89-
})
90-
})
9142
})
9243
})

packages/amazonq/test/unit/codewhisperer/service/recommendationHandler.test.ts

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -150,41 +150,6 @@ describe('recommendationHandler', function () {
150150
codewhispererSupplementalContextLength: 100,
151151
})
152152
})
153-
154-
it('should call telemetry function that records a Empty userDecision event', async function () {
155-
const mockServerResult = {
156-
recommendations: [],
157-
nextToken: '',
158-
$response: {
159-
requestId: 'test_request_empty',
160-
httpResponse: {
161-
headers: {
162-
'x-amzn-sessionid': 'test_request_empty',
163-
},
164-
},
165-
},
166-
}
167-
const handler = new RecommendationHandler()
168-
sinon.stub(handler, 'getServerResponse').resolves(mockServerResult)
169-
sinon.stub(performance, 'now').returns(0.0)
170-
session.startPos = new vscode.Position(1, 0)
171-
session.requestIdList = ['test_request_empty']
172-
session.startCursorOffset = 2
173-
await handler.getRecommendations(mockClient, mockEditor, 'AutoTrigger', config, 'Enter')
174-
const assertTelemetry = assertTelemetryCurried('codewhisperer_userDecision')
175-
assertTelemetry({
176-
codewhispererRequestId: 'test_request_empty',
177-
codewhispererSessionId: 'test_request_empty',
178-
codewhispererPaginationProgress: 0,
179-
codewhispererTriggerType: 'AutoTrigger',
180-
codewhispererSuggestionIndex: -1,
181-
codewhispererSuggestionState: 'Empty',
182-
codewhispererSuggestionReferenceCount: 0,
183-
codewhispererCompletionType: 'Line',
184-
codewhispererLanguage: 'python',
185-
credentialStartUrl: testStartUrl,
186-
})
187-
})
188153
})
189154

190155
describe('isValidResponse', function () {

packages/amazonq/test/unit/codewhisperer/util/telemetryHelper.test.ts

Lines changed: 0 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -282,41 +282,4 @@ describe('telemetryHelper', function () {
282282
assert.strictEqual(actual, 'Empty')
283283
})
284284
})
285-
286-
describe('recordUserDecisionTelemetry', function () {
287-
beforeEach(async function () {
288-
await resetCodeWhispererGlobalVariables()
289-
})
290-
291-
it('Should call telemetry record for each recommendations with proper arguments', async function () {
292-
const telemetryHelper = new TelemetryHelper()
293-
const response = [{ content: "print('Hello')" }]
294-
const requestIdList = ['test_x', 'test_x', 'test_y']
295-
const sessionId = 'test_x'
296-
session.triggerType = 'AutoTrigger'
297-
const assertTelemetry = assertTelemetryCurried('codewhisperer_userDecision')
298-
const suggestionState = new Map<number, string>([[0, 'Showed']])
299-
const completionTypes = new Map<number, CodewhispererCompletionType>([[0, 'Line']])
300-
telemetryHelper.recordUserDecisionTelemetry(
301-
requestIdList,
302-
sessionId,
303-
response,
304-
0,
305-
0,
306-
completionTypes,
307-
suggestionState
308-
)
309-
assertTelemetry({
310-
codewhispererRequestId: 'test_x',
311-
codewhispererSessionId: 'test_x',
312-
codewhispererPaginationProgress: 0,
313-
codewhispererTriggerType: 'AutoTrigger',
314-
codewhispererSuggestionIndex: 0,
315-
codewhispererSuggestionState: 'Accept',
316-
codewhispererSuggestionReferenceCount: 0,
317-
codewhispererCompletionType: 'Line',
318-
codewhispererLanguage: 'python',
319-
})
320-
})
321-
})
322285
})

packages/core/src/codewhisperer/util/telemetryHelper.ts

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -161,25 +161,6 @@ export class TelemetryHelper {
161161
) {
162162
const selectedCustomization = getSelectedCustomization()
163163

164-
telemetry.codewhisperer_userDecision.emit({
165-
codewhispererCompletionType: 'Line',
166-
codewhispererGettingStartedTask: session.taskType,
167-
codewhispererLanguage: language,
168-
codewhispererPaginationProgress: paginationIndex,
169-
codewhispererRequestId: requestIdList[0],
170-
codewhispererSessionId: sessionId ? sessionId : undefined,
171-
codewhispererSuggestionIndex: -1,
172-
codewhispererSuggestionState: 'Empty',
173-
codewhispererSuggestionReferenceCount: 0,
174-
codewhispererSuggestionReferences: undefined,
175-
codewhispererSupplementalContextIsUtg: supplementalContextMetadata?.isUtg,
176-
codewhispererSupplementalContextLength: supplementalContextMetadata?.contentsLength,
177-
codewhispererSupplementalContextTimeout: supplementalContextMetadata?.isProcessTimeout,
178-
codewhispererTriggerType: session.triggerType,
179-
credentialStartUrl: AuthUtil.instance.startUrl,
180-
traceId: this.traceId,
181-
})
182-
183164
telemetry.codewhisperer_userTriggerDecision.emit({
184165
codewhispererAutomatedTriggerType: session.autoTriggerType,
185166
codewhispererClassifierResult: this.classifierResult,
@@ -300,7 +281,6 @@ export class TelemetryHelper {
300281
credentialStartUrl: AuthUtil.instance.startUrl,
301282
traceId: this.traceId,
302283
}
303-
telemetry.codewhisperer_userDecision.emit(event)
304284
events.push(event)
305285
}
306286

packages/core/src/shared/telemetry/exemptMetrics.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ const validationExemptMetrics: Set<string> = new Set([
2525
'codeTransform_jobStatusChanged',
2626
'codeTransform_logApiError',
2727
'codeTransform_logApiLatency',
28-
'codewhisperer_userDecision',
2928
'codewhisperer_codeScanIssueHover',
3029
'codewhisperer_codePercentage',
3130
'codewhisperer_userModification',

0 commit comments

Comments
 (0)