fix ui: speed up mob processing, potentially fix worker restart on unauth

This commit is contained in:
nick-delirium 2024-04-25 16:54:13 +02:00
parent 2ca84c397f
commit ef28bfc8f9
No known key found for this signature in database
GPG key ID: 93ABD695DF5FDBA0
6 changed files with 38 additions and 20 deletions

View file

@ -199,7 +199,9 @@ export default class MessageLoader {
* if EFS fails, then session doesn't exist
* */
async loadFiles() {
this.messageManager.startLoading();
if (!this.preloaded) {
this.messageManager.startLoading();
}
try {
await this.loadMobs();

View file

@ -1,3 +1,7 @@
# 12.0.11
- better restart on unauth (new token assign for long sessions)
# 12.0.10
- improved logs for node binding errors, full nodelist clear before start, getSessionInfo method

View file

@ -1,7 +1,7 @@
{
"name": "@openreplay/tracker",
"description": "The OpenReplay tracker main package",
"version": "12.0.10-beta.0",
"version": "12.0.10-beta.1",
"keywords": [
"logging",
"replay"

View file

@ -41,7 +41,8 @@ type QEmpty = {
}
export type FromWorkerData =
| 'restart'
| 'a_stop'
| 'a_start'
| Failure
| 'not_init'
| { type: 'compress'; batch: Uint8Array }

View file

@ -262,8 +262,10 @@ export default class App {
this._debug('webworker_error', e)
}
this.worker.onmessage = ({ data }: MessageEvent<FromWorkerData>) => {
if (data === 'restart') {
// handling 401 auth restart (new token assignment)
if (data === 'a_stop') {
this.stop(false)
} else if (data === 'a_start') {
void this.start({}, true)
} else if (data === 'not_init') {
this.debug.warn('OR WebWorker: writer not initialised. Restarting tracker')

View file

@ -49,28 +49,34 @@ function resetSender(): void {
}
}
function reset(): void {
workerStatus = WorkerStatus.Stopping
if (sendIntervalID !== null) {
clearInterval(sendIntervalID)
sendIntervalID = null
}
resetWriter()
resetSender()
setTimeout(() => {
workerStatus = WorkerStatus.NotActive
}, 100)
function reset(): Promise<any> {
return new Promise((res) => {
workerStatus = WorkerStatus.Stopping
if (sendIntervalID !== null) {
clearInterval(sendIntervalID)
sendIntervalID = null
}
resetWriter()
resetSender()
setTimeout(() => {
workerStatus = WorkerStatus.NotActive
res(null)
}, 100)
})
}
function initiateRestart(): void {
if (workerStatus === WorkerStatus.Stopped) return
postMessage('restart')
reset()
postMessage('a_stop')
// eslint-disable-next-line
reset().then(() => {
postMessage('a_start')
})
}
function initiateFailure(reason: string): void {
postMessage({ type: 'failure', reason })
reset()
void reset()
}
let sendIntervalID: ReturnType<typeof setInterval> | null = null
@ -84,8 +90,11 @@ self.onmessage = ({ data }: { data: ToWorkerData }): any => {
}
if (data === 'stop') {
finalize()
reset()
return (workerStatus = WorkerStatus.Stopped)
// eslint-disable-next-line
reset().then(() => {
workerStatus = WorkerStatus.Stopped
})
return
}
if (data === 'forceFlushBatch') {
finalize()