diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt index 8f4befc1835..1f715b32d36 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt @@ -475,7 +475,8 @@ class CodeWhispererCodeScanManager(val project: Project) { codeScanStatus, codeScanResponseContext.payloadContext.srcPayloadSize.toDouble() ?: 0.0, connection, - scope + scope, + initiatedByChat ) ) sendCodeScanTelemetryToServiceAPI(project, language, codeScanResponseContext, scope) diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt index ac69c8b54d9..efa3f7a0f5b 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt @@ -254,6 +254,7 @@ data class CodeScanTelemetryEvent( val totalProjectSizeInBytes: Double?, val connection: ToolkitConnection?, val codeAnalysisScope: CodeWhispererConstants.CodeAnalysisScope, + val initiatedByChat: Boolean = false, ) data class CreateUploadUrlServiceInvocationContext( diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererTelemetryService.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererTelemetryService.kt index 086c4c351e8..5509fa07f08 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererTelemetryService.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererTelemetryService.kt @@ -283,6 +283,18 @@ class CodeWhispererTelemetryService { ) } + private fun mapToTelemetryScope(codeAnalysisScope: CodeWhispererConstants.CodeAnalysisScope, initiatedByChat: Boolean): CodewhispererCodeScanScope = + when (codeAnalysisScope) { + CodeWhispererConstants.CodeAnalysisScope.FILE -> { + if (initiatedByChat) { + CodewhispererCodeScanScope.FILEONDEMAND + } else { + CodewhispererCodeScanScope.FILEAUTO + } + } + CodeWhispererConstants.CodeAnalysisScope.PROJECT -> CodewhispererCodeScanScope.PROJECT + } + fun sendSecurityScanEvent(codeScanEvent: CodeScanTelemetryEvent, project: Project? = null) { val payloadContext = codeScanEvent.codeScanResponseContext.payloadContext val serviceInvocationContext = codeScanEvent.codeScanResponseContext.serviceInvocationContext @@ -291,8 +303,9 @@ class CodeWhispererTelemetryService { val issuesWithFixes = codeScanEvent.codeScanResponseContext.codeScanIssuesWithFixes val reason = codeScanEvent.codeScanResponseContext.reason val startUrl = getConnectionStartUrl(codeScanEvent.connection) - val codeAnalysisScope = codeScanEvent.codeAnalysisScope - val passive = codeAnalysisScope == CodeWhispererConstants.CodeAnalysisScope.FILE + val codeAnalysisScope = mapToTelemetryScope(codeScanEvent.codeAnalysisScope, codeScanEvent.initiatedByChat) + val passive = codeAnalysisScope == CodewhispererCodeScanScope.FILEAUTO + val source = if (codeScanEvent.initiatedByChat) "chat" else "menu" LOG.debug { "Recording code security scan event. \n" + @@ -309,8 +322,9 @@ class CodeWhispererTelemetryService { "Service invocation duration in milliseconds: ${serviceInvocationContext.serviceInvocationDuration}, \n" + "Total number of lines scanned: ${payloadContext.totalLines}, \n" + "Reason: $reason \n" + - "Scope: ${codeAnalysisScope.value} \n" + - "Passive: $passive \n" + "Scope: $codeAnalysisScope \n" + + "Passive: $passive \n" + + "Source: $source \n" } CodewhispererTelemetry.securityScan( project = project, @@ -330,8 +344,9 @@ class CodeWhispererTelemetryService { reason = reason, result = codeScanEvent.result, credentialStartUrl = startUrl, - codewhispererCodeScanScope = CodewhispererCodeScanScope.from(codeAnalysisScope.value), - passive = passive + codewhispererCodeScanScope = codeAnalysisScope, + passive = passive, + source = source ) }