@@ -203,6 +203,10 @@ export type DebugSupportingLogs = {
203203 available : boolean
204204 path : string
205205 lines : DebugLogLine [ ]
206+ errorLines ?: DebugLogLine [ ]
207+ warnLines ?: DebugLogLine [ ]
208+ infoLines ?: DebugLogLine [ ]
209+ debugLines ?: DebugLogLine [ ]
206210}
207211
208212export type RuntimeDebugSnapshot = DebugRuntimeSnapshot & {
@@ -407,6 +411,30 @@ const RUNTIME_DEBUG_SNAPSHOT_QUERY = `
407411 raw
408412 timestampUnix
409413 }
414+ errorLines {
415+ level
416+ message
417+ raw
418+ timestampUnix
419+ }
420+ warnLines {
421+ level
422+ message
423+ raw
424+ timestampUnix
425+ }
426+ infoLines {
427+ level
428+ message
429+ raw
430+ timestampUnix
431+ }
432+ debugLines {
433+ level
434+ message
435+ raw
436+ timestampUnix
437+ }
410438 }
411439 }
412440 }
@@ -501,13 +529,18 @@ export async function fetchRuntimeDebugSnapshot(
501529 throw new Error ( 'Runtime debug snapshot response was empty.' )
502530 }
503531
532+ const supportingLogs = normalizeSupportingLogs ( debugSnapshot . supportingLogs )
533+
504534 return {
505535 ...runtimeSnapshot ,
506536 producerSpool : debugSnapshot . producerSpool ,
507537 repoState : debugSnapshot . repoState ,
508538 watcher : debugSnapshot . watcher ,
509- supportingLogs : debugSnapshot . supportingLogs ,
510- issues : deriveDebugIssues ( runtimeSnapshot , debugSnapshot ) ,
539+ supportingLogs,
540+ issues : deriveDebugIssues ( runtimeSnapshot , {
541+ ...debugSnapshot ,
542+ supportingLogs,
543+ } ) ,
511544 }
512545}
513546
@@ -577,6 +610,38 @@ export function filterDebugLogLines(
577610 } )
578611}
579612
613+ export function selectDebugLogLines (
614+ logs : DebugSupportingLogs ,
615+ levelFilter : DebugLogLevelFilter ,
616+ ) : DebugLogLine [ ] {
617+ if ( levelFilter === 'all' ) {
618+ return logs . lines
619+ }
620+
621+ const levelSpecificLines =
622+ levelFilter === 'error'
623+ ? logs . errorLines
624+ : levelFilter === 'warn'
625+ ? logs . warnLines
626+ : levelFilter === 'info'
627+ ? logs . infoLines
628+ : logs . debugLines
629+
630+ return levelSpecificLines ?? filterDebugLogLines ( logs . lines , levelFilter )
631+ }
632+
633+ function normalizeSupportingLogs (
634+ logs : DebugSupportingLogs ,
635+ ) : DebugSupportingLogs {
636+ return {
637+ ...logs ,
638+ errorLines : logs . errorLines ?? filterDebugLogLines ( logs . lines , 'error' ) ,
639+ warnLines : logs . warnLines ?? filterDebugLogLines ( logs . lines , 'warn' ) ,
640+ infoLines : logs . infoLines ?? filterDebugLogLines ( logs . lines , 'info' ) ,
641+ debugLines : logs . debugLines ?? filterDebugLogLines ( logs . lines , 'debug' ) ,
642+ }
643+ }
644+
580645function deriveDebugIssues (
581646 runtimeSnapshot : DebugRuntimeSnapshot ,
582647 debugSnapshot : RuntimeDebugSnapshotQueryData [ 'runtimeDebugSnapshot' ] ,
@@ -680,9 +745,7 @@ function deriveDebugIssues(
680745 } )
681746 }
682747
683- const recentErrors = supportingLogs . lines . filter ( ( line ) =>
684- line . level ?. toLowerCase ( ) . includes ( 'error' ) ,
685- )
748+ const recentErrors = selectDebugLogLines ( supportingLogs , 'error' )
686749 if ( recentErrors . length > 0 ) {
687750 issues . push ( {
688751 id : 'logs-have-errors' ,
0 commit comments