123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- import { checkTaskStatus as fetchCheckTaskStatus } from '@/service/plugins'
- import type { PluginStatus } from '../../types'
- import { TaskStatus } from '../../types'
- import { sleep } from '@/utils'
- const INTERVAL = 10 * 1000 // 10 seconds
- type Params = {
- taskId: string
- pluginUniqueIdentifier: string
- }
- function checkTaskStatus() {
- let nextStatus = TaskStatus.running
- let isStop = false
- const doCheckStatus = async ({
- taskId,
- pluginUniqueIdentifier,
- }: Params) => {
- if (isStop) {
- return {
- status: TaskStatus.success,
- }
- }
- const res = await fetchCheckTaskStatus(taskId)
- const { plugins } = res.task
- const plugin = plugins.find((p: PluginStatus) => p.plugin_unique_identifier === pluginUniqueIdentifier)
- if (!plugin) {
- nextStatus = TaskStatus.failed
- return {
- status: TaskStatus.failed,
- error: 'Plugin package not found',
- }
- }
- nextStatus = plugin.status
- if (nextStatus === TaskStatus.running) {
- await sleep(INTERVAL)
- return await doCheckStatus({
- taskId,
- pluginUniqueIdentifier,
- })
- }
- if (nextStatus === TaskStatus.failed) {
- return {
- status: TaskStatus.failed,
- error: plugin.message,
- }
- }
- return ({
- status: TaskStatus.success,
- })
- }
- return {
- check: doCheckStatus,
- stop: () => {
- isStop = true
- },
- }
- }
- export default checkTaskStatus
|