@@ -18,10 +18,13 @@ import org.jetbrains.annotations.TestOnly
18
18
import software.aws.toolkits.core.utils.debug
19
19
import software.aws.toolkits.core.utils.getLogger
20
20
import software.aws.toolkits.jetbrains.services.codewhisperer.language.toCodeWhispererLanguage
21
+ import software.aws.toolkits.jetbrains.services.codewhisperer.model.FileContextInfo
21
22
import software.aws.toolkits.jetbrains.services.codewhisperer.model.InvocationContext
22
23
import software.aws.toolkits.jetbrains.services.codewhisperer.model.SessionContext
23
24
import software.aws.toolkits.jetbrains.services.codewhisperer.popup.CodeWhispererPopupManager
24
25
import software.aws.toolkits.jetbrains.services.codewhisperer.popup.CodeWhispererUserActionListener
26
+ import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererCodeCompletionServiceListener
27
+ import software.aws.toolkits.jetbrains.services.codewhisperer.service.CodeWhispererService
25
28
import software.aws.toolkits.jetbrains.services.codewhisperer.util.CodeWhispererConstants.TOTAL_SECONDS_IN_MINUTE
26
29
import software.aws.toolkits.telemetry.CodewhispererLanguage
27
30
import software.aws.toolkits.telemetry.CodewhispererTelemetry
@@ -35,7 +38,8 @@ abstract class CodeWhispererCodeCoverageTracker(
35
38
private val timeWindowInSec : Long ,
36
39
private val language : CodewhispererLanguage ,
37
40
private val rangeMarkers : MutableList <RangeMarker >,
38
- private val fileToTokens : MutableMap <Document , CodeCoverageTokens >
41
+ private val fileToTokens : MutableMap <Document , CodeCoverageTokens >,
42
+ private val myServiceInvocationCount : AtomicInteger
39
43
) : Disposable {
40
44
val percentage: Int?
41
45
get() = if (totalTokensSize != 0 ) calculatePercentage(acceptedTokensSize, totalTokensSize) else null
@@ -53,6 +57,8 @@ abstract class CodeWhispererCodeCoverageTracker(
53
57
}
54
58
val acceptedRecommendationsCount: Int
55
59
get() = rangeMarkers.size
60
+ val serviceInvocationCount: Int
61
+ get() = myServiceInvocationCount.get()
56
62
private val isActive: AtomicBoolean = AtomicBoolean (false )
57
63
private val alarm = AlarmFactory .getInstance().create(Alarm .ThreadToUse .POOLED_THREAD , this )
58
64
private val isShuttingDown = AtomicBoolean (false )
@@ -77,6 +83,17 @@ abstract class CodeWhispererCodeCoverageTracker(
77
83
}
78
84
}
79
85
)
86
+
87
+ conn.subscribe(
88
+ CodeWhispererService .CODEWHISPERER_CODE_COMPLETION_PERFORMED ,
89
+ object : CodeWhispererCodeCompletionServiceListener {
90
+ override fun onSuccess (fileContextInfo : FileContextInfo ) {
91
+ if (language == fileContextInfo.programmingLanguage.toCodeWhispererLanguage()) {
92
+ myServiceInvocationCount.getAndIncrement()
93
+ }
94
+ }
95
+ }
96
+ )
80
97
startTime = Instant .now()
81
98
isActive.set(true )
82
99
scheduleCodeWhispererCodeCoverageTracker()
@@ -156,6 +173,7 @@ abstract class CodeWhispererCodeCoverageTracker(
156
173
startTime = Instant .now()
157
174
rangeMarkers.clear()
158
175
fileToTokens.clear()
176
+ myServiceInvocationCount.set(0 )
159
177
}
160
178
161
179
internal fun emitCodeWhispererCodeContribution () {
@@ -186,7 +204,7 @@ abstract class CodeWhispererCodeCoverageTracker(
186
204
language,
187
205
percentage,
188
206
totalTokensSize,
189
- successCount = 0
207
+ successCount = myServiceInvocationCount.get()
190
208
)
191
209
}
192
210
}
@@ -236,7 +254,8 @@ class DefaultCodeWhispererCodeCoverageTracker(language: CodewhispererLanguage) :
236
254
5 * TOTAL_SECONDS_IN_MINUTE ,
237
255
language,
238
256
mutableListOf(),
239
- mutableMapOf()
257
+ mutableMapOf(),
258
+ AtomicInteger (0)
240
259
)
241
260
242
261
class CodeCoverageTokens (totalTokens : Int = 0 , acceptedTokens : Int = 0 ) {
0 commit comments