Skip to content

Commit

Permalink
fix(transform): verify project on use instead of ext activation (aws#…
Browse files Browse the repository at this point in the history
…5038)

Co-authored-by: Leonardo Araneda Freccero <[email protected]>
  • Loading branch information
arangatang and Leonardo Araneda Freccero authored May 22, 2024
1 parent 211f527 commit b243f9f
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 36 deletions.
3 changes: 0 additions & 3 deletions packages/core/src/amazonqGumby/activation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import { CodeTransformTelemetryState } from './telemetry/codeTransformTelemetryS
import { telemetry } from '../shared/telemetry/telemetry'
import { CancelActionPositions } from './telemetry/codeTransformTelemetry'
import { AuthUtil } from '../codewhisperer/util/authUtil'
import { validateAndLogProjectDetails } from '../codewhisperer/service/transformByQ/transformProjectValidationHandler'

export async function activate(context: ExtContext) {
void vscode.commands.executeCommand('setContext', 'gumby.wasQCodeTransformationUsed', false)
Expand Down Expand Up @@ -71,7 +70,5 @@ export async function activate(context: ExtContext) {

workspaceChangeEvent
)

await validateAndLogProjectDetails()
}
}
24 changes: 21 additions & 3 deletions packages/core/src/amazonqGumby/chat/controller/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ import {
} from '../../errors'
import * as CodeWhispererConstants from '../../../codewhisperer/models/constants'
import MessengerUtils, { ButtonActions, GumbyCommands } from './messenger/messengerUtils'
import { CancelActionPositions } from '../../telemetry/codeTransformTelemetry'
import { CancelActionPositions, JDKToTelemetryValue } from '../../telemetry/codeTransformTelemetry'
import { openUrl } from '../../../shared/utilities/vsCodeUtils'
import { telemetry } from '../../../shared/telemetry/telemetry'
import { telemetry, CodeTransformJavaSourceVersionsAllowed } from '../../../shared/telemetry/telemetry'
import { MetadataResult } from '../../../shared/telemetry/telemetryClient'
import { CodeTransformTelemetryState } from '../../telemetry/codeTransformTelemetryState'
import { getAuthType } from '../../../codewhisperer/service/transformByQ/transformApiHandler'
Expand Down Expand Up @@ -225,8 +225,16 @@ export class GumbyController {
}

private async validateProjectsWithReplyOnError(message: any): Promise<TransformationCandidateProject[]> {
let telemetryJavaVersion = JDKToTelemetryValue(JDKVersion.UNSUPPORTED) as CodeTransformJavaSourceVersionsAllowed
let errorCode = undefined
try {
return await getValidCandidateProjects()
const validProjects = await getValidCandidateProjects()
if (validProjects.length > 0) {
// validProjects[0].JDKVersion will be undefined if javap errors out or no .class files found, so call it UNSUPPORTED
const javaVersion = validProjects[0].JDKVersion ?? JDKVersion.UNSUPPORTED
telemetryJavaVersion = JDKToTelemetryValue(javaVersion) as CodeTransformJavaSourceVersionsAllowed
}
return validProjects
} catch (err: any) {
if (err instanceof NoJavaProjectsFoundError) {
this.messenger.sendUnrecoverableErrorResponse('no-java-project-found', message.tabID)
Expand All @@ -235,6 +243,16 @@ export class GumbyController {
} else {
this.messenger.sendUnrecoverableErrorResponse('no-project-found', message.tabID)
}
errorCode = err.code
} finally {
// New projectDetails metric should always be fired whether the project was valid or invalid
telemetry.codeTransform_projectDetails.emit({
passive: true,
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
codeTransformLocalJavaVersion: telemetryJavaVersion,
result: errorCode ? MetadataResult.Fail : MetadataResult.Pass,
reason: errorCode,
})
}
return []
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,9 @@ import { getLogger } from '../../../shared/logger'
import * as CodeWhispererConstants from '../../models/constants'
import * as vscode from 'vscode'
import { spawnSync } from 'child_process' // Consider using ChildProcess once we finalize all spawnSync calls
import { CodeTransformJavaSourceVersionsAllowed, telemetry } from '../../../shared/telemetry/telemetry'
import { telemetry } from '../../../shared/telemetry/telemetry'
import { CodeTransformTelemetryState } from '../../../amazonqGumby/telemetry/codeTransformTelemetryState'
import {
javapOutputToTelemetryValue,
JDKToTelemetryValue,
} from '../../../amazonqGumby/telemetry/codeTransformTelemetry'
import { javapOutputToTelemetryValue } from '../../../amazonqGumby/telemetry/codeTransformTelemetry'
import { MetadataResult } from '../../../shared/telemetry/telemetryClient'
import {
NoJavaProjectsFoundError,
Expand All @@ -21,31 +18,6 @@ import {
} from '../../../amazonqGumby/errors'
import { checkBuildSystem } from './transformFileHandler'

// log project details silently
export async function validateAndLogProjectDetails() {
let telemetryJavaVersion = JDKToTelemetryValue(JDKVersion.UNSUPPORTED) as CodeTransformJavaSourceVersionsAllowed
let errorCode = undefined
try {
const openProjects = await getOpenProjects()
const validProjects = await validateOpenProjects(openProjects, true)
if (validProjects.length > 0) {
// validProjects[0].JDKVersion will be undefined if javap errors out or no .class files found, so call it UNSUPPORTED
const javaVersion = validProjects[0].JDKVersion ?? JDKVersion.UNSUPPORTED
telemetryJavaVersion = JDKToTelemetryValue(javaVersion) as CodeTransformJavaSourceVersionsAllowed
}
} catch (err: any) {
errorCode = err.code
} finally {
telemetry.codeTransform_projectDetails.emit({
passive: true,
codeTransformSessionId: CodeTransformTelemetryState.instance.getSessionId(),
codeTransformLocalJavaVersion: telemetryJavaVersion,
result: errorCode ? MetadataResult.Fail : MetadataResult.Pass,
reason: errorCode,
})
}
}

export async function getOpenProjects(): Promise<TransformationCandidateProject[]> {
const folders = vscode.workspace.workspaceFolders

Expand Down

0 comments on commit b243f9f

Please sign in to comment.