From e23e194e404f6b2d4304218ad3dec76c956ab5e5 Mon Sep 17 00:00:00 2001 From: Ivo Oskamp Date: Tue, 6 Jan 2026 14:19:41 +0100 Subject: [PATCH] Auto-commit local changes before build (2026-01-06 14:19:41) --- .last-branch | 2 +- .../src/backend/app/parsers/veeam.py | 11 +----- .../src/templates/main/job_detail.html | 34 ++++--------------- 3 files changed, 9 insertions(+), 38 deletions(-) diff --git a/.last-branch b/.last-branch index aa78fb9..1083736 100644 --- a/.last-branch +++ b/.last-branch @@ -1 +1 @@ -v20260106-15-jobrun-popup-objects-sort +v20260106-16-reset diff --git a/containers/backupchecks/src/backend/app/parsers/veeam.py b/containers/backupchecks/src/backend/app/parsers/veeam.py index 2b54e5e..c5a7cee 100644 --- a/containers/backupchecks/src/backend/app/parsers/veeam.py +++ b/containers/backupchecks/src/backend/app/parsers/veeam.py @@ -932,17 +932,8 @@ def try_parse_veeam(msg: MailMessage) -> Tuple[bool, Dict, List[Dict]]: # Keep detailed overall message for non-success states, and always keep # the "Processing " marker when present (used for overrides/rules). - # Veeam Backup for Microsoft 365 can include a meaningful overall warning/info - # even when the run is reported as Success (e.g. missing application - # permissions/roles). Store it so it becomes visible in details and can be - # used for overrides. - is_m365 = (backup_type or "") == "Veeam Backup for Microsoft 365" if overall_message: - if ( - status_word != "Success" - or overall_message.lower().startswith("processing ") - or is_m365 - ): + if status_word != "Success" or overall_message.lower().startswith("processing "): result["overall_message"] = overall_message return True, result, objects diff --git a/containers/backupchecks/src/templates/main/job_detail.html b/containers/backupchecks/src/templates/main/job_detail.html index 7897f93..a7e062f 100644 --- a/containers/backupchecks/src/templates/main/job_detail.html +++ b/containers/backupchecks/src/templates/main/job_detail.html @@ -274,7 +274,7 @@ "" ); } - function renderObjects(objects) { +function renderObjects(objects) { var container = document.getElementById("run_msg_objects_container"); if (!container) return; @@ -283,36 +283,16 @@ return; } - // Sort: objects with an error_message first (alphabetically by name), then the rest (also by name). - var sorted = (objects || []).slice().sort(function (a, b) { - a = a || {}; - b = b || {}; - var aHasErr = !!(a.error_message && a.error_message.toString().trim()); - var bHasErr = !!(b.error_message && b.error_message.toString().trim()); - if (aHasErr !== bHasErr) return aHasErr ? -1 : 1; - - var an = (a.name || "").toString().toLowerCase(); - var bn = (b.name || "").toString().toLowerCase(); - if (an < bn) return -1; - if (an > bn) return 1; - return 0; - }); - var html = "
"; html += ""; - for (var i = 0; i < sorted.length; i++) { - var o = sorted[i] || {}; + for (var i = 0; i < objects.length; i++) { + var o = objects[i] || {}; html += ""; - html += ""; - html += ""; - + html += ""; + html += ""; var d = statusDotClass(o.status); - html += ""; - - html += ""; + html += ""; + html += ""; html += ""; } html += "
ObjectTypeStatusError
" + escapeHtml(o.name || "") + "" + escapeHtml(o.type || "") + "" + (o.name || "") + "" + (o.type || "") + "" + - (d ? ("") : "") + - escapeHtml(o.status || "") + - "" + escapeHtml(o.error_message || "") + "" + (d ? ('') : '') + escapeHtml(o.status || "") + "" + (o.error_message || "") + "
";