Skip to content

Commit cbb2e19

Browse files
committed
fix(amazonq): Reduce redundant mapping from error to metric type
1 parent e16237f commit cbb2e19

File tree

3 files changed

+21
-34
lines changed

3 files changed

+21
-34
lines changed

packages/core/src/amazonqFeatureDev/controllers/chat/controller.ts

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
createUserFacingErrorMessage,
1616
denyListedErrors,
1717
FeatureDevServiceError,
18-
isAPIClientError,
18+
getMetricResult,
1919
MonthlyConversationLimitError,
2020
NoChangeRequiredException,
2121
PrepareRepoFailedError,
@@ -56,7 +56,6 @@ import { randomUUID } from '../../../shared/crypto'
5656
import { FollowUpTypes } from '../../../amazonq/commons/types'
5757
import { Messenger } from '../../../amazonq/commons/connector/baseMessenger'
5858
import { BaseChatSessionStorage } from '../../../amazonq/commons/baseChatStorage'
59-
import { ClientError, LlmError, ServiceError } from '../../../amazonq/errors'
6059

6160
export interface ChatControllerEventEmitters {
6261
readonly processHumanChatMessage: EventEmitter<any>
@@ -551,22 +550,7 @@ export class FeatureDevController {
551550
this.messenger.sendUpdatePlaceholder(tabID, i18n('AWS.amazonq.featureDev.pillText.selectOption'))
552551
} catch (err: any) {
553552
getLogger().error(`${featureName}: Error during code generation: ${err}`)
554-
555-
let result: string = MetricDataResult.Fault
556-
if (err instanceof ClientError) {
557-
result = MetricDataResult.Error
558-
} else if (err instanceof ServiceError) {
559-
result = MetricDataResult.Fault
560-
} else if (err instanceof LlmError) {
561-
result = MetricDataResult.LlmFailure
562-
} else {
563-
if (isAPIClientError(err)) {
564-
result = MetricDataResult.Error
565-
} else {
566-
result = MetricDataResult.Fault
567-
}
568-
}
569-
await session.sendMetricDataTelemetry(MetricDataOperationName.EndCodeGeneration, result)
553+
await session.sendMetricDataTelemetry(MetricDataOperationName.EndCodeGeneration, getMetricResult(err))
570554
throw err
571555
} finally {
572556
// Finish processing the event

packages/core/src/amazonqFeatureDev/errors.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import { featureName, clientErrorMessages, startTaskAssistLimitReachedMessage } from './constants'
77
import { uploadCodeError } from './userFacingText'
88
import { i18n } from '../shared/i18n-helper'
9-
import { ClientError, ServiceError, ContentLengthError as SharedContentLengthError } from '../amazonq/errors'
9+
import { ClientError, LlmError, ServiceError, ContentLengthError as SharedContentLengthError } from '../amazonq/errors'
10+
import { MetricDataResult } from '../amazonq/commons/types'
11+
import { ToolkitError } from '../shared/errors'
1012

1113
export class ConversationIdNotFoundError extends ServiceError {
1214
constructor() {
@@ -162,9 +164,23 @@ export function createUserFacingErrorMessage(message: string) {
162164
return message
163165
}
164166

165-
export function isAPIClientError(error: { code?: string; message: string }): boolean {
167+
function isAPIClientError(error: { code?: string; message: string }): boolean {
166168
return (
167169
clientErrorMessages.some((msg: string) => error.message.includes(msg)) ||
168170
error.message.includes(startTaskAssistLimitReachedMessage)
169171
)
170172
}
173+
174+
export function getMetricResult(error: ToolkitError): MetricDataResult {
175+
if (error instanceof ClientError || isAPIClientError(error)) {
176+
return MetricDataResult.Error
177+
}
178+
if (error instanceof ServiceError) {
179+
return MetricDataResult.Fault
180+
}
181+
if (error instanceof LlmError) {
182+
return MetricDataResult.LlmFailure
183+
}
184+
185+
return MetricDataResult.Fault
186+
}

packages/core/src/test/amazonqFeatureDev/controllers/chat/controller.test.ts

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
ContentLengthError,
2525
createUserFacingErrorMessage,
2626
FeatureDevServiceError,
27+
getMetricResult,
2728
MonthlyConversationLimitError,
2829
NoChangeRequiredException,
2930
PrepareRepoFailedError,
@@ -47,7 +48,6 @@ import { i18n } from '../../../../shared/i18n-helper'
4748
import { FollowUpTypes } from '../../../../amazonq/commons/types'
4849
import { ToolkitError } from '../../../../shared'
4950
import { MessengerTypes } from '../../../../amazonqFeatureDev/controllers/chat/messenger/constants'
50-
import { ClientError, LlmError, ServiceError } from '../../../../amazonq/errors'
5151

5252
let mockGetCodeGeneration: sinon.SinonStub
5353
describe('Controller', () => {
@@ -471,19 +471,6 @@ describe('Controller', () => {
471471
let session: any
472472
let sendMetricDataTelemetrySpy: sinon.SinonStub
473473

474-
function getMetricResult(error: ToolkitError): MetricDataResult {
475-
if (error instanceof ClientError) {
476-
return MetricDataResult.Error
477-
}
478-
if (error instanceof LlmError) {
479-
return MetricDataResult.LlmFailure
480-
}
481-
if (error instanceof ServiceError) {
482-
return MetricDataResult.Fault
483-
}
484-
return MetricDataResult.Fault
485-
}
486-
487474
async function verifyException(error: ToolkitError) {
488475
sinon.stub(session, 'send').throws(error)
489476

0 commit comments

Comments
 (0)