From d71f33f49d7824e79b9a7fad03fbe08f0c787106 Mon Sep 17 00:00:00 2001 From: Dave Falke Date: Mon, 2 Dec 2024 14:04:03 -0500 Subject: [PATCH] Multi blast job error (#1289) * Add api method to get failed job error message * Display failed job error message, if available --- .../src/lib/components/BlastJobError.tsx | 57 +++++++++++++++++++ .../lib/components/BlastWorkspaceResult.tsx | 19 +------ .../libs/multi-blast/src/lib/utils/api.ts | 8 +++ 3 files changed, 67 insertions(+), 17 deletions(-) create mode 100644 packages/libs/multi-blast/src/lib/components/BlastJobError.tsx diff --git a/packages/libs/multi-blast/src/lib/components/BlastJobError.tsx b/packages/libs/multi-blast/src/lib/components/BlastJobError.tsx new file mode 100644 index 0000000000..198ff2239f --- /dev/null +++ b/packages/libs/multi-blast/src/lib/components/BlastJobError.tsx @@ -0,0 +1,57 @@ +import React from 'react'; + +import { + Error as ErrorPage, + Link, + Loading, +} from '@veupathdb/wdk-client/lib/Components'; +import { LongJobResponse } from '../utils/ServiceTypes'; +import { useBlastApi } from '../hooks/api'; +import { usePromise } from '@veupathdb/wdk-client/lib/Hooks/PromiseHook'; +import Banner from '@veupathdb/coreui/lib/components/banners/Banner'; + +interface Props { + job: LongJobResponse; +} + +export function BlastJobError(props: Props) { + const { job } = props; + const blastApi = useBlastApi(); + const jobErrorResult = usePromise(() => { + return blastApi.fetchJobError(job.id); + }, [blastApi, job]); + + if (jobErrorResult.loading) { + return ; + } + + return ( + +
+ {jobErrorResult.value && ( + + )} +

+ Your job did not run successfully. Please{' '} + + contact us + {' '} + for support. +

+
+
+ ); +} diff --git a/packages/libs/multi-blast/src/lib/components/BlastWorkspaceResult.tsx b/packages/libs/multi-blast/src/lib/components/BlastWorkspaceResult.tsx index 05f28e52ac..2667cf8bd9 100644 --- a/packages/libs/multi-blast/src/lib/components/BlastWorkspaceResult.tsx +++ b/packages/libs/multi-blast/src/lib/components/BlastWorkspaceResult.tsx @@ -42,6 +42,7 @@ import { ResultContainer } from './ResultContainer'; import './BlastWorkspaceResult.scss'; import { DiamondResultContainer } from './DiamondResultContainer'; +import { BlastJobError } from './BlastJobError'; interface Props { jobId: string; @@ -82,23 +83,7 @@ export function BlastWorkspaceResult(props: Props) { ) : jobResult.value?.status === 'error' ? ( ) : jobResult.value?.status === 'queueing-error' ? ( - -
- Your job did not run successfully. Please{' '} - - contact us - {' '} - for support. -
-
+ ) : queryResult.value?.status === 'error' ? ( ) : jobResult.value.job.config.tool.startsWith('diamond-') ? ( diff --git a/packages/libs/multi-blast/src/lib/utils/api.ts b/packages/libs/multi-blast/src/lib/utils/api.ts index 6ef4b10362..845fec62ac 100644 --- a/packages/libs/multi-blast/src/lib/utils/api.ts +++ b/packages/libs/multi-blast/src/lib/utils/api.ts @@ -175,6 +175,14 @@ export class BlastApi extends FetchClientWithCredentials { }); } + fetchJobError(jobId: string) { + return this.fetch({ + path: `${JOBS_PATH}/${jobId}/error`, + method: 'GET', + transformResponse: ioTransformer(string), + }); + } + rerunJob(jobId: string) { return this.taggedFetch({ path: `${JOBS_PATH}/${jobId}`,