From 895c457a38348eea45e5ae40669a43b9759e049d Mon Sep 17 00:00:00 2001 From: Piotr Rogowski Date: Thu, 8 Apr 2021 13:28:33 +0200 Subject: [PATCH] Handle fetch and parse errors --- src/components/Log.tsx | 71 +++++++++++++++++++-------------- src/workers/mlgParser.worker.ts | 28 +++++++------ 2 files changed, 58 insertions(+), 41 deletions(-) diff --git a/src/components/Log.tsx b/src/components/Log.tsx index 4476582..7965292 100644 --- a/src/components/Log.tsx +++ b/src/components/Log.tsx @@ -61,6 +61,8 @@ const Log = ({ ui, config }: { ui: UIState, config: Config }) => { const [fileSize, setFileSize] = useState(); const [parseElapsed, setParseElapsed] = useState(); const [samplesCount, setSamplesCount] = useState(); + const [fetchError, setFetchError] = useState(); + const [parseError, setParseError] = useState(); const [step, setStep] = useState(0); const contentRef = useRef(null); const margin = 30; @@ -92,34 +94,42 @@ const Log = ({ ui, config }: { ui: UIState, config: Config }) => { const controller = new AbortController(); const { signal } = controller; const loadData = async () => { - const raw = await loadLogs((percent, total) => { - setProgress(percent); - setFileSize(formatBytes(total)); - }, signal); - setFileSize(formatBytes(raw.byteLength)); + try { + const raw = await loadLogs((percent, total) => { + setProgress(percent); + setFileSize(formatBytes(total)); + }, signal); - worker.postMessage(raw); - worker.onmessage = ({ data }) => { - switch (data.type) { - case 'progress': - setStep(1); - setProgress(data.progress); - setParseElapsed(msToTime(data.elapsed)); - break; - case 'result': - setLogs(data.result); - setFields(data.result.fields); - break; - case 'metrics': - console.log(`Log parsed in ${data.elapsed}ms`); - setParseElapsed(msToTime(data.elapsed)); - setSamplesCount(data.records); - setStep(2); - break; - default: - break; - } - }; + setFileSize(formatBytes(raw.byteLength)); + + worker.postMessage(raw); + worker.onmessage = ({ data }) => { + switch (data.type) { + case 'progress': + setStep(1); + setProgress(data.progress); + setParseElapsed(msToTime(data.elapsed)); + break; + case 'result': + setLogs(data.result); + setFields(data.result.fields); + break; + case 'metrics': + console.log(`Log parsed in ${data.elapsed}ms`); + setParseElapsed(msToTime(data.elapsed)); + setSamplesCount(data.records); + setStep(2); + break; + case 'error': + setParseError(data.error); + break; + default: + break; + } + }; + } catch (error) { + setFetchError(error); + } }; loadData(); @@ -176,19 +186,22 @@ const Log = ({ ui, config }: { ui: UIState, config: Config }) => { { const t0 = performance.now(); - const result = new Parser(data).parse((progress) => { - ctx.postMessage({ - type: 'progress', - progress, - elapsed: ~~(performance.now() - t0), + try { + const result = new Parser(data).parse((progress) => { + ctx.postMessage({ + type: 'progress', + progress, + elapsed: ~~(performance.now() - t0), + }); }); - }); - ctx.postMessage({ - type: 'metrics', - elapsed: ~~(performance.now() - t0), - records: result.records.length, - }); - ctx.postMessage({ type: 'result', result }); + ctx.postMessage({ + type: 'metrics', + elapsed: ~~(performance.now() - t0), + records: result.records.length, + }); + ctx.postMessage({ type: 'result', result }); + } catch (error) { + ctx.postMessage({ type: 'error', error }); + } });