Skip to content

Commit 6dc2096

Browse files
authored
Enable SendTelemetryEvent to Builder ID users (#3910)
Only send the telemetry if Builder ID users optin telemetry sharing
1 parent 9f28373 commit 6dc2096

File tree

8 files changed

+108
-145
lines changed

8 files changed

+108
-145
lines changed

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/codescan/CodeWhispererCodeScanManager.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhisperer
7171
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.ISSUE_HIGHLIGHT_TEXT_ATTRIBUTES
7272
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil
7373
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.promptReAuth
74-
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIamIdentityCenterConnection
74+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIdcConnectionOrTelemetryEnabled
7575
import software.aws.toolkits.resources.message
7676
import software.aws.toolkits.telemetry.Result
7777
import java.time.Duration
@@ -404,7 +404,7 @@ class CodeWhispererCodeScanManager(val project: Project) {
404404
programmingLanguage: CodeWhispererProgrammingLanguage,
405405
codeScanJobId: String?
406406
) {
407-
runIfIamIdentityCenterConnection(project) {
407+
runIfIdcConnectionOrTelemetryEnabled(project) {
408408
try {
409409
val response = CodeWhispererClientAdaptor.getInstance(project)
410410
.sendCodeScanTelemetry(programmingLanguage, codeScanJobId)

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/credentials/CodeWhispererClientAdaptor.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.CodeWhisp
3838
import software.aws.toolkits.jetbrains.services.codewhisperer.language.CodeWhispererProgrammingLanguage
3939
import software.aws.toolkits.jetbrains.services.codewhisperer.service.RequestContext
4040
import software.aws.toolkits.jetbrains.services.codewhisperer.service.ResponseContext
41+
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.isTelemetryEnabled
4142
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants
4243
import software.aws.toolkits.jetbrains.services.codewhisperer.util.transform
4344
import software.aws.toolkits.jetbrains.settings.AwsSettings
@@ -76,7 +77,7 @@ interface CodeWhispererClientAdaptor : Disposable {
7677
isSigv4: Boolean = shouldUseSigv4Client(project)
7778
): ListCodeScanFindingsResponse
7879

79-
fun putUserTriggerDecisionTelemetry(
80+
fun sendUserTriggerDecisionTelemetry(
8081
requestContext: RequestContext,
8182
responseContext: ResponseContext,
8283
completionType: CodewhispererCompletionType,
@@ -85,7 +86,7 @@ interface CodeWhispererClientAdaptor : Disposable {
8586
lineCount: Int
8687
): SendTelemetryEventResponse
8788

88-
fun putCodePercentageTelemetry(
89+
fun sendCodePercentageTelemetry(
8990
language: CodeWhispererProgrammingLanguage,
9091
acceptedTokenCount: Int,
9192
totalTokenCount: Int
@@ -180,7 +181,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW
180181
bearerClient().listCodeAnalysisFindings(request.transform()).transform()
181182
}
182183

183-
override fun putUserTriggerDecisionTelemetry(
184+
override fun sendUserTriggerDecisionTelemetry(
184185
requestContext: RequestContext,
185186
responseContext: ResponseContext,
186187
completionType: CodewhispererCompletionType,
@@ -217,7 +218,7 @@ open class CodeWhispererClientAdaptorImpl(override val project: Project) : CodeW
217218
}
218219
}
219220

220-
override fun putCodePercentageTelemetry(
221+
override fun sendCodePercentageTelemetry(
221222
language: CodeWhispererProgrammingLanguage,
222223
acceptedTokenCount: Int,
223224
totalTokenCount: Int

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererCodeCoverageTracker.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispe
3030
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererService
3131
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererUserGroupSettings
3232
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.TOTAL_SECONDS_IN_MINUTE
33-
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIamIdentityCenterConnection
33+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIdcConnectionOrTelemetryEnabled
3434
import software.aws.toolkits.telemetry.CodewhispererTelemetry
3535
import java.time.Duration
3636
import java.time.Instant
@@ -203,9 +203,9 @@ abstract class CodeWhispererCodeCoverageTracker(
203203
}
204204
}
205205

206-
runIfIamIdentityCenterConnection(project) {
206+
runIfIdcConnectionOrTelemetryEnabled(project) {
207207
try {
208-
val response = CodeWhispererClientAdaptor.getInstance(project).putCodePercentageTelemetry(
208+
val response = CodeWhispererClientAdaptor.getInstance(project).sendCodePercentageTelemetry(
209209
language,
210210
acceptedTokensSize,
211211
totalTokensSize

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/telemetry/CodeWhispererTelemetryService.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.service.ResponseCo
3232
import software.aws.toolkits.jetbrains.services.codewhisperer.settings.CodeWhispererSettings
3333
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.getConnectionStartUrl
3434
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererUtil.getGettingStartedTaskType
35-
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIamIdentityCenterConnection
35+
import software.aws.toolkits.jetbrains.services.codewhisperer.util.runIfIdcConnectionOrTelemetryEnabled
3636
import software.aws.toolkits.jetbrains.settings.AwsSettings
3737
import software.aws.toolkits.telemetry.CodewhispererCompletionType
3838
import software.aws.toolkits.telemetry.CodewhispererGettingStartedTask
@@ -187,6 +187,7 @@ class CodeWhispererTelemetryService {
187187
suggestionReferenceCount: Int,
188188
generatedLineCount: Int
189189
) {
190+
val project = requestContext.project
190191
val totalImportCount = recommendationContext.details.fold(0) { grandTotal, detail ->
191192
grandTotal + detail.recommendation.mostRelevantMissingImports().size
192193
}
@@ -213,11 +214,11 @@ class CodeWhispererTelemetryService {
213214
} else CodewhispererCompletionType.Line
214215

215216
// only send if it's a pro tier user
216-
projectCoroutineScope(requestContext.project).launch {
217-
runIfIamIdentityCenterConnection(requestContext.project) {
217+
projectCoroutineScope(project).launch {
218+
runIfIdcConnectionOrTelemetryEnabled(project) {
218219
try {
219-
val response = CodeWhispererClientAdaptor.getInstance(requestContext.project)
220-
.putUserTriggerDecisionTelemetry(
220+
val response = CodeWhispererClientAdaptor.getInstance(project)
221+
.sendUserTriggerDecisionTelemetry(
221222
requestContext,
222223
responseContext,
223224
completionType,
@@ -238,7 +239,7 @@ class CodeWhispererTelemetryService {
238239
}
239240

240241
CodewhispererTelemetry.userTriggerDecision(
241-
project = requestContext.project,
242+
project = project,
242243
codewhispererSessionId = responseContext.sessionId,
243244
codewhispererFirstRequestId = requestContext.latencyContext.firstRequestId,
244245
credentialStartUrl = getConnectionStartUrl(requestContext.connection),

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/util/CodeWhispererUtil.kt

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,24 @@ import software.aws.toolkits.jetbrains.services.codewhisperer.explorer.isCodeWhi
3535
import software.aws.toolkits.jetbrains.services.codewhisperer.learn.LearnCodeWhispererManager.Companion.taskTypeToFilename
3636
import software.aws.toolkits.jetbrains.services.codewhisperer.model.Chunk
3737
import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererService
38+
import software.aws.toolkits.jetbrains.services.codewhisperer.telemetry.isTelemetryEnabled
3839
import software.aws.toolkits.jetbrains.utils.notifyError
3940
import software.aws.toolkits.jetbrains.utils.notifyInfo
4041
import software.aws.toolkits.jetbrains.utils.notifyWarn
4142
import software.aws.toolkits.resources.message
4243
import software.aws.toolkits.telemetry.CodewhispererCompletionType
4344
import software.aws.toolkits.telemetry.CodewhispererGettingStartedTask
4445

45-
fun runIfIamIdentityCenterConnection(project: Project, callback: (connection: ToolkitConnection) -> Unit) =
46+
// Controls the condition to send telemetry event to CodeWhisperer service, currently:
47+
// 1. It will be sent for Builder ID users, only if they have optin telemetry sharing.
48+
// 2. It will be sent for IdC users, regardless of telemetry optout status.
49+
fun runIfIdcConnectionOrTelemetryEnabled(project: Project, callback: (connection: ToolkitConnection) -> Unit) =
4650
ToolkitConnectionManager.getInstance(project).activeConnectionForFeature(CodeWhispererConnection.getInstance())?.let {
47-
runIfIamIdentityCenterConnection(it, callback)
51+
runIfIdcConnectionOrTelemetryEnabled(it, callback)
4852
}
4953

50-
fun runIfIamIdentityCenterConnection(connection: ToolkitConnection, callback: (connection: ToolkitConnection) -> Unit) {
51-
if (connection.isSono()) return
54+
fun runIfIdcConnectionOrTelemetryEnabled(connection: ToolkitConnection, callback: (connection: ToolkitConnection) -> Unit) {
55+
if (connection.isSono() && !isTelemetryEnabled()) return
5256
callback(connection)
5357
}
5458

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/codewhisperer/CodeWhispererClientAdaptorTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,9 +255,9 @@ class CodeWhispererClientAdaptorTest {
255255
}
256256

257257
@Test
258-
fun `sendTelemetryEvent for userTriggerDecision respects telemetry optin status`() {
258+
fun `sendTelemetryEvent for userTriggerDecision respects telemetry optin status, for SSO users`() {
259259
sendTelemetryEventOptOutCheckHelper {
260-
sut.putUserTriggerDecisionTelemetry(
260+
sut.sendUserTriggerDecisionTelemetry(
261261
aRequestContext(projectRule.project),
262262
aResponseContext(),
263263
aCompletionType(),
@@ -271,7 +271,7 @@ class CodeWhispererClientAdaptorTest {
271271
@Test
272272
fun `sendTelemetryEvent for codePercentage respects telemetry optin status`() {
273273
sendTelemetryEventOptOutCheckHelper {
274-
sut.putCodePercentageTelemetry(aProgrammingLanguage(), 0, 1)
274+
sut.sendCodePercentageTelemetry(aProgrammingLanguage(), 0, 1)
275275
}
276276
}
277277

0 commit comments

Comments
 (0)