Skip to content

Commit 647227a

Browse files
committed
feat(amazonq): generate scanName from workspace config
1 parent 1f11ba3 commit 647227a

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanSession.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ import kotlinx.coroutines.ensureActive
1717
import kotlinx.coroutines.isActive
1818
import kotlinx.coroutines.time.withTimeout
1919
import kotlinx.coroutines.withContext
20+
import migration.software.aws.toolkits.jetbrains.settings.AwsSettings
21+
import org.apache.commons.codec.digest.DigestUtils
2022
import software.amazon.awssdk.services.codewhisperer.model.ArtifactType
2123
import software.amazon.awssdk.services.codewhisperer.model.CodeScanFindingsSchema
2224
import software.amazon.awssdk.services.codewhisperer.model.CodeScanStatus
@@ -33,12 +35,14 @@ import software.aws.toolkits.core.utils.Waiters.waitUntil
3335
import software.aws.toolkits.core.utils.debug
3436
import software.aws.toolkits.core.utils.getLogger
3537
import software.aws.toolkits.core.utils.info
38+
import software.aws.toolkits.core.utils.toHexString
3639
import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.sessionconfig.CodeScanSessionConfig
3740
import software.aws.toolkits.jetbrains.services.codewhisperer.codescan.sessionconfig.PayloadContext
3841
import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWhispererClientAdaptor
3942
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
4043
import software.aws.toolkits.jetbrains.services.codewhisperer.model.CodeScanResponseContext
4144
import software.aws.toolkits.jetbrains.services.codewhisperer.model.CreateUploadUrlServiceInvocationContext
45+
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhispererTelemetryService
4246
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants
4347
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.CODE_SCAN_POLLING_INTERVAL_IN_SECONDS
4448
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.FILE_SCANS_THROTTLING_MESSAGE
@@ -52,12 +56,14 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhisperer
5256
import software.aws.toolkits.jetbrains.services.codewhisperer.util.getTelemetryErrorMessage
5357
import software.aws.toolkits.jetbrains.utils.assertIsNonDispatchThread
5458
import software.aws.toolkits.resources.message
59+
import software.aws.toolkits.telemetry.CodewhispererCodeScanScope
5560
import software.aws.toolkits.telemetry.CodewhispererLanguage
5661
import java.nio.file.Path
5762
import java.time.Duration
5863
import java.time.Instant
5964
import java.util.UUID
6065
import kotlin.coroutines.coroutineContext
66+
import kotlin.io.path.pathString
6167

6268
class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
6369
private val clientToken: UUID = UUID.randomUUID()
@@ -103,7 +109,7 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
103109
// 2 & 3. CreateUploadURL and upload the context.
104110
currentCoroutineContext.ensureActive()
105111
val artifactsUploadStartTime = now()
106-
val codeScanName = UUID.randomUUID().toString()
112+
val codeScanName = generateScanName()
107113

108114
val taskType = if (sessionContext.codeAnalysisScope == CodeWhispererConstants.CodeAnalysisScope.PROJECT) {
109115
CodeWhispererConstants.UploadTaskType.SCAN_PROJECT
@@ -366,6 +372,15 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
366372
private fun isAutoScan(): Boolean =
367373
sessionContext.codeAnalysisScope == CodeWhispererConstants.CodeAnalysisScope.FILE && !sessionContext.sessionConfig.isInitiatedByChat()
368374

375+
private fun generateScanName(): String {
376+
val clientId = AwsSettings.getInstance().clientId
377+
val filePath = sessionContext.sessionConfig.getSelectedFile()?.toNioPath()?.pathString
378+
val scope = CodeWhispererTelemetryService.getInstance().mapToTelemetryScope(sessionContext.codeAnalysisScope, sessionContext.sessionConfig.isInitiatedByChat())
379+
val projectId = if (filePath != null && scope != CodewhispererCodeScanScope.PROJECT) filePath else sessionContext.project.basePath
380+
381+
return DigestUtils.sha256("$clientId::$projectId::$scope").toHexString()
382+
}
383+
369384
companion object {
370385
private val LOG = getLogger<CodeWhispererCodeScanSession>()
371386
private val MAPPER = jacksonObjectMapper()

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererTelemetryService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ class CodeWhispererTelemetryService {
285285
)
286286
}
287287

288-
private fun mapToTelemetryScope(codeAnalysisScope: CodeWhispererConstants.CodeAnalysisScope, initiatedByChat: Boolean): CodewhispererCodeScanScope =
288+
fun mapToTelemetryScope(codeAnalysisScope: CodeWhispererConstants.CodeAnalysisScope, initiatedByChat: Boolean): CodewhispererCodeScanScope =
289289
when (codeAnalysisScope) {
290290
CodeWhispererConstants.CodeAnalysisScope.FILE -> {
291291
if (initiatedByChat) {

0 commit comments

Comments
 (0)