Skip to content

Commit b66f1d5

Browse files
ctlai95laileni-aws
andauthored
telemetry(amazonq): add fields for code fix events (#5300)
* telemetry(amazonq): add fields for code fix events * lint * test --------- Co-authored-by: Laxman Reddy <141967714+laileni-aws@users.noreply.github.com>
1 parent a7f2fe4 commit b66f1d5

File tree

8 files changed

+30
-10
lines changed

8 files changed

+30
-10
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ mockitoKotlin = "5.4.0"
2727
mockk = "1.13.10"
2828
nimbus-jose-jwt = "9.40"
2929
node-gradle = "7.0.2"
30-
telemetryGenerator = "1.0.293"
30+
telemetryGenerator = "1.0.295"
3131
testLogger = "4.0.0"
3232
testRetry = "1.5.10"
3333
# test-only; platform provides slf4j transitively at runtime

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,13 @@ internal class CodeWhispererCodeScanIssueDetailsPanel(
149149
if (suggestedFix.code.isNotBlank()) {
150150
sendCodeFixGeneratedTelemetryToServiceAPI(issue, false)
151151
}
152-
CodeWhispererTelemetryService.getInstance().sendCodeScanIssueGenerateFix(Component.Webview, issue, isRegenerate, MetricResult.Succeeded)
152+
CodeWhispererTelemetryService.getInstance().sendCodeScanIssueGenerateFix(
153+
Component.Webview,
154+
issue,
155+
isRegenerate,
156+
MetricResult.Succeeded,
157+
includesFix = suggestedFix.code.isNotBlank()
158+
)
153159
}
154160
}
155161
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -997,6 +997,8 @@ data class CodeWhispererCodeScanIssue(
997997
val isInvalid: Boolean = false,
998998
var rangeHighlighter: RangeHighlighterEx? = null,
999999
var isVisible: Boolean = true,
1000+
val autoDetected: Boolean = false,
1001+
val scanJobId: String,
10001002
) {
10011003
override fun toString(): String = title
10021004

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
219219
LOG.debug { "Rendering response to display code review results." }
220220
}
221221
currentCoroutineContext.ensureActive()
222-
val issues = mapToCodeScanIssues(documents, sessionContext.project).filter { it.isVisible }
222+
val issues = mapToCodeScanIssues(documents, sessionContext.project, jobId).filter { it.isVisible }
223223
codeScanResponseContext = codeScanResponseContext.copy(codeScanTotalIssues = issues.count())
224224
codeScanResponseContext = codeScanResponseContext.copy(codeScanIssuesWithFixes = issues.count { it.suggestedFixes.isNotEmpty() })
225225
codeScanResponseContext = codeScanResponseContext.copy(reason = "Succeeded")
@@ -304,7 +304,7 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
304304
throw codeScanServerException("ListCodeReviewFindingsException: $errorMessage")
305305
}
306306

307-
fun mapToCodeScanIssues(recommendations: List<String>, project: Project): List<CodeWhispererCodeScanIssue> {
307+
fun mapToCodeScanIssues(recommendations: List<String>, project: Project, jobId: String): List<CodeWhispererCodeScanIssue> {
308308
val scanRecommendations = recommendations.flatMap { MAPPER.readValue<List<CodeScanRecommendation>>(it) }
309309
if (isProjectScope()) {
310310
LOG.debug { "Total code review issues returned from service: ${scanRecommendations.size}" }
@@ -347,6 +347,8 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
347347
suggestedFixes = recommendation.remediation.suggestedFixes,
348348
codeSnippet = recommendation.codeSnippet,
349349
isVisible = !isIssueIgnored,
350+
autoDetected = isAutoScan(),
351+
scanJobId = jobId
350352
)
351353
}
352354
} else {
@@ -362,6 +364,9 @@ class CodeWhispererCodeScanSession(val sessionContext: CodeScanSessionContext) {
362364

363365
private fun isProjectScope(): Boolean = sessionContext.codeAnalysisScope == CodeWhispererConstants.CodeAnalysisScope.PROJECT
364366

367+
private fun isAutoScan(): Boolean =
368+
sessionContext.codeAnalysisScope == CodeWhispererConstants.CodeAnalysisScope.FILE && !sessionContext.sessionConfig.isInitiatedByChat()
369+
365370
companion object {
366371
private val LOG = getLogger<CodeWhispererCodeScanSession>()
367372
private val MAPPER = jacksonObjectMapper()

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,9 @@ class CodeWhispererTelemetryService {
371371
result = result,
372372
reason = reason,
373373
credentialStartUrl = getCodeWhispererStartUrl(issue.project),
374-
codeFixAction = codeFixAction
374+
codeFixAction = codeFixAction,
375+
autoDetected = issue.autoDetected,
376+
codewhispererCodeScanJobId = issue.scanJobId
375377
)
376378
}
377379

@@ -402,6 +404,7 @@ class CodeWhispererTelemetryService {
402404
isRefresh: Boolean,
403405
result: MetricResult,
404406
reason: String? = null,
407+
includesFix: Boolean? = false,
405408
) {
406409
CodewhispererTelemetry.codeScanIssueGenerateFix(
407410
component = component,
@@ -411,7 +414,10 @@ class CodeWhispererTelemetryService {
411414
ruleId = issue.ruleId,
412415
variant = if (isRefresh) "refresh" else null,
413416
result = result,
414-
reason = reason
417+
reason = reason,
418+
autoDetected = issue.autoDetected,
419+
codewhispererCodeScanJobId = issue.scanJobId,
420+
includesFix = includesFix
415421
)
416422
}
417423

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeFileScanTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ class CodeWhispererCodeFileScanTest : CodeWhispererCodeScanTestBase(PythonCodeIn
285285
fakeListCodeScanFindingsResponse.codeScanFindings(),
286286
getFakeRecommendationsOnNonExistentFile()
287287
)
288-
val res = codeScanSessionSpy.mapToCodeScanIssues(recommendations, project)
288+
val res = codeScanSessionSpy.mapToCodeScanIssues(recommendations, project, "jobId")
289289
assertThat(res).hasSize(2)
290290
}
291291

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ class CodeWhispererCodeScanTest : CodeWhispererCodeScanTestBase(PythonCodeInsigh
160160
fakeListCodeScanFindingsResponse.codeScanFindings(),
161161
getFakeRecommendationsOnNonExistentFile()
162162
)
163-
val res = codeScanSessionSpy.mapToCodeScanIssues(recommendations, project)
163+
val res = codeScanSessionSpy.mapToCodeScanIssues(recommendations, project, "jobId")
164164
assertThat(res).hasSize(2)
165165
}
166166

@@ -169,7 +169,7 @@ class CodeWhispererCodeScanTest : CodeWhispererCodeScanTestBase(PythonCodeInsigh
169169
val recommendations = listOf(
170170
fakeListCodeScanFindingsOutOfBoundsIndexResponse.codeScanFindings(),
171171
)
172-
val res = codeScanSessionSpy.mapToCodeScanIssues(recommendations, project)
172+
val res = codeScanSessionSpy.mapToCodeScanIssues(recommendations, project, "jobId")
173173
assertThat(res).hasSize(1)
174174
}
175175

plugins/amazonq/codewhisperer/jetbrains-community/tst/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanTestBase.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,8 @@ open class CodeWhispererCodeScanTestBase(projectRule: CodeInsightTestFixtureRule
444444
number = 11,
445445
content = "processData(unsecureCode)"
446446
)
447-
)
447+
),
448+
scanJobId = "scanJobId"
448449
)
449450

450451
// You might need these data classes depending on your implementation

0 commit comments

Comments
 (0)