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>
This commit is contained in:
parent
f34b4f1182
commit
07d8070037
2 changed files with 31 additions and 3 deletions
|
@ -31,18 +31,19 @@ export class DecryptionFailure {
|
||||||
|
|
||||||
type ErrorCode = "OlmKeysNotSentError" | "OlmIndexError" | "UnknownError" | "OlmUnspecifiedError";
|
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 type ErrCodeMapFn = (errcode: string) => ErrorCode;
|
||||||
|
|
||||||
export class DecryptionFailureTracker {
|
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));
|
Analytics.trackEvent('E2E', 'Decryption failure', errorCode, String(total));
|
||||||
for (let i = 0; i < total; i++) {
|
for (let i = 0; i < total; i++) {
|
||||||
PosthogAnalytics.instance.trackEvent<ErrorEvent>({
|
PosthogAnalytics.instance.trackEvent<ErrorEvent>({
|
||||||
eventName: "Error",
|
eventName: "Error",
|
||||||
domain: "E2EE",
|
domain: "E2EE",
|
||||||
name: errorCode,
|
name: errorCode,
|
||||||
|
context: `mxc_crypto_error_type_${rawError}`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, (errorCode) => {
|
}, (errorCode) => {
|
||||||
|
@ -236,7 +237,7 @@ export class DecryptionFailureTracker {
|
||||||
if (this.failureCounts[errorCode] > 0) {
|
if (this.failureCounts[errorCode] > 0) {
|
||||||
const trackedErrorCode = this.errorCodeMapFn(errorCode);
|
const trackedErrorCode = this.errorCodeMapFn(errorCode);
|
||||||
|
|
||||||
this.fn(this.failureCounts[errorCode], trackedErrorCode);
|
this.fn(this.failureCounts[errorCode], trackedErrorCode, errorCode);
|
||||||
this.failureCounts[errorCode] = 0;
|
this.failureCounts[errorCode] = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,33 @@ describe('DecryptionFailureTracker', function() {
|
||||||
done();
|
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) {
|
it('tracks a failed decryption for an event that becomes visible later', function(done) {
|
||||||
const failedDecryptionEvent = createFailedDecryptionEvent();
|
const failedDecryptionEvent = createFailedDecryptionEvent();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue