Skip to content

Commit 711f7cc

Browse files
committed
telemetry(amazonq): emit metrics per finding
1 parent 21aba02 commit 711f7cc

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.credentials.CodeWh
3939
import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhispererExplorerActionManager
4040
import software.aws.toolkits.jetbrains.services.codewhisperer.model.CodeScanResponseContext
4141
import software.aws.toolkits.jetbrains.services.codewhisperer.model.CreateUploadUrlServiceInvocationContext
42+
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.CodeWhispererTelemetryService
4243
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants
4344
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.CODE_SCAN_POLLING_INTERVAL_IN_SECONDS
4445
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.FILE_SCANS_THROTTLING_MESSAGE
@@ -219,6 +220,11 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
219220
}
220221
currentCoroutineContext.ensureActive()
221222
val issues = mapToCodeScanIssues(documents, sessionContext.project, jobId).filter { it.isVisible }
223+
issues.forEach { issue ->
224+
if (!issue.autoDetected) {
225+
CodeWhispererTelemetryService.getInstance().sendCodeScanIssueGenerated(issue)
226+
}
227+
}
222228
codeScanResponseContext = codeScanResponseContext.copy(codeScanTotalIssues = issues.count())
223229
codeScanResponseContext = codeScanResponseContext.copy(codeScanIssuesWithFixes = issues.count { it.suggestedFixes.isNotEmpty() })
224230
codeScanResponseContext = codeScanResponseContext.copy(reason = "Succeeded")

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,18 @@ class CodeWhispererTelemetryService {
419419
)
420420
}
421421

422+
fun sendCodeScanIssueGenerated(issue: CodeWhispererCodeScanIssue) {
423+
CodewhispererTelemetry.codeScanIssueDetected(
424+
autoDetected = issue.autoDetected,
425+
codewhispererCodeScanJobId = issue.scanJobId,
426+
detectorId = issue.detectorId,
427+
findingId = issue.findingId,
428+
includesFix = issue.suggestedFixes.isNotEmpty(),
429+
ruleId = issue.ruleId,
430+
result = MetricResult.Succeeded
431+
)
432+
}
433+
422434
fun enqueueAcceptedSuggestionEntry(
423435
requestId: String,
424436
requestContext: RequestContext,

plugins/core/jetbrains-community/resources/telemetryOverride.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,34 @@
563563
"required": true
564564
}
565565
]
566+
},
567+
{
568+
"name": "codewhisperer_codeScanIssueDetected",
569+
"description": "Called when a code scan issue is returned from the service",
570+
"metadata": [
571+
{
572+
"type": "autoDetected",
573+
"required": false
574+
},
575+
{
576+
"type": "codewhispererCodeScanJobId",
577+
"required": false
578+
},
579+
{
580+
"type": "detectorId"
581+
},
582+
{
583+
"type": "findingId"
584+
},
585+
{
586+
"type": "includesFix",
587+
"required": false
588+
},
589+
{
590+
"type": "ruleId",
591+
"required": false
592+
}
593+
]
566594
}
567595
]
568596
}

0 commit comments

Comments
 (0)