@@ -7,8 +7,10 @@ import { components } from '@/types/generatedManagerTypes'
7
7
8
8
const LOGS_MESSAGE_TYPE = 'logs'
9
9
const MANAGER_WS_TASK_DONE_NAME = 'cm-task-completed'
10
+ const MANAGER_WS_TASK_STARTED_NAME = 'cm-task-started'
10
11
11
12
type ManagerWsTaskDoneMsg = components [ 'schemas' ] [ 'MessageTaskDone' ]
13
+ type ManagerWsTaskStartedMsg = components [ 'schemas' ] [ 'MessageTaskStarted' ]
12
14
13
15
interface UseServerLogsOptions {
14
16
ui_id : string
@@ -23,8 +25,10 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
23
25
} = options
24
26
25
27
const logs = ref < string [ ] > ( [ ] )
28
+ const isTaskStarted = ref ( false )
26
29
let stopLogs : ReturnType < typeof useEventListener > | null = null
27
30
let stopTaskDone : ReturnType < typeof useEventListener > | null = null
31
+ let stopTaskStarted : ReturnType < typeof useEventListener > | null = null
28
32
29
33
const isValidLogEvent = ( event : CustomEvent < LogsWsMessage > ) =>
30
34
event ?. type === LOGS_MESSAGE_TYPE && event . detail ?. entries ?. length > 0
@@ -33,6 +37,9 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
33
37
event . detail . entries . map ( ( e ) => e . m ) . filter ( messageFilter )
34
38
35
39
const handleLogMessage = ( event : CustomEvent < LogsWsMessage > ) => {
40
+ // Only capture logs if this task has started
41
+ if ( ! isTaskStarted . value ) return
42
+
36
43
if ( isValidLogEvent ( event ) ) {
37
44
const messages = parseLogMessage ( event )
38
45
if ( messages . length > 0 ) {
@@ -41,11 +48,24 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
41
48
}
42
49
}
43
50
51
+ const handleTaskStarted = ( event : CustomEvent < ManagerWsTaskStartedMsg > ) => {
52
+ if ( event ?. type === MANAGER_WS_TASK_STARTED_NAME ) {
53
+ // Check if this is our task starting
54
+ const isOurTask = event . detail . ui_id === options . ui_id
55
+ if ( isOurTask ) {
56
+ isTaskStarted . value = true
57
+ void stopTaskStarted ?.( )
58
+ }
59
+ }
60
+ }
61
+
44
62
const handleTaskDone = ( event : CustomEvent < ManagerWsTaskDoneMsg > ) => {
45
63
if ( event ?. type === MANAGER_WS_TASK_DONE_NAME ) {
46
64
const { state } = event . detail
47
65
// Check if our task is now in the history (completed)
48
- if ( state . history [ options . ui_id ] ) {
66
+ const isOurTaskDone = state . history [ options . ui_id ]
67
+ if ( isOurTaskDone ) {
68
+ isTaskStarted . value = false
49
69
void stopListening ( )
50
70
}
51
71
}
@@ -54,6 +74,11 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
54
74
const startListening = async ( ) => {
55
75
await api . subscribeLogs ( true )
56
76
stopLogs = useEventListener ( api , LOGS_MESSAGE_TYPE , handleLogMessage )
77
+ stopTaskStarted = useEventListener (
78
+ api ,
79
+ MANAGER_WS_TASK_STARTED_NAME ,
80
+ handleTaskStarted
81
+ )
57
82
stopTaskDone = useEventListener (
58
83
api ,
59
84
MANAGER_WS_TASK_DONE_NAME ,
@@ -62,10 +87,11 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
62
87
}
63
88
64
89
const stopListening = async ( ) => {
65
- console . log ( 'stopListening' )
66
90
stopLogs ?.( )
91
+ stopTaskStarted ?.( )
67
92
stopTaskDone ?.( )
68
93
stopLogs = null
94
+ stopTaskStarted = null
69
95
stopTaskDone = null
70
96
await api . subscribeLogs ( false )
71
97
}
@@ -77,6 +103,7 @@ export const useServerLogs = (options: UseServerLogsOptions) => {
77
103
const cleanup = async ( ) => {
78
104
await stopListening ( )
79
105
logs . value = [ ]
106
+ isTaskStarted . value = false
80
107
}
81
108
82
109
return {
0 commit comments