From 2a860d72b296b0ef1e46d1b5bef71672e113ec39 Mon Sep 17 00:00:00 2001 From: Christian Byrne Date: Sun, 16 Mar 2025 08:37:17 -0700 Subject: [PATCH] [Manager] Wrap manager requests with log wrapper (#3081) --- src/composables/useManagerQueue.ts | 4 ++ src/stores/comfyManagerStore.ts | 76 ++++++++++++++++++++---------- src/types/comfyManagerTypes.ts | 5 ++ 3 files changed, 61 insertions(+), 24 deletions(-) diff --git a/src/composables/useManagerQueue.ts b/src/composables/useManagerQueue.ts index efc8bd6e3..9d6a15cac 100644 --- a/src/composables/useManagerQueue.ts +++ b/src/composables/useManagerQueue.ts @@ -20,6 +20,9 @@ export const useManagerQueue = () => { const clientQueueLength = computed(() => clientQueueItems.value.length) const onCompletedQueue = ref<((() => void) | undefined)[]>([]) const onCompleteWaitingCount = ref(0) + const uncompletedCount = computed( + () => clientQueueLength.value + onCompleteWaitingCount.value + ) const serverQueueStatus = ref(ManagerWsQueueStatus.DONE) const isServerIdle = computed( @@ -93,6 +96,7 @@ export const useManagerQueue = () => { allTasksDone, statusMessage: readonly(serverQueueStatus), queueLength: clientQueueLength, + uncompletedCount, enqueueTask, clearQueue, diff --git a/src/stores/comfyManagerStore.ts b/src/stores/comfyManagerStore.ts index 22665fda8..65ab71584 100644 --- a/src/stores/comfyManagerStore.ts +++ b/src/stores/comfyManagerStore.ts @@ -4,12 +4,14 @@ import { ref, watch } from 'vue' import { useCachedRequest } from '@/composables/useCachedRequest' import { useManagerQueue } from '@/composables/useManagerQueue' +import { useServerLogs } from '@/composables/useServerLogs' import { useComfyManagerService } from '@/services/comfyManagerService' import { InstallPackParams, InstalledPacksResponse, ManagerPackInfo, ManagerPackInstalled, + TaskLog, UpdateAllPacksParams } from '@/types/comfyManagerTypes' @@ -23,8 +25,10 @@ export const useComfyManagerStore = defineStore('comfyManager', () => { const disabledPacksIds = ref>(new Set()) const installedPacksIds = ref>(new Set()) const isStale = ref(true) + const taskLogs = ref([]) - const { statusMessage, allTasksDone, enqueueTask } = useManagerQueue() + const { statusMessage, allTasksDone, enqueueTask, uncompletedCount } = + useManagerQueue() const setStale = () => { isStale.value = true @@ -107,12 +111,40 @@ export const useComfyManagerStore = defineStore('comfyManager', () => { whenever(isStale, refreshInstalledList, { immediate: true }) + const withLogs = (task: () => Promise, taskName: string) => { + const { startListening, stopListening, logs } = useServerLogs() + + const loggedTask = async () => { + taskLogs.value.push({ taskName, logs: logs.value }) + startListening() + return task() + } + + const onComplete = () => { + stopListening() + setStale() + } + + return { task: loggedTask, onComplete } + } + const installPack = useCachedRequest( async (params: InstallPackParams, signal?: AbortSignal) => { - enqueueTask({ - task: () => managerService.installPack(params, signal), - onComplete: setStale - }) + if (!params.id) return + + let actionDescription = 'Installing' + if (installedPacksIds.value.has(params.id)) { + const installedPack = installedPacks.value[params.id] + + if (installedPack && installedPack.ver !== params.selected_version) { + actionDescription = `Changing version from ${installedPack.ver} to ${params.selected_version}:` + } else { + actionDescription = 'Enabling' + } + } + + const task = () => managerService.installPack(params, signal) + enqueueTask(withLogs(task, `${actionDescription} ${params.id}`)) }, { maxSize: 1 } ) @@ -120,41 +152,34 @@ export const useComfyManagerStore = defineStore('comfyManager', () => { const uninstallPack = (params: ManagerPackInfo, signal?: AbortSignal) => { installPack.clear() installPack.cancel() - - enqueueTask({ - task: () => managerService.uninstallPack(params, signal), - onComplete: setStale - }) + const task = () => managerService.uninstallPack(params, signal) + enqueueTask(withLogs(task, `Uninstalling ${params.id}`)) } const updatePack = useCachedRequest( async (params: ManagerPackInfo, signal?: AbortSignal) => { - updateAllPacks.clear() updateAllPacks.cancel() - - enqueueTask({ - task: () => managerService.updatePack(params, signal), - onComplete: setStale - }) + const task = () => managerService.updatePack(params, signal) + enqueueTask(withLogs(task, `Updating ${params.id}`)) }, { maxSize: 1 } ) const updateAllPacks = useCachedRequest( async (params: UpdateAllPacksParams, signal?: AbortSignal) => { - enqueueTask({ - task: () => managerService.updateAllPacks(params, signal), - onComplete: setStale - }) + const task = () => managerService.updateAllPacks(params, signal) + enqueueTask(withLogs(task, 'Updating all packs')) }, { maxSize: 1 } ) const disablePack = (params: ManagerPackInfo, signal?: AbortSignal) => { - enqueueTask({ - task: () => managerService.disablePack(params, signal), - onComplete: setStale - }) + const task = () => managerService.disablePack(params, signal) + enqueueTask(withLogs(task, `Disabling ${params.id}`)) + } + + const clearLogs = () => { + taskLogs.value = [] } return { @@ -163,6 +188,9 @@ export const useComfyManagerStore = defineStore('comfyManager', () => { error: managerService.error, statusMessage, allTasksDone, + uncompletedCount, + taskLogs, + clearLogs, // Installed packs state installedPacks, diff --git a/src/types/comfyManagerTypes.ts b/src/types/comfyManagerTypes.ts index 03e3a075e..2fcb252d4 100644 --- a/src/types/comfyManagerTypes.ts +++ b/src/types/comfyManagerTypes.ts @@ -16,6 +16,11 @@ export interface SearchOption { label: string } +export type TaskLog = { + taskName: string + logs: string[] +} + enum ManagerPackState { /** Pack is installed and enabled */ INSTALLED = 'installed',