Skip to content

Commit cbc3ab8

Browse files
committed
Include error message in telemetry
1 parent b2c52b3 commit cbc3ab8

2 files changed

Lines changed: 24 additions & 10 deletions

File tree

src/platform/networking/node/chatWebSocketManager.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ class ChatWebSocketConnection extends Disposable implements IChatWebSocketConnec
410410
const requestStartSentCharacters = this._totalSentCharacters;
411411
const requestStartReceivedCharacters = this._totalReceivedCharacters;
412412
const request = new ChatWebSocketActiveRequest();
413-
request.onDidSettle(({ outcome, closeCode }) => {
413+
request.onDidSettle(({ outcome, closeCode, closeReason, serverErrorMessage, serverErrorCode }) => {
414414
const connectionDurationMs = Date.now() - (this._connectedTime ?? Date.now());
415415
const requestDurationMs = Date.now() - requestStartTime;
416416
const requestSentMessageCount = this._totalSentMessageCount - requestStartSentMessageCount;
@@ -434,6 +434,9 @@ class ChatWebSocketConnection extends Disposable implements IChatWebSocketConnec
434434
requestSentCharacters,
435435
requestReceivedCharacters,
436436
closeCode,
437+
closeReason,
438+
serverErrorMessage,
439+
serverErrorCode,
437440
});
438441
});
439442
this._activeRequest = request;
@@ -505,7 +508,7 @@ class ChatWebSocketActiveRequest implements IChatWebSocketRequestHandle {
505508
private _resolve!: () => void;
506509
private _reject!: (err: Error) => void;
507510
private _settled = false;
508-
private _onDidSettle?: (result: { outcome: ChatWebSocketRequestOutcome; closeCode?: number }) => void;
511+
private _onDidSettle?: (result: { outcome: ChatWebSocketRequestOutcome; closeCode?: number; closeReason?: string; serverErrorMessage?: string; serverErrorCode?: string }) => void;
509512

510513
readonly done: Promise<void>;
511514

@@ -516,7 +519,7 @@ class ChatWebSocketActiveRequest implements IChatWebSocketRequestHandle {
516519
});
517520
}
518521

519-
onDidSettle(callback: (result: { outcome: ChatWebSocketRequestOutcome; closeCode?: number }) => void): void {
522+
onDidSettle(callback: (result: { outcome: ChatWebSocketRequestOutcome; closeCode?: number; closeReason?: string; serverErrorMessage?: string; serverErrorCode?: string }) => void): void {
520523
this._onDidSettle = callback;
521524
}
522525

@@ -526,9 +529,11 @@ class ChatWebSocketActiveRequest implements IChatWebSocketRequestHandle {
526529
}
527530

528531
if (event.type === 'error') {
529-
const error = new Error(event.message || (event as { error?: { message?: string } }).error?.message || 'Server error');
530-
(error as Error & { code?: string }).code = event.code || (event as { error?: { code?: string } }).error?.code || undefined;
531-
this._finalizeError('server_error', error);
532+
const serverErrorMessage = event.message || (event as { error?: { message?: string } }).error?.message || 'Server error';
533+
const serverErrorCode = event.code || (event as { error?: { code?: string } }).error?.code || undefined;
534+
const errorMessage = serverErrorCode ? `${serverErrorMessage} (${serverErrorCode})` : serverErrorMessage;
535+
const error = new Error(errorMessage);
536+
this._finalizeError('server_error', error, undefined, undefined, serverErrorMessage, serverErrorCode);
532537
return;
533538
}
534539

@@ -545,7 +550,7 @@ class ChatWebSocketActiveRequest implements IChatWebSocketRequestHandle {
545550
return;
546551
}
547552
const error = new Error(`WebSocket closed unexpectedly (code: ${code} ${wsCloseCodeToString(code)}${reason ? `, reason: ${reason}` : ''})`);
548-
this._finalizeError('connection_closed', error, code);
553+
this._finalizeError('connection_closed', error, code, reason);
549554
}
550555

551556
handleConnectionError(error: Error): void {
@@ -583,10 +588,10 @@ class ChatWebSocketActiveRequest implements IChatWebSocketRequestHandle {
583588
this._dispose();
584589
}
585590

586-
private _finalizeError(outcome: ChatWebSocketRequestOutcome, error: Error, closeCode?: number): void {
591+
private _finalizeError(outcome: ChatWebSocketRequestOutcome, error: Error, closeCode?: number, closeReason?: string, serverErrorMessage?: string, serverErrorCode?: string): void {
587592
this._onError.fire(error);
588593
this._settled = true;
589-
this._onDidSettle?.({ outcome, closeCode });
594+
this._onDidSettle?.({ outcome, closeCode, closeReason, serverErrorMessage, serverErrorCode });
590595
this._reject(error);
591596
this._dispose();
592597
}

src/platform/networking/node/chatWebSocketTelemetry.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ export interface IChatWebSocketRequestOutcomeTelemetryProperties extends IChatWe
8484
requestSentCharacters: number;
8585
requestReceivedCharacters: number;
8686
closeCode?: number;
87+
closeReason?: string;
88+
serverErrorMessage?: string;
89+
serverErrorCode?: string;
8790
}
8891

8992
export class ChatWebSocketTelemetrySender {
@@ -344,7 +347,10 @@ export class ChatWebSocketTelemetrySender {
344347
"requestReceivedCharacters": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Number of characters received during this request", "isMeasurement": true },
345348
"connectionDurationMs": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "How long the connection has been open when the request ended in milliseconds", "isMeasurement": true },
346349
"requestDurationMs": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "How long the request took before terminal outcome in milliseconds", "isMeasurement": true },
347-
"closeCode": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "WebSocket close code when outcome is connection_closed", "isMeasurement": true }
350+
"closeCode": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "WebSocket close code when outcome is connection_closed", "isMeasurement": true },
351+
"closeReason": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "WebSocket close reason when outcome is connection_closed" },
352+
"serverErrorMessage": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Error message from server error event when outcome is server_error" },
353+
"serverErrorCode": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "comment": "Error code from server error event when outcome is server_error" }
348354
}
349355
*/
350356
telemetryService.sendTelemetryEvent('websocket.requestOutcome', { github: true, microsoft: true }, {
@@ -353,6 +359,9 @@ export class ChatWebSocketTelemetrySender {
353359
requestId: properties.requestId,
354360
gitHubRequestId: properties.gitHubRequestId,
355361
requestOutcome: properties.requestOutcome,
362+
closeReason: properties.closeReason,
363+
serverErrorMessage: properties.serverErrorMessage,
364+
serverErrorCode: properties.serverErrorCode,
356365
}, {
357366
totalSentMessageCount: properties.totalSentMessageCount,
358367
totalReceivedMessageCount: properties.totalReceivedMessageCount,

0 commit comments

Comments
 (0)