From f029dfe9710e525a5ec2299b419119ced3f9c942 Mon Sep 17 00:00:00 2001 From: Bruce Schultz Date: Wed, 24 Jun 2026 13:17:40 +0200 Subject: [PATCH 1/5] feat(logs): optional debug log filter --- .../analysis/logs/AnalysisLogCardContent.vue | 55 ++++++++++++++----- .../analysis/logs/ContainerLogs.vue | 15 ++++- 2 files changed, 55 insertions(+), 15 deletions(-) diff --git a/app/components/analysis/logs/AnalysisLogCardContent.vue b/app/components/analysis/logs/AnalysisLogCardContent.vue index c411edb..487e90b 100644 --- a/app/components/analysis/logs/AnalysisLogCardContent.vue +++ b/app/components/analysis/logs/AnalysisLogCardContent.vue @@ -1,6 +1,6 @@ @@ -264,9 +284,9 @@ async function copyToClipboard(isAnalysis: boolean) { - No logs found... +
+ No logs found... +
@@ -312,7 +334,8 @@ async function copyToClipboard(isAnalysis: boolean) { } .log-scroll-panel { - font-family: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Monaco, + font-family: + ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Monaco, "Courier New", monospace; font-size: 0.8125rem; height: 30em; @@ -369,6 +392,10 @@ async function copyToClipboard(isAnalysis: boolean) { overflow: hidden; } +.log-entry-empty { + margin: 2rem 0.25rem; +} + .log-message { display: block; white-space: nowrap; diff --git a/app/components/analysis/logs/ContainerLogs.vue b/app/components/analysis/logs/ContainerLogs.vue index eb21b4f..c26904a 100644 --- a/app/components/analysis/logs/ContainerLogs.vue +++ b/app/components/analysis/logs/ContainerLogs.vue @@ -30,6 +30,7 @@ const analysis = ref(null); const logChunks = useLogChunks(analysisId); const lastFetchedAt = ref(null); const showTimestamps = ref(false); +const showDebug = ref(false); await logChunks.initialize(); if (logChunks.httpError.value === 403) { @@ -149,6 +150,14 @@ function onRefreshToggle() { offIcon="pi pi-clock" class="log-timestamp-toggle" /> + @@ -237,7 +249,8 @@ function onRefreshToggle() { gap: 0.75em; } -.log-timestamp-toggle { +.log-timestamp-toggle, +.log-debug-toggle { font-size: 0.8em; } From d51effb1d9dfefc36b06c156c7fa7e5a6183cd30 Mon Sep 17 00:00:00 2001 From: Bruce Schultz Date: Wed, 24 Jun 2026 13:18:03 +0200 Subject: [PATCH 2/5] style(logs): reload icon spins when refreshing logs --- app/components/analysis/logs/RefreshSwitch.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/analysis/logs/RefreshSwitch.vue b/app/components/analysis/logs/RefreshSwitch.vue index a7bba3d..0ce6bbb 100644 --- a/app/components/analysis/logs/RefreshSwitch.vue +++ b/app/components/analysis/logs/RefreshSwitch.vue @@ -20,7 +20,7 @@ const tooltip = props.disabled :disabled="props.disabled" onLabel="Refresh Logs On" offLabel="Refresh Logs Off" - onIcon="pi pi-refresh" + onIcon="pi pi-spin pi-refresh" offIcon="pi pi-refresh" class="log-timestamp-toggle" v-tooltip.top="tooltip" From 165f165e0395c84151fb9d31c025e02a61c9d424 Mon Sep 17 00:00:00 2001 From: Bruce Schultz Date: Wed, 24 Jun 2026 13:18:33 +0200 Subject: [PATCH 3/5] style(analysis): hide log button situationally --- .../analysis/AnalysisControlButtons.vue | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/app/components/analysis/AnalysisControlButtons.vue b/app/components/analysis/AnalysisControlButtons.vue index d29a134..db1a65a 100644 --- a/app/components/analysis/AnalysisControlButtons.vue +++ b/app/components/analysis/AnalysisControlButtons.vue @@ -17,6 +17,7 @@ interface ButtonStates { rerunActive: boolean; stopActive: boolean; deleteActive: boolean; + logsActive: boolean; } const props = defineProps({ @@ -121,26 +122,28 @@ const playButtonActiveStates = [null, "", undefined]; const rerunButtonActiveStates: Array = [ PodStatus.Failed, PodStatus.Executed, - PodStatus.Finished, // Deprecated PodStatus.Stopped, - PodStatus.Stopping, ]; const stopButtonActiveStates: Array = [ PodStatus.Executing, - PodStatus.Running, // Deprecated PodStatus.Starting, PodStatus.Started, PodStatus.Stopping, ]; const deleteButtonActiveStates: Array = [ - PodStatus.Failed, PodStatus.Stopped, PodStatus.Stopping, PodStatus.Executing, - PodStatus.Running, // Deprecated PodStatus.Starting, PodStatus.Started, ]; +const logsButtonActiveStates: Array = [ + PodStatus.Failed, + PodStatus.Stopped, + PodStatus.Stopping, + PodStatus.Executing, + PodStatus.Executed, +]; function getButtonStatuses(podStatus: string | null | undefined) { return { @@ -148,6 +151,7 @@ function getButtonStatuses(podStatus: string | null | undefined) { rerunActive: rerunButtonActiveStates.includes(podStatus), stopActive: stopButtonActiveStates.includes(podStatus), deleteActive: deleteButtonActiveStates.includes(podStatus), + logsActive: logsButtonActiveStates.includes(podStatus), }; } @@ -445,6 +449,7 @@ async function onDeleteAnalysis(silent: boolean = false) { @click="onDeleteAnalysis()" /> Date: Thu, 25 Jun 2026 08:20:04 +0200 Subject: [PATCH 4/5] fix!: remove deprecated statuses --- app/components/analysis/AnalysesTable.vue | 6 ++---- app/components/analysis/ContainerCounter.vue | 8 -------- app/services/Api.ts | 2 -- app/utils/count-analyses.ts | 2 -- app/utils/status-tag-severity.ts | 2 -- test/components/analysis/AnalysisTable.spec.ts | 2 +- test/components/analysis/AnalysisUpdateButton.spec.ts | 2 +- test/components/analysis/ContainerCounter.spec.ts | 7 +------ test/mockapi/handlers.ts | 4 ++-- test/utils/count-analyses.test.ts | 10 ++++------ test/utils/status-tag-severity.test.ts | 2 -- 11 files changed, 11 insertions(+), 36 deletions(-) diff --git a/app/components/analysis/AnalysesTable.vue b/app/components/analysis/AnalysesTable.vue index 3ca79dc..bb7e8d1 100644 --- a/app/components/analysis/AnalysesTable.vue +++ b/app/components/analysis/AnalysesTable.vue @@ -822,15 +822,13 @@ const onCloseNavToast = () => {