Files
galaxy/client/src/composables/taskMonitor.ts
T

47 lines
1.3 KiB
TypeScript

import { GalaxyApi } from "@/api";
import { rethrowSimple } from "@/utils/simple-error";
import { useGenericMonitor } from "./genericTaskMonitor";
const SUCCESS_STATE = "SUCCESS";
const FAILURE_STATE = "FAILURE";
const DEFAULT_POLL_DELAY = 10000;
const DEFAULT_EXPIRATION_TIME = 1000 * 60 * 60 * 24; // 24 hours
/**
* Composable for waiting on Galaxy background tasks.
*/
export function useTaskMonitor() {
const fetchStatus = async (taskId: string) => {
const { data, error } = await GalaxyApi().GET("/api/tasks/{task_id}/state", {
params: { path: { task_id: taskId } },
});
if (error) {
rethrowSimple(error);
}
return data;
};
const fetchFailureReason = async (taskId: string) => {
const { data, error } = await GalaxyApi().GET("/api/tasks/{task_id}/result", {
params: { path: { task_id: taskId } },
});
if (error) {
rethrowSimple(error);
}
return data.result;
};
return useGenericMonitor({
fetchStatus,
completedCondition: (status?: string) => status === SUCCESS_STATE,
failedCondition: (status?: string) => status === FAILURE_STATE,
fetchFailureReason,
defaultPollDelay: DEFAULT_POLL_DELAY,
expirationTime: DEFAULT_EXPIRATION_TIME,
});
}