import { checkComfyHttp, fetchQueue } from '~/server/utils/comfyLifecycle' import { comfyConfigured } from '~/server/utils/comfy' import { imageComfyConfigured, getBeastImageHost, getSidecarImageHost, sameImageHost } 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 sidecarHost = getSidecarImageHost() const [comfy, queue, beast, beastQueue, sidecar, sidecarQueue] = 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 }), sidecarHost && (!beastHost || !sameImageHost(beastHost, sidecarHost)) ? checkImageComfyHttp(2500, sidecarHost).catch(() => ({ ok: false, host: sidecarHost, stats: null })) : Promise.resolve({ ok: false, host: sidecarHost, stats: null }), sidecarHost && (!beastHost || !sameImageHost(beastHost, sidecarHost)) ? fetchQueueAt(sidecarHost) : Promise.resolve({ running: 0, pending: 0 }) ]) const busy = Boolean(comfy.ok && queue.running > 0) const beastBusy = Boolean(beast.ok && beastQueue.running > 0) const sidecarBusy = Boolean(sidecar.ok && sidecarQueue.running > 0) const sidecarConfigured = Boolean(sidecarHost && (!beastHost || !sameImageHost(beastHost, sidecarHost))) const imageOk = Boolean(beast.ok || sidecar.ok) const imageBusy = Boolean(imageConfigured && ((beastBusy && (!sidecarConfigured || sidecarBusy || !sidecar.ok)) || (!beast.ok && sidecarBusy))) const preferredHost = beast.ok && !beastBusy ? beastHost : (sidecar.ok ? sidecarHost : beastHost) 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: beast.ok && !beastBusy ? 'beast' : (sidecar.ok ? 'sidecar' : (beast.ok ? 'beast' : '')), queueRunning: (beast.ok && !beastBusy ? beastQueue.running : sidecarQueue.running) || 0, queuePending: (beast.ok && !beastBusy ? beastQueue.pending : sidecarQueue.pending) || 0, beast: { label: 'Beast', configured: Boolean(beastHost), ok: Boolean(beast.ok), busy: beastBusy, host: beastHost || '' }, sidecar: { label: 'Sidecar', configured: sidecarConfigured, ok: Boolean(sidecar.ok), busy: sidecarBusy, host: sidecarHost || '' } } } })