Skip to content

Commit dda7a05

Browse files
Merge master into feature/amazonqLSP
2 parents 9832cbb + e63079d commit dda7a05

File tree

6 files changed

+119
-220
lines changed

6 files changed

+119
-220
lines changed

package-lock.json

Lines changed: 4 additions & 4 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
@@ -39,7 +39,7 @@
3939
"generateNonCodeFiles": "npm run generateNonCodeFiles -w packages/ --if-present"
4040
},
4141
"devDependencies": {
42-
"@aws-toolkits/telemetry": "^1.0.284",
42+
"@aws-toolkits/telemetry": "^1.0.287",
4343
"@playwright/browser-chromium": "^1.43.1",
4444
"@stylistic/eslint-plugin": "^2.11.0",
4545
"@types/he": "^1.2.3",

packages/core/src/amazonqTest/chat/controller/controller.ts

Lines changed: 52 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -242,22 +242,20 @@ export class TestController {
242242
this.messenger.sendUpdatePromptProgress(data.tabID, null)
243243
const session = this.sessionStorage.getSession()
244244
const isCancel = data.error.message === unitTestGenerationCancelMessage
245-
telemetry.amazonq_utgGenerateTests.emit({
246-
cwsprChatProgrammingLanguage: session.fileLanguage ?? 'plaintext',
247-
jobId: session.listOfTestGenerationJobId[0], // For RIV, UTG does only one StartTestGeneration API call
248-
jobGroup: session.testGenerationJobGroupName,
249-
requestId: session.startTestGenerationRequestId,
250-
hasUserPromptSupplied: session.hasUserPromptSupplied,
251-
isCodeBlockSelected: session.isCodeBlockSelected,
252-
buildPayloadBytes: session.srcPayloadSize,
253-
buildZipFileBytes: session.srcZipFileSize,
254-
artifactsUploadDuration: session.artifactsUploadDuration,
255-
perfClientLatency: performance.now() - session.testGenerationStartTime,
256-
result: isCancel ? 'Cancelled' : 'Failed',
257-
reasonDesc: getTelemetryReasonDesc(data.error),
258-
isSupportedLanguage: true,
259-
credentialStartUrl: AuthUtil.instance.startUrl,
260-
})
245+
246+
TelemetryHelper.instance.sendTestGenerationToolkitEvent(
247+
session,
248+
true,
249+
isCancel ? 'Cancelled' : 'Failed',
250+
session.startTestGenerationRequestId,
251+
performance.now() - session.testGenerationStartTime,
252+
getTelemetryReasonDesc(data.error),
253+
session.isCodeBlockSelected,
254+
session.artifactsUploadDuration,
255+
session.srcPayloadSize,
256+
session.srcZipFileSize
257+
)
258+
261259
if (session.stopIteration) {
262260
// Error from Science
263261
this.messenger.sendMessage(data.error.message.replaceAll('```', ''), data.tabID, 'answer')
@@ -716,27 +714,25 @@ export class TestController {
716714
// TODO: send the message once again once build is enabled
717715
// this.messenger.sendMessage('Accepted', message.tabID, 'prompt')
718716
telemetry.ui_click.emit({ elementId: 'unitTestGeneration_acceptDiff' })
719-
telemetry.amazonq_utgGenerateTests.emit({
720-
generatedCount: session.numberOfTestsGenerated,
721-
acceptedCount: session.numberOfTestsGenerated,
722-
generatedCharactersCount: session.charsOfCodeGenerated,
723-
acceptedCharactersCount: session.charsOfCodeAccepted,
724-
generatedLinesCount: session.linesOfCodeGenerated,
725-
acceptedLinesCount: session.linesOfCodeAccepted,
726-
cwsprChatProgrammingLanguage: session.fileLanguage ?? 'plaintext',
727-
jobId: session.listOfTestGenerationJobId[0], // For RIV, UTG does only one StartTestGeneration API call so jobId = session.listOfTestGenerationJobId[0]
728-
jobGroup: session.testGenerationJobGroupName,
729-
requestId: session.startTestGenerationRequestId,
730-
buildPayloadBytes: session.srcPayloadSize,
731-
buildZipFileBytes: session.srcZipFileSize,
732-
artifactsUploadDuration: session.artifactsUploadDuration,
733-
hasUserPromptSupplied: session.hasUserPromptSupplied,
734-
isCodeBlockSelected: session.isCodeBlockSelected,
735-
perfClientLatency: session.latencyOfTestGeneration,
736-
isSupportedLanguage: true,
737-
credentialStartUrl: AuthUtil.instance.startUrl,
738-
result: 'Succeeded',
739-
})
717+
718+
TelemetryHelper.instance.sendTestGenerationToolkitEvent(
719+
session,
720+
true,
721+
'Succeeded',
722+
session.startTestGenerationRequestId,
723+
session.latencyOfTestGeneration,
724+
undefined,
725+
session.isCodeBlockSelected,
726+
session.artifactsUploadDuration,
727+
session.srcPayloadSize,
728+
session.srcZipFileSize,
729+
session.charsOfCodeAccepted,
730+
session.numberOfTestsGenerated,
731+
session.linesOfCodeAccepted,
732+
session.charsOfCodeGenerated,
733+
session.numberOfTestsGenerated,
734+
session.linesOfCodeGenerated
735+
)
740736

741737
await this.endSession(message, FollowUpTypes.SkipBuildAndFinish)
742738
await this.sessionCleanUp()
@@ -840,27 +836,25 @@ export class TestController {
840836
private async endSession(data: any, step: FollowUpTypes) {
841837
const session = this.sessionStorage.getSession()
842838
if (step === FollowUpTypes.RejectCode) {
843-
telemetry.amazonq_utgGenerateTests.emit({
844-
generatedCount: session.numberOfTestsGenerated,
845-
acceptedCount: 0,
846-
generatedCharactersCount: session.charsOfCodeGenerated,
847-
acceptedCharactersCount: 0,
848-
generatedLinesCount: session.linesOfCodeGenerated,
849-
acceptedLinesCount: 0,
850-
cwsprChatProgrammingLanguage: session.fileLanguage ?? 'plaintext',
851-
jobId: session.listOfTestGenerationJobId[0], // For RIV, UTG does only one StartTestGeneration API call so jobId = session.listOfTestGenerationJobId[0]
852-
jobGroup: session.testGenerationJobGroupName,
853-
requestId: session.startTestGenerationRequestId,
854-
buildPayloadBytes: session.srcPayloadSize,
855-
buildZipFileBytes: session.srcZipFileSize,
856-
artifactsUploadDuration: session.artifactsUploadDuration,
857-
hasUserPromptSupplied: session.hasUserPromptSupplied,
858-
isCodeBlockSelected: session.isCodeBlockSelected,
859-
perfClientLatency: session.latencyOfTestGeneration,
860-
isSupportedLanguage: true,
861-
credentialStartUrl: AuthUtil.instance.startUrl,
862-
result: 'Succeeded',
863-
})
839+
TelemetryHelper.instance.sendTestGenerationToolkitEvent(
840+
session,
841+
true,
842+
'Succeeded',
843+
session.startTestGenerationRequestId,
844+
session.latencyOfTestGeneration,
845+
undefined,
846+
session.isCodeBlockSelected,
847+
session.artifactsUploadDuration,
848+
session.srcPayloadSize,
849+
session.srcZipFileSize,
850+
0,
851+
0,
852+
0,
853+
session.charsOfCodeGenerated,
854+
session.numberOfTestsGenerated,
855+
session.linesOfCodeGenerated
856+
)
857+
864858
telemetry.ui_click.emit({ elementId: 'unitTestGeneration_rejectDiff' })
865859
}
866860

packages/core/src/amazonqTest/chat/controller/messenger/messenger.ts

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ import { CodeReference } from '../../../../amazonq/webview/ui/apps/amazonqCommon
3636
import { getHttpStatusCode, getRequestId, getTelemetryReasonDesc, ToolkitError } from '../../../../shared/errors'
3737
import { sleep, waitUntil } from '../../../../shared/utilities/timeoutUtils'
3838
import { keys } from '../../../../shared/utilities/tsUtils'
39-
import { AuthUtil, testGenState } from '../../../../codewhisperer'
39+
import { TelemetryHelper, testGenState } from '../../../../codewhisperer'
4040
import { cancellingProgressField, testGenCompletedField } from '../../../models/constants'
41-
import { telemetry } from '../../../../shared/telemetry/telemetry'
4241

4342
export type UnrecoverableErrorType = 'no-project-found' | 'no-open-file-found' | 'invalid-file-type'
4443

@@ -275,31 +274,28 @@ export class Messenger {
275274
.finally(async () => {
276275
if (testGenState.isCancelling()) {
277276
this.sendMessage(CodeWhispererConstants.unitTestGenerationCancelMessage, tabID, 'answer')
278-
telemetry.amazonq_utgGenerateTests.emit({
279-
cwsprChatProgrammingLanguage: session.fileLanguage ?? 'plaintext',
280-
hasUserPromptSupplied: session.hasUserPromptSupplied,
281-
perfClientLatency: performance.now() - session.testGenerationStartTime,
282-
result: 'Cancelled',
283-
reasonDesc: getTelemetryReasonDesc(CodeWhispererConstants.unitTestGenerationCancelMessage),
284-
isSupportedLanguage: false,
285-
credentialStartUrl: AuthUtil.instance.startUrl,
286-
requestId: messageId,
287-
})
277+
TelemetryHelper.instance.sendTestGenerationToolkitEvent(
278+
session,
279+
false,
280+
'Cancelled',
281+
messageId,
282+
performance.now() - session.testGenerationStartTime,
283+
getTelemetryReasonDesc(CodeWhispererConstants.unitTestGenerationCancelMessage)
284+
)
288285

289286
this.dispatcher.sendUpdatePromptProgress(
290287
new UpdatePromptProgressMessage(tabID, cancellingProgressField)
291288
)
292289
await sleep(500)
293290
} else {
294-
telemetry.amazonq_utgGenerateTests.emit({
295-
cwsprChatProgrammingLanguage: session.fileLanguage ?? 'plaintext',
296-
hasUserPromptSupplied: session.hasUserPromptSupplied,
297-
perfClientLatency: performance.now() - session.testGenerationStartTime,
298-
result: 'Succeeded',
299-
isSupportedLanguage: false,
300-
credentialStartUrl: AuthUtil.instance.startUrl,
301-
requestId: messageId,
302-
})
291+
TelemetryHelper.instance.sendTestGenerationToolkitEvent(
292+
session,
293+
false,
294+
'Succeeded',
295+
messageId,
296+
performance.now() - session.testGenerationStartTime
297+
)
298+
303299
this.dispatcher.sendUpdatePromptProgress(
304300
new UpdatePromptProgressMessage(tabID, testGenCompletedField)
305301
)

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

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { CodeWhispererSupplementalContext } from '../models/model'
2727
import { FeatureConfigProvider } from '../../shared/featureConfig'
2828
import { CodeScanRemediationsEventType } from '../client/codewhispereruserclient'
2929
import { CodeAnalysisScope as CodeAnalysisScopeClientSide } from '../models/constants'
30+
import { Session } from '../../amazonqTest/chat/session/session'
3031

3132
export class TelemetryHelper {
3233
// Some variables for client component latency
@@ -57,6 +58,50 @@ export class TelemetryHelper {
5758
return (this.#instance ??= new this())
5859
}
5960

61+
public sendTestGenerationToolkitEvent(
62+
session: Session,
63+
isSupportedLanguage: boolean,
64+
result: 'Succeeded' | 'Failed' | 'Cancelled',
65+
requestId?: string,
66+
perfClientLatency?: number,
67+
reasonDesc?: string,
68+
isCodeBlockSelected?: boolean,
69+
artifactsUploadDuration?: number,
70+
buildPayloadBytes?: number,
71+
buildZipFileBytes?: number,
72+
acceptedCharactersCount?: number,
73+
acceptedCount?: number,
74+
acceptedLinesCount?: number,
75+
generatedCharactersCount?: number,
76+
generatedCount?: number,
77+
generatedLinesCount?: number,
78+
reason?: string
79+
) {
80+
telemetry.amazonq_utgGenerateTests.emit({
81+
cwsprChatProgrammingLanguage: session.fileLanguage ?? 'plaintext',
82+
hasUserPromptSupplied: session.hasUserPromptSupplied,
83+
isSupportedLanguage: isSupportedLanguage,
84+
result: result,
85+
artifactsUploadDuration: artifactsUploadDuration,
86+
buildPayloadBytes: buildPayloadBytes,
87+
buildZipFileBytes: buildZipFileBytes,
88+
credentialStartUrl: AuthUtil.instance.startUrl,
89+
acceptedCharactersCount: acceptedCharactersCount,
90+
acceptedCount: acceptedCount,
91+
acceptedLinesCount: acceptedLinesCount,
92+
generatedCharactersCount: generatedCharactersCount,
93+
generatedCount: generatedCount,
94+
generatedLinesCount: generatedLinesCount,
95+
isCodeBlockSelected: isCodeBlockSelected,
96+
jobGroup: session.testGenerationJobGroupName,
97+
jobId: session.listOfTestGenerationJobId[0],
98+
perfClientLatency: perfClientLatency,
99+
requestId: requestId,
100+
reasonDesc: reasonDesc,
101+
reason: reason,
102+
})
103+
}
104+
60105
public recordServiceInvocationTelemetry(
61106
requestId: string,
62107
sessionId: string,

0 commit comments

Comments
 (0)