diff --git a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanSession.kt b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanSession.kt index c0f9c2b01ec..9c1fc26623b 100644 --- a/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanSession.kt +++ b/plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanSession.kt @@ -39,6 +39,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWh import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager import software.aws.toolkits.jetbrains.services.codewhisperer.model.CodeScanResponseContext import software.aws.toolkits.jetbrains.services.codewhisperer.model.CreateUploadUrlServiceInvocationContext +import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhispererTelemetryService import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.CODE_SCAN_POLLING_INTERVAL_IN_SECONDS import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.FILE_SCANS_THROTTLING_MESSAGE @@ -219,6 +220,11 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) { } currentCoroutineContext.ensureActive() val issues = mapToCodeScanIssues(documents, sessionContext.project, jobId).filter { it.isVisible } + issues.forEach { issue -> + if (!issue.autoDetected) { + CodeWhispererTelemetryService.getInstance().sendCodeScanIssueDetected(issue) + } + } codeScanResponseContext = codeScanResponseContext.copy(codeScanTotalIssues = issues.count()) codeScanResponseContext = codeScanResponseContext.copy(codeScanIssuesWithFixes = issues.count { it.suggestedFixes.isNotEmpty() }) codeScanResponseContext = codeScanResponseContext.copy(reason = "Succeeded") 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 8fdd46d525c..355245de1ad 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 @@ -421,6 +421,18 @@ class CodeWhispererTelemetryService { ) } + fun sendCodeScanIssueDetected(issue: CodeWhispererCodeScanIssue) { + CodewhispererTelemetry.codeScanIssueDetected( + autoDetected = issue.autoDetected, + codewhispererCodeScanJobId = issue.scanJobId, + detectorId = issue.detectorId, + findingId = issue.findingId, + includesFix = issue.suggestedFixes.isNotEmpty(), + ruleId = issue.ruleId, + result = MetricResult.Succeeded + ) + } + fun enqueueAcceptedSuggestionEntry( requestId: String, requestContext: RequestContext,