Skip to content

Commit

Permalink
Add raw error to analytics E2E error event context (#8447)
Browse files Browse the repository at this point in the history
* Add raw error to analytics E2E error context

* Fix code style

Co-authored-by: Michael Telatynski <7t3chguy@gmail.com>
  • Loading branch information
BillCarsonFr and t3chguy committed May 5, 2022
1 parent f34b4f1 commit 07d8070
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
7 changes: 4 additions & 3 deletions src/DecryptionFailureTracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand Down Expand Up @@ -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;
}
}
Expand Down
27 changes: 27 additions & 0 deletions test/DecryptionFailureTracker-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand Down

0 comments on commit 07d8070

Please sign in to comment.