import { checkComfyHttp, fetchQueue } from '~/server/utils/comfyLifecycle' import { comfyConfigured } from '~/server/utils/comfy' import { imageComfyConfigured, getBeastImageHost } from '~/server/utils/imageComfy' import { checkImageComfyHttp, fetchQueueAt } from '~/server/utils/imageComfyLifecycle' export default defineEventHandler(async () => { const videoConfigured = comfyConfigured() const imageConfigured = imageComfyConfigured() const beastHost = getBeastImageHost() const [comfy, queue, beast, beastQueue] = await Promise.all([ videoConfigured ? checkComfyHttp().catch(() => ({ ok: false, host: '', stats: null })) : Promise.resolve({ ok: false, host: '', stats: null }), videoConfigured ? fetchQueue() : Promise.resolve({ running: 0, pending: 0 }), beastHost ? checkImageComfyHttp(2500, beastHost).catch(() => ({ ok: false, host: beastHost, stats: null })) : Promise.resolve({ ok: false, host: beastHost, stats: null }), beastHost ? fetchQueueAt(beastHost) : Promise.resolve({ running: 0, pending: 0 }) ]) const busy = Boolean(comfy.ok && queue.running > 0) const beastBusy = Boolean(beast.ok && beastQueue.running > 0) const imageOk = Boolean(beast.ok || comfy.ok) const imageBusy = Boolean(imageConfigured && (beastBusy || busy)) const preferredHost = beastHost || comfy.host || '' return { ok: true, service: useRuntimeConfig().public.instanceName || 'aigen', comfy: { ok: comfy.ok, busy, host: comfy.host || '', queueRunning: queue.running, queuePending: queue.pending, stats: comfy.ok ? comfy.stats : undefined }, imageComfy: { configured: imageConfigured, ok: imageOk, busy: imageBusy, host: preferredHost, box: imageOk ? 'beast' : '', queueRunning: (beastQueue.running || queue.running) || 0, queuePending: (beastQueue.pending || queue.pending) || 0, beast: { label: 'Beast', configured: Boolean(beastHost), ok: Boolean(beast.ok || comfy.ok), busy: beastBusy || busy, host: preferredHost }, sidecar: { label: 'Sidecar', configured: false, ok: false, busy: false, host: '' } } } })