Skip to content

Commit

Permalink
fix(content-insights): events recurrent request issue (#1472)
Browse files Browse the repository at this point in the history
* fix(content-insights): events recurrent request issue

* fix(content-insights): add tests and refactor

* fix(content-insights): settimeout memory leak
  • Loading branch information
arturfrombox authored Apr 26, 2023
1 parent fd503db commit 7797b3e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
18 changes: 16 additions & 2 deletions src/lib/Preview.js
Original file line number Diff line number Diff line change
Expand Up @@ -1384,6 +1384,19 @@ class Preview extends EventEmitter {
this.prefetchNextFiles();
}

/**
* Emits event in order to notify PageTracker if the Access Stats preview event was successfully reported
*
* @private
* @param {boolean} success - state of the request
* @return {void}
*/
pageTrackerReporter(success = true) {
if (this.viewer && typeof this.viewer.emit === 'function') {
this.viewer.emit('preview_event_report', success);
}
}

/**
* Logs 'preview' event via the Events API. This is used for logging that a
* preview happened for access stats, unlike the Logger, which logs preview
Expand Down Expand Up @@ -1421,16 +1434,17 @@ class Preview extends EventEmitter {
this.api
.post(`${apiHost}/2.0/events`, data, { headers })
.then(() => {
this.pageTrackerReporter(true);
// Reset retry count after successfully logging
this.logRetryCount = 0;
this.viewer.emit('preview_event_report', true);
})
.catch(() => {
// Don't retry more than the retry limit
this.logRetryCount += 1;
if (this.logRetryCount > LOG_RETRY_COUNT) {
this.pageTrackerReporter(false);
this.logRetryCount = 0;
this.viewer.emit('preview_event_report', false);
clearTimeout(this.logRetryTimeout);
return;
}

Expand Down
15 changes: 15 additions & 0 deletions src/lib/__tests__/Preview-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -2115,6 +2115,21 @@ describe('lib/Preview', () => {
expect(stubs.emit).toBeCalledWith('preview_event_report', false);
});
});
test('should not call emit viewer event on logPreviewEvent if preview was hidden and viewer was destroyed', () => {
preview.viewer = {
emit: jest.fn(),
destroy: jest.fn(),
};

stubs.emit = jest.spyOn(preview.viewer, 'emit');
stubs.destroy = jest.spyOn(preview.viewer, 'destroy');

preview.hide();
preview.pageTrackerReporter(true);

expect(stubs.destroy).toBeCalled();
expect(stubs.emit).not.toBeCalled();
});
});

describe('handleFetchError()', () => {
Expand Down

0 comments on commit 7797b3e

Please sign in to comment.