Compare commits
2 Commits
957e4f97e6
...
6b4b33ff64
| Author | SHA1 | Date | |
|---|---|---|---|
| 6b4b33ff64 | |||
| 17e36b8633 |
@ -1 +1 @@
|
|||||||
v20260109-01-veeam-m365-overall-message
|
v20260109-02-object-list-sorting
|
||||||
|
|||||||
@ -235,6 +235,33 @@
|
|||||||
if (el) el.textContent = value || '';
|
if (el) el.textContent = value || '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function objectSeverityRank(o) {
|
||||||
|
var st = String((o && o.status) || '').trim().toLowerCase();
|
||||||
|
var err = String((o && o.error_message) || '').trim();
|
||||||
|
if (st === 'error' || st === 'failed' || st === 'failure' || err) return 0;
|
||||||
|
if (st === 'warning') return 1;
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortObjects(objects) {
|
||||||
|
return (objects || []).slice().sort(function (a, b) {
|
||||||
|
var ra = objectSeverityRank(a);
|
||||||
|
var rb = objectSeverityRank(b);
|
||||||
|
if (ra !== rb) return ra - rb;
|
||||||
|
|
||||||
|
var na = String((a && a.name) || '').toLowerCase();
|
||||||
|
var nb = String((b && b.name) || '').toLowerCase();
|
||||||
|
if (na < nb) return -1;
|
||||||
|
if (na > nb) return 1;
|
||||||
|
|
||||||
|
var ta = String((a && a.type) || '').toLowerCase();
|
||||||
|
var tb = String((b && b.type) || '').toLowerCase();
|
||||||
|
if (ta < tb) return -1;
|
||||||
|
if (ta > tb) return 1;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function renderObjects(objects) {
|
function renderObjects(objects) {
|
||||||
var container = document.getElementById('msg_objects_container');
|
var container = document.getElementById('msg_objects_container');
|
||||||
if (!container) return;
|
if (!container) return;
|
||||||
@ -248,8 +275,10 @@
|
|||||||
var tableHtml = '<div class="table-responsive"><table class="table table-sm table-hover align-middle">' +
|
var tableHtml = '<div class="table-responsive"><table class="table table-sm table-hover align-middle">' +
|
||||||
'<thead class="table-light"><tr><th>Name</th><th>Type</th><th>Status</th><th>Error</th></tr></thead><tbody>';
|
'<thead class="table-light"><tr><th>Name</th><th>Type</th><th>Status</th><th>Error</th></tr></thead><tbody>';
|
||||||
|
|
||||||
for (var i = 0; i < objects.length; i++) {
|
var sorted = sortObjects(objects);
|
||||||
var o = objects[i] || {};
|
|
||||||
|
for (var i = 0; i < sorted.length; i++) {
|
||||||
|
var o = sorted[i] || {};
|
||||||
tableHtml += '<tr>' +
|
tableHtml += '<tr>' +
|
||||||
'<td>' + (o.name || '') + '</td>' +
|
'<td>' + (o.name || '') + '</td>' +
|
||||||
'<td>' + (o.type || '') + '</td>' +
|
'<td>' + (o.type || '') + '</td>' +
|
||||||
|
|||||||
@ -293,6 +293,33 @@
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function objectSeverityRank(o) {
|
||||||
|
var st = String((o && o.status) || '').trim().toLowerCase();
|
||||||
|
var err = String((o && o.error_message) || '').trim();
|
||||||
|
if (st === 'error' || st === 'failed' || st === 'failure' || err) return 0;
|
||||||
|
if (st === 'warning') return 1;
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortObjects(objects) {
|
||||||
|
return (objects || []).slice().sort(function (a, b) {
|
||||||
|
var ra = objectSeverityRank(a);
|
||||||
|
var rb = objectSeverityRank(b);
|
||||||
|
if (ra !== rb) return ra - rb;
|
||||||
|
|
||||||
|
var na = String((a && a.name) || '').toLowerCase();
|
||||||
|
var nb = String((b && b.name) || '').toLowerCase();
|
||||||
|
if (na < nb) return -1;
|
||||||
|
if (na > nb) return 1;
|
||||||
|
|
||||||
|
var ta = String((a && a.type) || '').toLowerCase();
|
||||||
|
var tb = String((b && b.type) || '').toLowerCase();
|
||||||
|
if (ta < tb) return -1;
|
||||||
|
if (ta > tb) return 1;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function wrapMailHtml(html) {
|
function wrapMailHtml(html) {
|
||||||
@ -606,7 +633,7 @@ if (tStatus) tStatus.textContent = '';
|
|||||||
|
|
||||||
var tbody = document.querySelector("#dj_objects_table tbody");
|
var tbody = document.querySelector("#dj_objects_table tbody");
|
||||||
tbody.innerHTML = "";
|
tbody.innerHTML = "";
|
||||||
(run.objects || []).forEach(function (obj) {
|
sortObjects(run.objects || []).forEach(function (obj) {
|
||||||
var tr = document.createElement("tr");
|
var tr = document.createElement("tr");
|
||||||
|
|
||||||
var tdName = document.createElement("td");
|
var tdName = document.createElement("td");
|
||||||
|
|||||||
@ -369,10 +369,39 @@ function findCustomerIdByName(name) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function objectSeverityRank(o) {
|
||||||
|
var st = String((o && o.status) || "").trim().toLowerCase();
|
||||||
|
var err = String((o && o.error_message) || "").trim();
|
||||||
|
if (st === "error" || st === "failed" || st === "failure" || err) return 0;
|
||||||
|
if (st === "warning") return 1;
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortObjects(list) {
|
||||||
|
return (list || []).slice().sort(function (a, b) {
|
||||||
|
var ra = objectSeverityRank(a);
|
||||||
|
var rb = objectSeverityRank(b);
|
||||||
|
if (ra !== rb) return ra - rb;
|
||||||
|
|
||||||
|
var na = String((a && a.name) || "").toLowerCase();
|
||||||
|
var nb = String((b && b.name) || "").toLowerCase();
|
||||||
|
if (na < nb) return -1;
|
||||||
|
if (na > nb) return 1;
|
||||||
|
|
||||||
|
var ta = String((a && a.type) || "").toLowerCase();
|
||||||
|
var tb = String((b && b.type) || "").toLowerCase();
|
||||||
|
if (ta < tb) return -1;
|
||||||
|
if (ta > tb) return 1;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var sorted = sortObjects(objects);
|
||||||
|
|
||||||
var html = "<div class=\"table-responsive\"><table class=\"table table-sm table-bordered mb-0\">";
|
var html = "<div class=\"table-responsive\"><table class=\"table table-sm table-bordered mb-0\">";
|
||||||
html += "<thead><tr><th>Object</th><th>Type</th><th>Status</th><th>Error</th></tr></thead><tbody>";
|
html += "<thead><tr><th>Object</th><th>Type</th><th>Status</th><th>Error</th></tr></thead><tbody>";
|
||||||
for (var i = 0; i < objects.length; i++) {
|
for (var i = 0; i < sorted.length; i++) {
|
||||||
var o = objects[i] || {};
|
var o = sorted[i] || {};
|
||||||
html += "<tr>";
|
html += "<tr>";
|
||||||
html += "<td>" + (o.name || "") + "</td>";
|
html += "<td>" + (o.name || "") + "</td>";
|
||||||
html += "<td>" + (o.type || "") + "</td>";
|
html += "<td>" + (o.type || "") + "</td>";
|
||||||
|
|||||||
@ -497,18 +497,29 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sort: objects with an error_message first (alphabetically by name), then the rest (also by name).
|
function objectSeverityRank(o) {
|
||||||
var sorted = (objects || []).slice().sort(function (a, b) {
|
var st = String((o && o.status) || "").trim().toLowerCase();
|
||||||
a = a || {};
|
var err = String((o && o.error_message) || "").trim();
|
||||||
b = b || {};
|
if (st === "error" || st === "failed" || st === "failure" || err) return 0;
|
||||||
var aHasErr = !!(a.error_message && a.error_message.toString().trim());
|
if (st === "warning") return 1;
|
||||||
var bHasErr = !!(b.error_message && b.error_message.toString().trim());
|
return 2;
|
||||||
if (aHasErr !== bHasErr) return aHasErr ? -1 : 1;
|
}
|
||||||
|
|
||||||
var an = (a.name || "").toString().toLowerCase();
|
// Sort: errors first, then warnings, then the rest; within each group sort alphabetically.
|
||||||
var bn = (b.name || "").toString().toLowerCase();
|
var sorted = (objects || []).slice().sort(function (a, b) {
|
||||||
|
var ra = objectSeverityRank(a);
|
||||||
|
var rb = objectSeverityRank(b);
|
||||||
|
if (ra !== rb) return ra - rb;
|
||||||
|
|
||||||
|
var an = String((a && a.name) || "").toLowerCase();
|
||||||
|
var bn = String((b && b.name) || "").toLowerCase();
|
||||||
if (an < bn) return -1;
|
if (an < bn) return -1;
|
||||||
if (an > bn) return 1;
|
if (an > bn) return 1;
|
||||||
|
|
||||||
|
var at = String((a && a.type) || "").toLowerCase();
|
||||||
|
var bt = String((b && b.type) || "").toLowerCase();
|
||||||
|
if (at < bt) return -1;
|
||||||
|
if (at > bt) return 1;
|
||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -324,6 +324,33 @@ function statusClass(status) {
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function objectSeverityRank(o) {
|
||||||
|
var st = String((o && o.status) || '').trim().toLowerCase();
|
||||||
|
var err = String((o && o.error_message) || '').trim();
|
||||||
|
if (st === 'error' || st === 'failed' || st === 'failure' || err) return 0;
|
||||||
|
if (st === 'warning') return 1;
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
function sortObjects(objects) {
|
||||||
|
return (objects || []).slice().sort(function (a, b) {
|
||||||
|
var ra = objectSeverityRank(a);
|
||||||
|
var rb = objectSeverityRank(b);
|
||||||
|
if (ra !== rb) return ra - rb;
|
||||||
|
|
||||||
|
var na = String((a && a.name) || '').toLowerCase();
|
||||||
|
var nb = String((b && b.name) || '').toLowerCase();
|
||||||
|
if (na < nb) return -1;
|
||||||
|
if (na > nb) return 1;
|
||||||
|
|
||||||
|
var ta = String((a && a.type) || '').toLowerCase();
|
||||||
|
var tb = String((b && b.type) || '').toLowerCase();
|
||||||
|
if (ta < tb) return -1;
|
||||||
|
if (ta > tb) return 1;
|
||||||
|
return 0;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function wrapMailHtml(html) {
|
function wrapMailHtml(html) {
|
||||||
html = html || "";
|
html = html || "";
|
||||||
return (
|
return (
|
||||||
@ -940,7 +967,7 @@ if (tStatus) tStatus.textContent = '';
|
|||||||
var tbody = document.querySelector('#rcm_objects_table tbody');
|
var tbody = document.querySelector('#rcm_objects_table tbody');
|
||||||
if (tbody) {
|
if (tbody) {
|
||||||
tbody.innerHTML = '';
|
tbody.innerHTML = '';
|
||||||
(run.objects || []).forEach(function (obj) {
|
sortObjects(run.objects || []).forEach(function (obj) {
|
||||||
var tr = document.createElement('tr');
|
var tr = document.createElement('tr');
|
||||||
|
|
||||||
var tdName = document.createElement('td');
|
var tdName = document.createElement('td');
|
||||||
|
|||||||
@ -4,6 +4,17 @@
|
|||||||
- Improved extraction of the overall details message from the mail content, ensuring permission and role warnings are correctly captured.
|
- Improved extraction of the overall details message from the mail content, ensuring permission and role warnings are correctly captured.
|
||||||
- Ensured the extracted overall message is consistently available in job details, run checks, and reporting views.
|
- Ensured the extracted overall message is consistently available in job details, run checks, and reporting views.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## v20260109-02-object-list-sorting
|
||||||
|
|
||||||
|
- Updated object list sorting logic to improve readability and prioritization.
|
||||||
|
- Objects are now grouped by severity in the following order:
|
||||||
|
1. Errors
|
||||||
|
2. Warnings
|
||||||
|
3. All other statuses
|
||||||
|
- Within each severity group, objects are sorted alphabetically (A–Z).
|
||||||
|
- Applied consistent sorting across all relevant views, including Inbox, Job Details, Run Checks, Daily Jobs, and Admin All Mail.
|
||||||
|
|
||||||
================================================================================================================================================
|
================================================================================================================================================
|
||||||
## v0.1.19
|
## v0.1.19
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user