From f14d341de9453469d3065f071089c9b9b5c3b0dc Mon Sep 17 00:00:00 2001 From: Alex Kaminskii Date: Tue, 2 Aug 2022 18:31:55 +0200 Subject: [PATCH] fix(tracker):fix in webworker messages handle --- tracker/tracker/src/webworker/BatchWriter.ts | 23 +++++++++++--------- tracker/tracker/src/webworker/index.ts | 3 +-- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/tracker/tracker/src/webworker/BatchWriter.ts b/tracker/tracker/src/webworker/BatchWriter.ts index 26fe37c0a..a4309e067 100644 --- a/tracker/tracker/src/webworker/BatchWriter.ts +++ b/tracker/tracker/src/webworker/BatchWriter.ts @@ -3,14 +3,14 @@ import * as Messages from '../common/messages.js'; import MessageEncoder from './MessageEncoder.js'; import PrimitiveEncoder from './PrimitiveEncoder.js'; -const SIZE_RESERVED = 2; -const MAX_M_SIZE = (1 << (SIZE_RESERVED * 8)) - 1; +const SIZE_BYTES = 2; +const MAX_M_SIZE = (1 << (SIZE_BYTES * 8)) - 1; export default class BatchWriter { private nextIndex = 0; private beaconSize = 2 * 1e5; // Default 200kB private encoder = new MessageEncoder(this.beaconSize); - private readonly sizeEncoder = new PrimitiveEncoder(SIZE_RESERVED); + private readonly sizeEncoder = new PrimitiveEncoder(SIZE_BYTES); private isEmpty = true; constructor( @@ -36,11 +36,13 @@ export default class BatchWriter { this.url, ]; this.encoder.encode(batchMetadata); + this.isEmpty = true; } private write(message: Message): boolean { const e = this.encoder; - if (!e.uint(message[0]) || !e.skip(SIZE_RESERVED)) { + if (!e.uint(message[0]) || !e.skip(SIZE_BYTES)) { + // TODO: app.debug.log return false; } const startOffset = e.getCurrentOffset(); @@ -53,12 +55,13 @@ export default class BatchWriter { return false; } this.sizeEncoder.checkpoint(); // TODO: separate checkpoint logic to an Encoder-inherit class - e.set(this.sizeEncoder.flush(), startOffset - SIZE_RESERVED); + e.set(this.sizeEncoder.flush(), startOffset - SIZE_BYTES); e.checkpoint(); this.isEmpty = false; this.nextIndex++; } + // app.debug.log return wasWritten; } @@ -74,20 +77,21 @@ export default class BatchWriter { if (message[0] === Messages.Type.SetPageLocation) { this.url = message[1]; // .url } + if (this.write(message)) { + return; + } + this.finaliseBatch(); while (!this.write(message)) { - this.finaliseBatch(); if (this.beaconSize === this.beaconSizeLimit) { - console.warn('OpenReplay: beacon size overflow. Skipping large message.'); + console.warn('OpenReplay: beacon size overflow. Skipping large message.', message); this.encoder.reset(); this.prepare(); - this.isEmpty = true; return; } // MBTODO: tempWriter for one message? this.beaconSize = Math.min(this.beaconSize * 2, this.beaconSizeLimit); this.encoder = new MessageEncoder(this.beaconSize); this.prepare(); - this.isEmpty = true; } } @@ -97,7 +101,6 @@ export default class BatchWriter { } this.onBatch(this.encoder.flush()); this.prepare(); - this.isEmpty = true; } clean() { diff --git a/tracker/tracker/src/webworker/index.ts b/tracker/tracker/src/webworker/index.ts index 4a8e4290f..3712e3846 100644 --- a/tracker/tracker/src/webworker/index.ts +++ b/tracker/tracker/src/webworker/index.ts @@ -61,13 +61,12 @@ self.onmessage = ({ data }: MessageEvent): any => { } if (Array.isArray(data)) { + // Message[] if (!writer) { throw new Error('WebWorker: writer not initialised. Service Should be Started.'); } const w = writer; - // Message[] data.forEach((message) => { - Object.assign(message, data); if (message[0] === MType.SetPageVisibility) { if (message[1]) { // .hidden