Auto-commit local changes before build (2026-01-12 15:53:35) #104
@ -1 +1 @@
|
|||||||
v20260112-16-runchecks-popup-objects-no-overlap
|
v20260112-17-synology-abb-warning-recognize-objects
|
||||||
|
|||||||
@ -193,11 +193,13 @@ _ABB_FAILED_RE = re.compile(
|
|||||||
|
|
||||||
# Device list lines in body, e.g.
|
# Device list lines in body, e.g.
|
||||||
# "Apparaatlijst (back-up gelukt): DC01, SQL01"
|
# "Apparaatlijst (back-up gelukt): DC01, SQL01"
|
||||||
|
# "Lijst met apparaten (back-up gelukt): DC01, SQL01"
|
||||||
# "Apparaatlijst (back-up mislukt): FS01"
|
# "Apparaatlijst (back-up mislukt): FS01"
|
||||||
# "Device list (backup succeeded): DC01, SQL01"
|
# "Device list (backup succeeded): DC01, SQL01"
|
||||||
|
# "List of devices (backup succeeded): DC01, SQL01"
|
||||||
# "Device list (backup failed): FS01"
|
# "Device list (backup failed): FS01"
|
||||||
_ABB_DEVICE_LIST_RE = re.compile(
|
_ABB_DEVICE_LIST_RE = re.compile(
|
||||||
r"^\s*(?:Apparaatlijst|Device\s+list)\s*(?:\((?P<kind>[^)]+)\))?\s*:\s*(?P<list>.+?)\s*$",
|
r"^\s*(?:Apparaatlijst|Lijst\s+met\s+apparaten|Device\s+list|List\s+of\s+devices)\s*(?:\((?P<kind>[^)]+)\))?\s*:\s*(?P<list>.*?)\s*$",
|
||||||
re.I,
|
re.I,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -236,7 +238,11 @@ def _parse_active_backup_for_business(subject: str, text: str) -> Tuple[bool, Di
|
|||||||
overall_status = "Error"
|
overall_status = "Error"
|
||||||
overall_message = "Failed"
|
overall_message = "Failed"
|
||||||
|
|
||||||
objects: List[Dict] = []
|
# Collect device/object statuses while avoiding duplicates.
|
||||||
|
# Prefer the most severe status when a device appears multiple times.
|
||||||
|
severity = {"Error": 3, "Failed": 3, "Warning": 2, "Success": 1}
|
||||||
|
device_status: Dict[str, str] = {}
|
||||||
|
|
||||||
for line in (text or "").splitlines():
|
for line in (text or "").splitlines():
|
||||||
mm = _ABB_DEVICE_LIST_RE.match(line.strip())
|
mm = _ABB_DEVICE_LIST_RE.match(line.strip())
|
||||||
if not mm:
|
if not mm:
|
||||||
@ -245,15 +251,31 @@ def _parse_active_backup_for_business(subject: str, text: str) -> Tuple[bool, Di
|
|||||||
|
|
||||||
kind = (mm.group("kind") or "").lower()
|
kind = (mm.group("kind") or "").lower()
|
||||||
line_status = overall_status
|
line_status = overall_status
|
||||||
|
kind_is_specific = False
|
||||||
if "gelukt" in kind or "succeeded" in kind or "success" in kind:
|
if "gelukt" in kind or "succeeded" in kind or "success" in kind:
|
||||||
line_status = "Success"
|
line_status = "Success"
|
||||||
|
kind_is_specific = True
|
||||||
elif "mislukt" in kind or "failed" in kind or "error" in kind:
|
elif "mislukt" in kind or "failed" in kind or "error" in kind:
|
||||||
line_status = "Error"
|
line_status = "Error"
|
||||||
|
kind_is_specific = True
|
||||||
|
|
||||||
# "DC01, SQL01"
|
# "DC01, SQL01"
|
||||||
for name in [p.strip() for p in raw_list.split(",")]:
|
for name in [p.strip() for p in raw_list.split(",")]:
|
||||||
if name:
|
if not name:
|
||||||
objects.append({"name": name, "status": line_status})
|
continue
|
||||||
|
prev = device_status.get(name)
|
||||||
|
if prev is None:
|
||||||
|
device_status[name] = line_status
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Do not override specific succeeded/failed lists with a generic "device list".
|
||||||
|
if not kind_is_specific:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if severity.get(line_status, 0) > severity.get(prev, 0):
|
||||||
|
device_status[name] = line_status
|
||||||
|
|
||||||
|
objects: List[Dict] = [{"name": n, "status": s} for n, s in device_status.items()]
|
||||||
|
|
||||||
result = {
|
result = {
|
||||||
"backup_software": "Synology",
|
"backup_software": "Synology",
|
||||||
|
|||||||
@ -236,6 +236,16 @@
|
|||||||
- Fixed layout issue in the Run Checks popup where the Objects table could overlap the mail content.
|
- Fixed layout issue in the Run Checks popup where the Objects table could overlap the mail content.
|
||||||
- Adjusted container sizing and overflow handling to ensure the Objects table stays within its designated area.
|
- Adjusted container sizing and overflow handling to ensure the Objects table stays within its designated area.
|
||||||
- Ensured the mail content and Objects table are visually separated and cannot overlap regardless of content length.
|
- Ensured the mail content and Objects table are visually separated and cannot overlap regardless of content length.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## v20260112-17-synology-abb-warning-recognize-objects
|
||||||
|
|
||||||
|
- Extended the Synology Active Backup for Business parser to correctly detect objects listed in warning / partially completed emails.
|
||||||
|
- Improved object extraction logic to recognize devices mentioned in generic device lists (e.g. “List of devices …”), ensuring DC01 and SQL01 are included as objects.
|
||||||
|
- Ensured that when a device appears in both generic and specific status sections, the more specific status (failed / warning / success) takes precedence.
|
||||||
|
|
||||||
|
|
||||||
================================================================================================================================================
|
================================================================================================================================================
|
||||||
## v0.1.19
|
## v0.1.19
|
||||||
This release delivers a broad set of improvements focused on reliability, transparency, and operational control across mail processing, administrative auditing, and Run Checks workflows. The changes aim to make message handling more robust, provide better insight for administrators, and give operators clearer and more flexible control when reviewing backup runs.
|
This release delivers a broad set of improvements focused on reliability, transparency, and operational control across mail processing, administrative auditing, and Run Checks workflows. The changes aim to make message handling more robust, provide better insight for administrators, and give operators clearer and more flexible control when reviewing backup runs.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user