@@ -39,12 +39,15 @@ export type TelemetryData = {
3939 extension : string ;
4040 rounds : string ;
4141 undos : string ;
42- edits : boolean ;
4342 unstashed : number ;
43+ edits : number ;
4444 finishedByEdit : boolean ;
4545 startTime : string ;
4646 endTime : string ;
4747 editMode : string ;
48+ acceptedHunks : number ;
49+ discardedHunks : number ;
50+ responseTypes : string ;
4851} ;
4952
5053export type TelemetryDataClassification = {
@@ -59,6 +62,9 @@ export type TelemetryDataClassification = {
5962 startTime : { classification : 'SystemMetaData' ; purpose : 'FeatureInsight' ; comment : 'When the session started' } ;
6063 endTime : { classification : 'SystemMetaData' ; purpose : 'FeatureInsight' ; comment : 'When the session ended' } ;
6164 editMode : { classification : 'SystemMetaData' ; purpose : 'FeatureInsight' ; comment : 'What edit mode was choosen: live, livePreview, preview' } ;
65+ acceptedHunks : { classification : 'SystemMetaData' ; purpose : 'FeatureInsight' ; isMeasurement : true ; comment : 'Number of accepted hunks' } ;
66+ discardedHunks : { classification : 'SystemMetaData' ; purpose : 'FeatureInsight' ; isMeasurement : true ; comment : 'Number of discarded hunks' } ;
67+ responseTypes : { classification : 'SystemMetaData' ; purpose : 'FeatureInsight' ; comment : 'Comma separated list of response types like edits, message, mixed' } ;
6268} ;
6369
6470export enum ExpansionState {
@@ -140,7 +146,7 @@ export class Session {
140146 private _isUnstashed : boolean = false ;
141147 private readonly _exchange : SessionExchange [ ] = [ ] ;
142148 private readonly _startTime = new Date ( ) ;
143- private readonly _teldata : Partial < TelemetryData > ;
149+ private readonly _teldata : TelemetryData ;
144150
145151 readonly textModelNAltVersion : number ;
146152 private _textModelNSnapshotAltVersion : number | undefined ;
@@ -168,12 +174,16 @@ export class Session {
168174 this . _teldata = {
169175 extension : provider . debugName ,
170176 startTime : this . _startTime . toISOString ( ) ,
171- edits : false ,
177+ endTime : this . _startTime . toISOString ( ) ,
178+ edits : 0 ,
172179 finishedByEdit : false ,
173180 rounds : '' ,
174181 undos : '' ,
175182 editMode,
176- unstashed : 0
183+ unstashed : 0 ,
184+ acceptedHunks : 0 ,
185+ discardedHunks : 0 ,
186+ responseTypes : ''
177187 } ;
178188 }
179189
@@ -214,6 +224,7 @@ export class Session {
214224 this . _isUnstashed = false ;
215225 const newLen = this . _exchange . push ( exchange ) ;
216226 this . _teldata . rounds += `${ newLen } |` ;
227+ this . _teldata . responseTypes += `${ exchange . response instanceof ReplyResponse ? exchange . response . responseType : InlineChatResponseTypes . Empty } |` ;
217228 }
218229
219230 get exchanges ( ) : Iterable < SessionExchange > {
@@ -244,15 +255,25 @@ export class Session {
244255 }
245256
246257 recordExternalEditOccurred ( didFinish : boolean ) {
247- this . _teldata . edits = true ;
258+ this . _teldata . edits += 1 ;
248259 this . _teldata . finishedByEdit = didFinish ;
249260 }
250261
251262 asTelemetryData ( ) : TelemetryData {
252- return < TelemetryData > {
253- ...this . _teldata ,
254- endTime : new Date ( ) . toISOString ( ) ,
255- } ;
263+
264+ for ( const item of this . hunkData . getInfo ( ) ) {
265+ switch ( item . getState ( ) ) {
266+ case HunkState . Accepted :
267+ this . _teldata . acceptedHunks += 1 ;
268+ break ;
269+ case HunkState . Rejected :
270+ this . _teldata . discardedHunks += 1 ;
271+ break ;
272+ }
273+ }
274+
275+ this . _teldata . endTime = new Date ( ) . toISOString ( ) ;
276+ return this . _teldata ;
256277 }
257278
258279 asRecording ( ) : Recording {
0 commit comments