Add raw error to analytics E2E error event context (#8447)
* Add raw error to analytics E2E error context * Fix code style Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>pull/28788/head^2
parent
f34b4f1182
commit
07d8070037
|
@ -31,18 +31,19 @@ export class DecryptionFailure {
|
|||
|
||||
type ErrorCode = "OlmKeysNotSentError" | "OlmIndexError" | "UnknownError" | "OlmUnspecifiedError";
|
||||
|
||||
type TrackingFn = (count: number, trackedErrCode: ErrorCode) => void;
|
||||
type TrackingFn = (count: number, trackedErrCode: ErrorCode, rawError: string) => void;
|
||||
|
||||
export type ErrCodeMapFn = (errcode: string) => ErrorCode;
|
||||
|
||||
export class DecryptionFailureTracker {
|
||||
private static internalInstance = new DecryptionFailureTracker((total, errorCode) => {
|
||||
private static internalInstance = new DecryptionFailureTracker((total, errorCode, rawError) => {
|
||||
Analytics.trackEvent('E2E', 'Decryption failure', errorCode, String(total));
|
||||
for (let i = 0; i < total; i++) {
|
||||
PosthogAnalytics.instance.trackEvent<ErrorEvent>({
|
||||
eventName: "Error",
|
||||
domain: "E2EE",
|
||||
name: errorCode,
|
||||
context: `mxc_crypto_error_type_${rawError}`,
|
||||
});
|
||||
}
|
||||
}, (errorCode) => {
|
||||
|
@ -236,7 +237,7 @@ export class DecryptionFailureTracker {
|
|||
if (this.failureCounts[errorCode] > 0) {
|
||||
const trackedErrorCode = this.errorCodeMapFn(errorCode);
|
||||
|
||||
this.fn(this.failureCounts[errorCode], trackedErrorCode);
|
||||
this.fn(this.failureCounts[errorCode], trackedErrorCode, errorCode);
|
||||
this.failureCounts[errorCode] = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,6 +57,33 @@ describe('DecryptionFailureTracker', function() {
|
|||
done();
|
||||
});
|
||||
|
||||
it('tracks a failed decryption with expected raw error for a visible event', function(done) {
|
||||
const failedDecryptionEvent = createFailedDecryptionEvent();
|
||||
|
||||
let count = 0;
|
||||
let reportedRawCode = "";
|
||||
const tracker = new DecryptionFailureTracker((total, errcode, rawCode) => {
|
||||
count += total;
|
||||
reportedRawCode = rawCode;
|
||||
}, () => "UnknownError");
|
||||
|
||||
tracker.addVisibleEvent(failedDecryptionEvent);
|
||||
|
||||
const err = new MockDecryptionError('INBOUND_SESSION_MISMATCH_ROOM_ID');
|
||||
tracker.eventDecrypted(failedDecryptionEvent, err);
|
||||
|
||||
// Pretend "now" is Infinity
|
||||
tracker.checkFailures(Infinity);
|
||||
|
||||
// Immediately track the newest failures
|
||||
tracker.trackFailures();
|
||||
|
||||
expect(count).not.toBe(0, 'should track a failure for an event that failed decryption');
|
||||
expect(reportedRawCode).toBe('INBOUND_SESSION_MISMATCH_ROOM_ID', 'Should add the rawCode to the event context');
|
||||
|
||||
done();
|
||||
});
|
||||
|
||||
it('tracks a failed decryption for an event that becomes visible later', function(done) {
|
||||
const failedDecryptionEvent = createFailedDecryptionEvent();
|
||||
|
||||
|
|
Loading…
Reference in New Issue