Skip to content

Commit 5073cc8

Browse files
dhasani23David Hasani
andauthored
telemetry(amazonq): telemetry updates (aws#5522)
## Problem Need to update telemetry to reflect that we are no longer emitting a metric for API errors or latency, and to reflect the latest common telemetry updates. ## Solution Update telemetry as described. --- <!--- REMINDER: Ensure that your PR meets the guidelines in CONTRIBUTING.md --> License: I confirm that my contribution is made under the terms of the Apache 2.0 license. --------- Co-authored-by: David Hasani <[email protected]>
1 parent 7330f78 commit 5073cc8

File tree

6 files changed

+7
-103
lines changed

6 files changed

+7
-103
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.247",
42+
"@aws-toolkits/telemetry": "^1.0.250",
4343
"@playwright/browser-chromium": "^1.43.1",
4444
"@types/vscode": "^1.68.0",
4545
"@types/vscode-webview": "^1.57.1",

packages/core/src/codewhisperer/commands/startTransformByQ.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ async function validateJavaHome(): Promise<boolean> {
123123
// TODO: remove deprecated metric once BI started using new metrics
124124
telemetry.codeTransform_isDoubleClickedToTriggerInvalidProject.emit({
125125
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
126-
codeTransformPreValidationError: 'ProjectJDKDiffersFromMavenJDK',
126+
codeTransformPreValidationError: 'ProjectJDKDiffersFromBuildSystemJDK',
127127
result: MetadataResult.Fail,
128128
reason: `${transformByQState.getSourceJDKVersion()} (project) - ${javaVersionUsedByMaven} (maven)`,
129129
})

packages/core/src/codewhisperer/service/transformByQ/transformApiHandler.ts

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -118,20 +118,10 @@ export async function uploadArtifactToS3(
118118
Math.round(uploadFileByteSize / 1000)
119119
)
120120

121-
const apiStartTime = globals.clock.Date.now()
122121
const response = await request.fetch('PUT', resp.uploadUrl, {
123122
body: buffer,
124123
headers: getHeadersObj(sha256, resp.kmsKeyArn),
125124
}).response
126-
// TODO: remove deprecated metric once BI started using new metrics
127-
telemetry.codeTransform_logApiLatency.emit({
128-
codeTransformApiNames: 'UploadZip',
129-
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
130-
codeTransformUploadId: resp.uploadId,
131-
codeTransformRunTimeLatency: calculateTotalLatency(apiStartTime),
132-
codeTransformTotalByteSize: uploadFileByteSize,
133-
result: MetadataResult.Pass,
134-
})
135125
getLogger().info(`CodeTransformation: Status from S3 Upload = ${response.status}`)
136126
} catch (e: any) {
137127
let errorMessage = `The upload failed due to: ${(e as Error).message}. For more information, see the [Amazon Q documentation](${CodeWhispererConstants.codeTransformTroubleshootUploadError})`
@@ -149,21 +139,11 @@ export async function uploadArtifactToS3(
149139

150140
export async function resumeTransformationJob(jobId: string, userActionStatus: TransformationUserActionStatus) {
151141
try {
152-
const apiStartTime = globals.clock.Date.now()
153142
const response = await codeWhisperer.codeWhispererClient.codeModernizerResumeTransformation({
154143
transformationJobId: jobId,
155144
userActionStatus, // can be "COMPLETED" or "REJECTED"
156145
})
157146
if (response) {
158-
// TODO: remove deprecated metric once BI started using new metrics
159-
telemetry.codeTransform_logApiLatency.emit({
160-
codeTransformApiNames: 'ResumeTransformation',
161-
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
162-
codeTransformJobId: jobId,
163-
codeTransformRunTimeLatency: calculateTotalLatency(apiStartTime),
164-
codeTransformRequestId: response.$response.requestId,
165-
result: MetadataResult.Pass,
166-
})
167147
// always store request ID, but it will only show up in a notification if an error occurs
168148
return response.transformationStatus
169149
}
@@ -180,20 +160,10 @@ export async function stopJob(jobId: string) {
180160
}
181161

182162
try {
183-
const apiStartTime = globals.clock.Date.now()
184163
const response = await codeWhisperer.codeWhispererClient.codeModernizerStopCodeTransformation({
185164
transformationJobId: jobId,
186165
})
187166
if (response !== undefined) {
188-
// TODO: remove deprecated metric once BI started using new metrics
189-
telemetry.codeTransform_logApiLatency.emit({
190-
codeTransformApiNames: 'StopTransformation',
191-
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
192-
codeTransformJobId: jobId,
193-
codeTransformRunTimeLatency: calculateTotalLatency(apiStartTime),
194-
codeTransformRequestId: response.$response.requestId,
195-
result: MetadataResult.Pass,
196-
})
197167
// always store request ID, but it will only show up in a notification if an error occurs
198168
if (response.$response.requestId) {
199169
transformByQState.setJobFailureMetadata(` (request ID: ${response.$response.requestId})`)
@@ -213,7 +183,6 @@ export async function uploadPayload(payloadFileName: string, uploadContext?: Upl
213183
throwIfCancelled()
214184
let response = undefined
215185
try {
216-
const apiStartTime = globals.clock.Date.now()
217186
response = await codeWhisperer.codeWhispererClient.createUploadUrl({
218187
contentChecksum: sha256,
219188
contentChecksumType: CodeWhispererConstants.contentChecksumType,
@@ -223,15 +192,6 @@ export async function uploadPayload(payloadFileName: string, uploadContext?: Upl
223192
if (response.$response.requestId) {
224193
transformByQState.setJobFailureMetadata(` (request ID: ${response.$response.requestId})`)
225194
}
226-
// TODO: remove deprecated metric once BI started using new metrics
227-
telemetry.codeTransform_logApiLatency.emit({
228-
codeTransformApiNames: 'CreateUploadUrl',
229-
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
230-
codeTransformRunTimeLatency: calculateTotalLatency(apiStartTime),
231-
codeTransformUploadId: response.uploadId,
232-
codeTransformRequestId: response.$response.requestId,
233-
result: MetadataResult.Pass,
234-
})
235195
} catch (e: any) {
236196
const errorMessage = `The upload failed due to: ${(e as Error).message}`
237197
getLogger().error(`CodeTransformation: CreateUploadUrl error: = ${e}`)
@@ -446,7 +406,6 @@ export async function startJob(uploadId: string) {
446406
const sourceLanguageVersion = `JAVA_${transformByQState.getSourceJDKVersion()}`
447407
const targetLanguageVersion = `JAVA_${transformByQState.getTargetJDKVersion()}`
448408
try {
449-
const apiStartTime = globals.clock.Date.now()
450409
const response = await codeWhisperer.codeWhispererClient.codeModernizerStartCodeTransformation({
451410
workspaceState: {
452411
uploadId: uploadId,
@@ -461,15 +420,6 @@ export async function startJob(uploadId: string) {
461420
if (response.$response.requestId) {
462421
transformByQState.setJobFailureMetadata(` (request ID: ${response.$response.requestId})`)
463422
}
464-
// TODO: remove deprecated metric once BI started using new metrics
465-
telemetry.codeTransform_logApiLatency.emit({
466-
codeTransformApiNames: 'StartTransformation',
467-
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
468-
codeTransformRunTimeLatency: calculateTotalLatency(apiStartTime),
469-
codeTransformJobId: response.transformationJobId,
470-
codeTransformRequestId: response.$response.requestId,
471-
result: MetadataResult.Pass,
472-
})
473423
return response.transformationJobId
474424
} catch (e: any) {
475425
const errorMessage = `Starting the job failed due to: ${(e as Error).message}`
@@ -586,19 +536,9 @@ export async function getTransformationPlan(jobId: string) {
586536
response = await codeWhisperer.codeWhispererClient.codeModernizerGetCodeTransformationPlan({
587537
transformationJobId: jobId,
588538
})
589-
const apiStartTime = globals.clock.Date.now()
590539
if (response.$response.requestId) {
591540
transformByQState.setJobFailureMetadata(` (request ID: ${response.$response.requestId})`)
592541
}
593-
// TODO: remove deprecated metric once BI started using new metrics
594-
telemetry.codeTransform_logApiLatency.emit({
595-
codeTransformApiNames: 'GetTransformationPlan',
596-
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
597-
codeTransformJobId: jobId,
598-
codeTransformRunTimeLatency: calculateTotalLatency(apiStartTime),
599-
codeTransformRequestId: response.$response.requestId,
600-
result: MetadataResult.Pass,
601-
})
602542

603543
const stepZeroProgressUpdates = response.transformationPlan.transformationSteps[0].progressUpdates
604544

@@ -657,22 +597,12 @@ export async function getTransformationSteps(jobId: string, handleThrottleFlag:
657597
if (handleThrottleFlag) {
658598
await sleep(2000)
659599
}
660-
const apiStartTime = globals.clock.Date.now()
661600
const response = await codeWhisperer.codeWhispererClient.codeModernizerGetCodeTransformationPlan({
662601
transformationJobId: jobId,
663602
})
664603
if (response.$response.requestId) {
665604
transformByQState.setJobFailureMetadata(` (request ID: ${response.$response.requestId})`)
666605
}
667-
// TODO: remove deprecated metric once BI started using new metrics
668-
telemetry.codeTransform_logApiLatency.emit({
669-
codeTransformApiNames: 'GetTransformationPlan',
670-
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
671-
codeTransformJobId: jobId,
672-
codeTransformRunTimeLatency: calculateTotalLatency(apiStartTime),
673-
codeTransformRequestId: response.$response.requestId,
674-
result: MetadataResult.Pass,
675-
})
676606
return response.transformationPlan.transformationSteps.slice(1) // skip step 0 (contains supplemental info)
677607
} catch (e: any) {
678608
const errorMessage = (e as Error).message
@@ -687,19 +617,9 @@ export async function pollTransformationJob(jobId: string, validStates: string[]
687617
while (true) {
688618
throwIfCancelled()
689619
try {
690-
const apiStartTime = globals.clock.Date.now()
691620
const response = await codeWhisperer.codeWhispererClient.codeModernizerGetCodeTransformation({
692621
transformationJobId: jobId,
693622
})
694-
// TODO: remove deprecated metric once BI started using new metrics
695-
telemetry.codeTransform_logApiLatency.emit({
696-
codeTransformApiNames: 'GetTransformation',
697-
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
698-
codeTransformJobId: jobId,
699-
codeTransformRunTimeLatency: calculateTotalLatency(apiStartTime),
700-
codeTransformRequestId: response.$response.requestId,
701-
result: MetadataResult.Pass,
702-
})
703623
status = response.transformationJob.status!
704624
if (CodeWhispererConstants.validStatesForBuildSucceeded.includes(status)) {
705625
jobPlanProgress['buildCode'] = StepProgress.Succeeded

packages/core/src/codewhisperer/service/transformByQ/transformProjectValidationHandler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ export async function validateOpenProjects(
170170
// TODO: remove deprecated metric once BI started using new metrics
171171
telemetry.codeTransform_isDoubleClickedToTriggerInvalidProject.emit({
172172
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
173-
codeTransformPreValidationError: 'NonMavenProject',
173+
codeTransformPreValidationError: 'UnsupportedBuildSystem',
174174
result: MetadataResult.Fail,
175175
reason: 'NoPomFileFound',
176176
})

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

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,7 @@
66
import path from 'path'
77
import { CodeWhispererStreaming, ExportResultArchiveCommandInput } from '@amzn/codewhisperer-streaming'
88
import { ToolkitError } from '../errors'
9-
import { CodeTransformTelemetryState } from '../../amazonqGumby/telemetry/codeTransformTelemetryState'
10-
import { transformByQState } from '../../codewhisperer/models/model'
11-
import { calculateTotalLatency } from '../../amazonqGumby/telemetry/codeTransformTelemetry'
12-
import { telemetry } from '../telemetry/telemetry'
139
import fs from '../fs/fs'
14-
import globals from '../../shared/extensionGlobals'
1510

1611
/**
1712
* This class represents the structure of the archive returned by the ExportResultArchive endpoint
@@ -27,8 +22,6 @@ export async function downloadExportResultArchive(
2722
exportResultArchiveArgs: ExportResultArchiveCommandInput,
2823
toPath: string
2924
) {
30-
const apiStartTime = globals.clock.Date.now()
31-
let totalDownloadBytes = 0
3225
const result = await cwStreamingClient.exportResultArchive(exportResultArchiveArgs)
3326

3427
const buffer = []
@@ -42,18 +35,9 @@ export async function downloadExportResultArchive(
4235
const chunkData = chunk.binaryPayloadEvent
4336
if (chunkData.bytes) {
4437
buffer.push(chunkData.bytes)
45-
totalDownloadBytes += chunkData.bytes?.length
4638
}
4739
}
4840
}
4941

5042
await fs.writeFile(toPath, Buffer.concat(buffer))
51-
telemetry.codeTransform_logApiLatency.emit({
52-
codeTransformApiNames: 'ExportResultArchive',
53-
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
54-
codeTransformJobId: transformByQState.getJobId(),
55-
codeTransformRunTimeLatency: calculateTotalLatency(apiStartTime),
56-
codeTransformTotalByteSize: totalDownloadBytes,
57-
codeTransformRequestId: result.$metadata.requestId,
58-
})
5943
}

0 commit comments

Comments
 (0)