mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-04-25 00:39:49 +00:00
[Manager] Fix: failed tasks logs not correctly partitioned in UI (#4242)
This commit is contained in:
@@ -7,8 +7,10 @@ import { components } from '@/types/generatedManagerTypes'
|
|||||||
|
|
||||||
const LOGS_MESSAGE_TYPE = 'logs'
|
const LOGS_MESSAGE_TYPE = 'logs'
|
||||||
const MANAGER_WS_TASK_DONE_NAME = 'cm-task-completed'
|
const MANAGER_WS_TASK_DONE_NAME = 'cm-task-completed'
|
||||||
|
const MANAGER_WS_TASK_STARTED_NAME = 'cm-task-started'
|
||||||
|
|
||||||
type ManagerWsTaskDoneMsg = components['schemas']['MessageTaskDone']
|
type ManagerWsTaskDoneMsg = components['schemas']['MessageTaskDone']
|
||||||
|
type ManagerWsTaskStartedMsg = components['schemas']['MessageTaskStarted']
|
||||||
|
|
||||||
interface UseServerLogsOptions {
|
interface UseServerLogsOptions {
|
||||||
ui_id: string
|
ui_id: string
|
||||||
@@ -23,8 +25,10 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
|
|||||||
} = options
|
} = options
|
||||||
|
|
||||||
const logs = ref<string[]>([])
|
const logs = ref<string[]>([])
|
||||||
|
const isTaskStarted = ref(false)
|
||||||
let stopLogs: ReturnType<typeof useEventListener> | null = null
|
let stopLogs: ReturnType<typeof useEventListener> | null = null
|
||||||
let stopTaskDone: ReturnType<typeof useEventListener> | null = null
|
let stopTaskDone: ReturnType<typeof useEventListener> | null = null
|
||||||
|
let stopTaskStarted: ReturnType<typeof useEventListener> | null = null
|
||||||
|
|
||||||
const isValidLogEvent = (event: CustomEvent<LogsWsMessage>) =>
|
const isValidLogEvent = (event: CustomEvent<LogsWsMessage>) =>
|
||||||
event?.type === LOGS_MESSAGE_TYPE && event.detail?.entries?.length > 0
|
event?.type === LOGS_MESSAGE_TYPE && event.detail?.entries?.length > 0
|
||||||
@@ -33,6 +37,9 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
|
|||||||
event.detail.entries.map((e) => e.m).filter(messageFilter)
|
event.detail.entries.map((e) => e.m).filter(messageFilter)
|
||||||
|
|
||||||
const handleLogMessage = (event: CustomEvent<LogsWsMessage>) => {
|
const handleLogMessage = (event: CustomEvent<LogsWsMessage>) => {
|
||||||
|
// Only capture logs if this task has started
|
||||||
|
if (!isTaskStarted.value) return
|
||||||
|
|
||||||
if (isValidLogEvent(event)) {
|
if (isValidLogEvent(event)) {
|
||||||
const messages = parseLogMessage(event)
|
const messages = parseLogMessage(event)
|
||||||
if (messages.length > 0) {
|
if (messages.length > 0) {
|
||||||
@@ -41,11 +48,24 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleTaskStarted = (event: CustomEvent<ManagerWsTaskStartedMsg>) => {
|
||||||
|
if (event?.type === MANAGER_WS_TASK_STARTED_NAME) {
|
||||||
|
// Check if this is our task starting
|
||||||
|
const isOurTask = event.detail.ui_id === options.ui_id
|
||||||
|
if (isOurTask) {
|
||||||
|
isTaskStarted.value = true
|
||||||
|
void stopTaskStarted?.()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const handleTaskDone = (event: CustomEvent<ManagerWsTaskDoneMsg>) => {
|
const handleTaskDone = (event: CustomEvent<ManagerWsTaskDoneMsg>) => {
|
||||||
if (event?.type === MANAGER_WS_TASK_DONE_NAME) {
|
if (event?.type === MANAGER_WS_TASK_DONE_NAME) {
|
||||||
const { state } = event.detail
|
const { state } = event.detail
|
||||||
// Check if our task is now in the history (completed)
|
// Check if our task is now in the history (completed)
|
||||||
if (state.history[options.ui_id]) {
|
const isOurTaskDone = state.history[options.ui_id]
|
||||||
|
if (isOurTaskDone) {
|
||||||
|
isTaskStarted.value = false
|
||||||
void stopListening()
|
void stopListening()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,6 +74,11 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
|
|||||||
const startListening = async () => {
|
const startListening = async () => {
|
||||||
await api.subscribeLogs(true)
|
await api.subscribeLogs(true)
|
||||||
stopLogs = useEventListener(api, LOGS_MESSAGE_TYPE, handleLogMessage)
|
stopLogs = useEventListener(api, LOGS_MESSAGE_TYPE, handleLogMessage)
|
||||||
|
stopTaskStarted = useEventListener(
|
||||||
|
api,
|
||||||
|
MANAGER_WS_TASK_STARTED_NAME,
|
||||||
|
handleTaskStarted
|
||||||
|
)
|
||||||
stopTaskDone = useEventListener(
|
stopTaskDone = useEventListener(
|
||||||
api,
|
api,
|
||||||
MANAGER_WS_TASK_DONE_NAME,
|
MANAGER_WS_TASK_DONE_NAME,
|
||||||
@@ -62,10 +87,11 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const stopListening = async () => {
|
const stopListening = async () => {
|
||||||
console.log('stopListening')
|
|
||||||
stopLogs?.()
|
stopLogs?.()
|
||||||
|
stopTaskStarted?.()
|
||||||
stopTaskDone?.()
|
stopTaskDone?.()
|
||||||
stopLogs = null
|
stopLogs = null
|
||||||
|
stopTaskStarted = null
|
||||||
stopTaskDone = null
|
stopTaskDone = null
|
||||||
await api.subscribeLogs(false)
|
await api.subscribeLogs(false)
|
||||||
}
|
}
|
||||||
@@ -77,6 +103,7 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
|
|||||||
const cleanup = async () => {
|
const cleanup = async () => {
|
||||||
await stopListening()
|
await stopListening()
|
||||||
logs.value = []
|
logs.value = []
|
||||||
|
isTaskStarted.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -90,7 +90,6 @@ export const useComfyManagerStore = defineStore('comfyManager', () => {
|
|||||||
() => {
|
() => {
|
||||||
partitionTasks()
|
partitionTasks()
|
||||||
partitionTaskLogs()
|
partitionTaskLogs()
|
||||||
console.log('installed pack ids', installedPacksIds.value)
|
|
||||||
},
|
},
|
||||||
{ deep: true }
|
{ deep: true }
|
||||||
)
|
)
|
||||||
@@ -154,26 +153,12 @@ export const useComfyManagerStore = defineStore('comfyManager', () => {
|
|||||||
|
|
||||||
const updateInstalledIds = (packs: ManagerPackInstalled[]) => {
|
const updateInstalledIds = (packs: ManagerPackInstalled[]) => {
|
||||||
const newIds = packsToIdSet(packs)
|
const newIds = packsToIdSet(packs)
|
||||||
console.log('updateInstalledIds: creating set with:', Array.from(newIds))
|
|
||||||
installedPacksIds.value = newIds
|
installedPacksIds.value = newIds
|
||||||
console.log(
|
|
||||||
'updateInstalledIds: final installedPacksIds:',
|
|
||||||
Array.from(installedPacksIds.value)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const onPacksChanged = () => {
|
const onPacksChanged = () => {
|
||||||
const packs = Object.values(installedPacks.value)
|
const packs = Object.values(installedPacks.value)
|
||||||
console.log(
|
|
||||||
'onPacksChanged called with packs:',
|
|
||||||
packs.map((p) => ({
|
|
||||||
key: Object.keys(installedPacks.value).find(
|
|
||||||
(k) => installedPacks.value[k] === p
|
|
||||||
),
|
|
||||||
cnr_id: p.cnr_id,
|
|
||||||
aux_id: p.aux_id
|
|
||||||
}))
|
|
||||||
)
|
|
||||||
updateDisabledIds(packs)
|
updateDisabledIds(packs)
|
||||||
updateInstalledIds(packs)
|
updateInstalledIds(packs)
|
||||||
}
|
}
|
||||||
@@ -337,7 +322,7 @@ export const useComfyManagerStore = defineStore('comfyManager', () => {
|
|||||||
failedTasksIds,
|
failedTasksIds,
|
||||||
succeededTasksLogs,
|
succeededTasksLogs,
|
||||||
failedTasksLogs,
|
failedTasksLogs,
|
||||||
managerQueue, // Expose full queue composable for advanced usage
|
managerQueue,
|
||||||
|
|
||||||
// Pack actions
|
// Pack actions
|
||||||
installPack,
|
installPack,
|
||||||
|
|||||||
Reference in New Issue
Block a user