From 9b143eb98f625edd39d729485cd7edfade0f5f0a Mon Sep 17 00:00:00 2001 From: Delirium Date: Tue, 28 May 2024 10:51:39 +0200 Subject: [PATCH] feat tracker: socket only mode (EE) (#2216) * feat tracker: socket only mode * fix ui: hide timeline for live sessions if socket only * feat tracker: socket mode sync with backend, add flag onstart * feat tracker: keep socket mode --- .../Player/LivePlayer/LiveControls.tsx | 2 +- .../app/player/web/managers/DOM/DOMManager.ts | 5 ++-- frontend/app/types/session/session.ts | 2 ++ tracker/tracker/CHANGELOG.md | 4 +++ tracker/tracker/package.json | 2 +- tracker/tracker/src/main/app/index.ts | 27 +++++++++++++++---- 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/frontend/app/components/Session/Player/LivePlayer/LiveControls.tsx b/frontend/app/components/Session/Player/LivePlayer/LiveControls.tsx index 647380fd4..d9f2f2bf3 100644 --- a/frontend/app/components/Session/Player/LivePlayer/LiveControls.tsx +++ b/frontend/app/components/Session/Player/LivePlayer/LiveControls.tsx @@ -94,7 +94,7 @@ function Controls(props: any) { return (
- + {session.liveOnly ? null : } {!noControls ?
diff --git a/frontend/app/player/web/managers/DOM/DOMManager.ts b/frontend/app/player/web/managers/DOM/DOMManager.ts index 9cd110d31..e6572567c 100644 --- a/frontend/app/player/web/managers/DOM/DOMManager.ts +++ b/frontend/app/player/web/managers/DOM/DOMManager.ts @@ -118,7 +118,8 @@ export default class DOMManager extends ListWalker { return this.vElements.get(id) || this.vTexts.get(id) } - private insertNode({ parentID, id, index }: { parentID: number, id: number, index: number }): void { + private insertNode(msg: { parentID: number, id: number, index: number }): void { + const { parentID, id, index } = msg const child = this.vElements.get(id) || this.vTexts.get(id) if (!child) { logger.error("Insert error. Node not found", id); @@ -126,7 +127,7 @@ export default class DOMManager extends ListWalker { } const parent = this.vElements.get(parentID) || this.olVRoots.get(parentID) if (!parent) { - logger.error(`${id} Insert error. Parent vNode ${parentID} not found`, this.vElements, this.olVRoots); + logger.error(`${id} Insert error. Parent vNode ${parentID} not found`, msg, this.vElements, this.olVRoots); return; } diff --git a/frontend/app/types/session/session.ts b/frontend/app/types/session/session.ts index ae55fb13d..8f7ee7100 100644 --- a/frontend/app/types/session/session.ts +++ b/frontend/app/types/session/session.ts @@ -226,6 +226,7 @@ export default class Session { fileKey: ISession['fileKey']; durationSeconds: number; + liveOnly: boolean; constructor(plainSession?: ISession) { const sessionData = plainSession || (emptyValues as unknown as ISession); @@ -346,6 +347,7 @@ export default class Session { uxtVideo: uxtVideo[0], durationMs: session.duration, audio: session.audio, + liveOnly: true, }); } diff --git a/tracker/tracker/CHANGELOG.md b/tracker/tracker/CHANGELOG.md index d881fb5fb..719066509 100644 --- a/tracker/tracker/CHANGELOG.md +++ b/tracker/tracker/CHANGELOG.md @@ -1,3 +1,7 @@ +# 13.0.0 + +- `assistOnly` flag for tracker options (EE only feature) + # 12.0.12 - fix for potential redux plugin issues after .11 ... diff --git a/tracker/tracker/package.json b/tracker/tracker/package.json index 0aec63f80..5ee44612d 100644 --- a/tracker/tracker/package.json +++ b/tracker/tracker/package.json @@ -1,7 +1,7 @@ { "name": "@openreplay/tracker", "description": "The OpenReplay tracker main package", - "version": "12.0.13-0", + "version": "12.0.13-2", "keywords": [ "logging", "replay" diff --git a/tracker/tracker/src/main/app/index.ts b/tracker/tracker/src/main/app/index.ts index 6549f9acc..9f7f18713 100644 --- a/tracker/tracker/src/main/app/index.ts +++ b/tracker/tracker/src/main/app/index.ts @@ -52,6 +52,7 @@ export interface StartOptions { metadata?: Record forceNew?: boolean sessionHash?: string + assistOnly?: boolean } interface OnStartInfo { @@ -183,6 +184,7 @@ export default class App { private conditionsManager: ConditionsManager | null = null public featureFlags: FeatureFlags private tagWatcher: TagWatcher + private socketMode = false constructor( projectKey: string, @@ -215,6 +217,7 @@ export default class App { assistSocketHost: '', fixedCanvasScaling: false, disableCanvas: false, + assistOnly: false, }, options, ) @@ -410,6 +413,13 @@ export default class App { * every ~30ms * */ private _nCommit(): void { + if (this.socketMode) { + this.messages.unshift(TabData(this.session.getTabId())) + this.messages.unshift(Timestamp(this.timestamp())) + this.commitCallbacks.forEach((cb) => cb(this.messages)) + this.messages.length = 0 + return + } if (this.worker !== undefined && this.messages.length) { try { requestIdleCb(() => { @@ -969,6 +979,7 @@ export default class App { jsHeapSizeLimit, timezone: getTimezone(), condition: conditionName, + assistOnly: startOpts.assistOnly ?? this.socketMode, }), }) .then((r) => { @@ -1013,6 +1024,7 @@ export default class App { canvasEnabled, canvasQuality, canvasFPS, + assistOnly: socketOnly, } = r if ( typeof token !== 'string' || @@ -1042,11 +1054,16 @@ export default class App { projectID, }) - this.worker.postMessage({ - type: 'auth', - token, - beaconSizeLimit, - }) + if (socketOnly) { + this.socketMode = true + this.worker.postMessage('stop') + } else { + this.worker.postMessage({ + type: 'auth', + token, + beaconSizeLimit, + }) + } if (!isNewSession && token === sessionToken) { this.debug.log('continuing session on new tab', this.session.getTabId())