Add types for parser worker

This commit is contained in:
Piotr Rogowski 2022-10-20 13:03:46 +02:00
parent c7dbc7d382
commit 598f77f73f
No known key found for this signature in database
GPG Key ID: 4A842D702D9C6F8F
2 changed files with 22 additions and 11 deletions

View File

@ -63,6 +63,7 @@ import useServerStorage from '../hooks/useServerStorage';
import { Routes } from '../routes';
import { removeFilenameSuffix } from '../pocketbase';
import { isAbortedRequest } from '../utils/error';
import { WorkerOutput } from '../workers/mlgParser';
const { Content } = Layout;
const { Step } = Steps;
@ -96,7 +97,7 @@ const Logs = ({
const [progress, setProgress] = useState(0);
const [fileSize, setFileSize] = useState<string>();
const [parseElapsed, setParseElapsed] = useState<string>();
const [samplesCount, setSamplesCount] = useState();
const [samplesCount, setSamplesCount] = useState<number>();
const [fetchError, setFetchError] = useState<Error>();
const [parseError, setParseError] = useState<Error>();
const [step, setStep] = useState(0);
@ -197,26 +198,26 @@ const Logs = ({
worker.postMessage(raw);
worker.onmessage = ({ data }) => {
worker.onmessage = ({ data }: { data: WorkerOutput }) => {
switch (data.type) {
case 'progress':
setStep(1);
setProgress(data.progress);
setParseElapsed(msToTime(data.elapsed));
setProgress(data.progress!);
setParseElapsed(msToTime(data.elapsed!));
break;
case 'result':
setLogs(data.result);
store.dispatch({
type: 'logs/load', payload: {
fileName: logFileName,
logs: data.result.records,
logs: data.result!.records,
},
});
break;
case 'metrics':
console.info(`Log parsed in ${data.elapsed}ms`);
setParseElapsed(msToTime(data.elapsed));
setSamplesCount(data.records);
setParseElapsed(msToTime(data.elapsed!));
setSamplesCount(data.records!);
setStep(2);
break;
case 'error':

View File

@ -1,11 +1,21 @@
/* eslint-disable no-bitwise */
import { Parser } from 'mlg-converter';
import { Result } from 'mlg-converter/dist/types';
import Pako from 'pako';
// eslint-disable-next-line no-restricted-globals
const ctx: Worker = self as any;
export interface WorkerOutput {
type: 'progress' | 'metrics' | 'result' | 'error' ;
progress?: number;
result?: Result;
error?: Error;
elapsed?: number;
records?: number;
}
ctx.addEventListener('message', ({ data }: { data: ArrayBuffer }) => {
try {
const t0 = performance.now();
@ -14,16 +24,16 @@ ctx.addEventListener('message', ({ data }: { data: ArrayBuffer }) => {
type: 'progress',
progress,
elapsed: ~~(performance.now() - t0),
});
} as WorkerOutput);
});
ctx.postMessage({
type: 'metrics',
elapsed: ~~(performance.now() - t0),
records: result.records.length,
});
ctx.postMessage({ type: 'result', result });
} as WorkerOutput);
ctx.postMessage({ type: 'result', result } as WorkerOutput);
} catch (error) {
ctx.postMessage({ type: 'error', error });
ctx.postMessage({ type: 'error', error } as WorkerOutput);
throw error;
}
});