Handle fetch and parse errors

This commit is contained in:
Piotr Rogowski 2021-04-08 13:28:33 +02:00
parent d7d5eba213
commit 895c457a38
No known key found for this signature in database
GPG Key ID: F40F61D5587F5673
2 changed files with 58 additions and 41 deletions

View File

@ -61,6 +61,8 @@ const Log = ({ ui, config }: { ui: UIState, config: Config }) => {
const [fileSize, setFileSize] = useState<string>();
const [parseElapsed, setParseElapsed] = useState<string>();
const [samplesCount, setSamplesCount] = useState();
const [fetchError, setFetchError] = useState<Error>();
const [parseError, setParseError] = useState<Error>();
const [step, setStep] = useState(0);
const contentRef = useRef<HTMLDivElement | null>(null);
const margin = 30;
@ -92,10 +94,12 @@ const Log = ({ ui, config }: { ui: UIState, config: Config }) => {
const controller = new AbortController();
const { signal } = controller;
const loadData = async () => {
try {
const raw = await loadLogs((percent, total) => {
setProgress(percent);
setFileSize(formatBytes(total));
}, signal);
setFileSize(formatBytes(raw.byteLength));
worker.postMessage(raw);
@ -116,10 +120,16 @@ const Log = ({ ui, config }: { ui: UIState, config: Config }) => {
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 }) => {
<Progress
type="circle"
percent={progress}
status={(fetchError || parseError) && 'exception'}
width={170}
/>
<Divider />
<Steps current={step} direction={lg ? 'horizontal' : 'vertical'}>
<Step
title="Downloading"
description="From the closest server"
subTitle={fileSize}
description={fetchError ? fetchError!.message : 'Edge location: FRA53-C1'}
status={fetchError && 'error'}
/>
<Step
title="Decoding"
description="Reading ones and zeros"
description={parseError ? parseError!.message : 'Reading ones and zeros'}
subTitle={parseElapsed}
status={parseError && 'error'}
/>
<Step
title="Rendering"

View File

@ -8,6 +8,7 @@ const ctx: Worker = self as any;
ctx.addEventListener('message', ({ data }: { data: ArrayBuffer }) => {
const t0 = performance.now();
try {
const result = new Parser(data).parse((progress) => {
ctx.postMessage({
type: 'progress',
@ -21,4 +22,7 @@ ctx.addEventListener('message', ({ data }: { data: ArrayBuffer }) => {
records: result.records.length,
});
ctx.postMessage({ type: 'result', result });
} catch (error) {
ctx.postMessage({ type: 'error', error });
}
});