mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-11-03 12:53:35 +08:00
47 lines
1.3 KiB
TypeScript
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,
|
|
});
|
|
}
|