@@ -11,6 +11,7 @@ import { vsCodeState } from '../models/model'
11
11
import { distance } from 'fastest-levenshtein'
12
12
import { CodewhispererLanguage , telemetry } from '../../shared/telemetry/telemetry'
13
13
import { runtimeLanguageContext } from '../util/runtimeLanguageContext'
14
+ import { TelemetryHelper } from '../util/telemetryHelper'
14
15
15
16
interface CodeWhispererToken {
16
17
range : vscode . Range
@@ -27,32 +28,46 @@ export class CodeWhispererCodeCoverageTracker {
27
28
private _timer ?: NodeJS . Timer
28
29
private _startTime : number
29
30
private _language : CodewhispererLanguage
31
+ private _serviceInvocationCount : number
30
32
31
- private constructor ( language : CodewhispererLanguage , private readonly _globals : vscode . Memento ) {
33
+ private constructor ( language : CodewhispererLanguage , private readonly globals : vscode . Memento ) {
32
34
this . _acceptedTokens = { }
33
35
this . _totalTokens = { }
34
36
this . _startTime = 0
35
37
this . _language = language
38
+ this . _serviceInvocationCount = 0
39
+ }
40
+
41
+ public get serviceInvocationCount ( ) : number {
42
+ return this . _serviceInvocationCount
36
43
}
37
44
38
45
public get acceptedTokens ( ) : { [ key : string ] : CodeWhispererToken [ ] } {
39
46
return this . _acceptedTokens
40
47
}
48
+
41
49
public get totalTokens ( ) : { [ key : string ] : number } {
42
50
return this . _totalTokens
43
51
}
44
52
53
+ public isActive ( ) : boolean {
54
+ const isTermsAccepted = this . globals . get < boolean > ( CodeWhispererConstants . termsAcceptedKey ) || false
55
+ return TelemetryHelper . instance . isTelemetryEnabled ( ) && isTermsAccepted
56
+ }
57
+
45
58
public countAcceptedTokens ( range : vscode . Range , text : string , filename : string ) {
46
- const terms = this . _globals . get < boolean > ( CodeWhispererConstants . termsAcceptedKey ) || false
47
- if ( ! terms ) return
59
+ if ( ! this . isActive ( ) ) return
48
60
// generate accepted recommendation token and stored in collection
49
61
this . addAcceptedTokens ( filename , { range : range , text : text , accepted : text . length } )
50
62
this . addTotalTokens ( filename , text . length )
51
63
}
52
64
65
+ public incrementServiceInvocationCount ( ) {
66
+ this . _serviceInvocationCount += 1
67
+ }
68
+
53
69
public flush ( ) {
54
- const terms = this . _globals . get < boolean > ( CodeWhispererConstants . termsAcceptedKey ) || false
55
- if ( ! terms ) {
70
+ if ( ! this . isActive ( ) ) {
56
71
this . _totalTokens = { }
57
72
this . _acceptedTokens = { }
58
73
this . closeTimer ( )
@@ -107,7 +122,7 @@ export class CodeWhispererCodeCoverageTracker {
107
122
codewhispererLanguage : this . _language ,
108
123
codewhispererAcceptedTokens : acceptedTokens ,
109
124
codewhispererPercentage : percentage ? percentage : 0 ,
110
- successCount : 0 ,
125
+ successCount : this . _serviceInvocationCount ,
111
126
} )
112
127
}
113
128
@@ -136,14 +151,19 @@ export class CodeWhispererCodeCoverageTracker {
136
151
} catch ( e ) {
137
152
getLogger ( ) . verbose ( `Exception Thrown from CodeWhispererCodeCoverageTracker: ${ e } ` )
138
153
} finally {
139
- this . _totalTokens = { }
140
- this . _acceptedTokens = { }
141
- this . _startTime = 0
154
+ this . resetTracker ( )
142
155
this . closeTimer ( )
143
156
}
144
157
} , CodeWhispererConstants . defaultCheckPeriodMillis )
145
158
}
146
159
160
+ private resetTracker ( ) {
161
+ this . _totalTokens = { }
162
+ this . _acceptedTokens = { }
163
+ this . _startTime = 0
164
+ this . _serviceInvocationCount = 0
165
+ }
166
+
147
167
private closeTimer ( ) {
148
168
if ( this . _timer !== undefined ) {
149
169
clearTimeout ( this . _timer )
@@ -190,12 +210,20 @@ export class CodeWhispererCodeCoverageTracker {
190
210
}
191
211
192
212
public static readonly instances = new Map < string , CodeWhispererCodeCoverageTracker > ( )
193
- public static getTracker ( language : string , memento : vscode . Memento ) : CodeWhispererCodeCoverageTracker | undefined {
194
- if ( runtimeLanguageContext . isLanguageSupported ( language ) ) {
195
- const instance = this . instances . get ( language ) ?? new this ( language as CodewhispererLanguage , memento )
196
- this . instances . set ( language , instance )
197
- return instance
213
+
214
+ public static getTracker (
215
+ language : string ,
216
+ memeto : vscode . Memento = globals . context . globalState
217
+ ) : CodeWhispererCodeCoverageTracker | undefined {
218
+ if ( ! runtimeLanguageContext . isLanguageSupported ( language ) ) {
219
+ return undefined
220
+ }
221
+ const cwsprLanguage = runtimeLanguageContext . mapVscLanguageToCodeWhispererLanguage ( language )
222
+ if ( ! cwsprLanguage ) {
223
+ return undefined
198
224
}
199
- return undefined
225
+ const instance = this . instances . get ( language ) ?? new this ( cwsprLanguage , memeto )
226
+ this . instances . set ( language , instance )
227
+ return instance
200
228
}
201
229
}
0 commit comments