Auto-commit local changes before build (2026-01-12 16:55:54)

This commit is contained in:
Ivo Oskamp 2026-01-12 16:55:54 +01:00
parent 0ced2f8a48
commit 0cc587805f
4 changed files with 131 additions and 1768 deletions

View File

@ -1 +1 @@
v20260112-17-synology-abb-warning-recognize-objects
v20260112-18-changelog-from-gitea

View File

@ -4,74 +4,29 @@
<div class="d-flex align-items-center justify-content-between mb-3">
<div>
<h1 class="h3 mb-1">Changelog</h1>
<div class="text-body-secondary">Product versions and changes.</div>
<div class="text-body-secondary">Loaded live from the repository.</div>
</div>
{% if changelog_source_url %}
<div class="text-end">
<a class="btn btn-sm btn-outline-secondary" href="{{ changelog_source_url }}" target="_blank" rel="noopener">
View source
</a>
</div>
{% endif %}
</div>
{# Completed (summary) #}
<div class="card mb-4">
<div class="card-header d-flex align-items-center justify-content-between">
<div class="fw-semibold">Completed</div>
<span class="badge text-bg-primary">History</span>
</div>
{% if changelog_error %}
<div class="alert alert-warning" role="alert">
{{ changelog_error }}
</div>
{% endif %}
<div class="card">
<div class="card-body">
{% if changelog.completed_summary and changelog.completed_summary|length > 0 %}
<div class="accordion" id="changelogCompletedAccordion">
{% for item in changelog.completed_summary %}
<div class="accordion-item">
<h2 class="accordion-header" id="completedHeading{{ loop.index }}">
<button class="accordion-button {% if not loop.first %}collapsed{% endif %}" type="button" data-bs-toggle="collapse" data-bs-target="#completedCollapse{{ loop.index }}" aria-expanded="{% if loop.first %}true{% else %}false{% endif %}" aria-controls="completedCollapse{{ loop.index }}">
<span class="fw-semibold">v{{ item.version }}</span>
</button>
</h2>
<div id="completedCollapse{{ loop.index }}" class="accordion-collapse collapse {% if loop.first %}show{% endif %}" aria-labelledby="completedHeading{{ loop.index }}" data-bs-parent="#changelogCompletedAccordion">
<div class="accordion-body">
{% if item.overview and item.overview|length > 0 %}
{% for p in item.overview %}
<p class="mb-2">{{ p }}</p>
{% endfor %}
{% endif %}
{% if item.categories and item.categories|length > 0 %}
{% for cat in item.categories %}
<div class="fw-semibold mb-2">{{ cat.category }}</div>
{# NOTE: 'items' is a dict key; use bracket notation to avoid calling dict.items() #}
{% if cat['items'] and cat['items']|length > 0 %}
{% for it in cat['items'] %}
<div class="mb-3">
{% if it.title %}
<div class="fw-semibold">{{ it.title }}</div>
{% endif %}
{% if it.details and it.details|length > 0 %}
<ul class="mb-0">
{% for d in it.details %}
<li>{{ d }}</li>
{% endfor %}
</ul>
{% endif %}
</div>
{% endfor %}
{% if changelog_md %}
<pre class="mb-0" style="white-space: pre-wrap; word-break: break-word;">{{ changelog_md }}</pre>
{% else %}
<div class="text-body-secondary mb-3">No items in this section.</div>
{% endif %}
{% endfor %}
{% elif item.highlights and item.highlights|length > 0 %}
<ul class="mb-0">
{% for h in item.highlights %}
<li>{{ h }}</li>
{% endfor %}
</ul>
{% else %}
<div class="text-body-secondary">No details.</div>
{% endif %}
</div>
</div>
</div>
{% endfor %}
</div>
{% else %}
<div class="text-body-secondary">No completed items.</div>
<div class="text-body-secondary">No changelog content available.</div>
{% endif %}
</div>
</div>

View File

@ -1,252 +1,95 @@
## v20260109-01-veeam-m365-overall-message
- Fixed Veeam Backup for Microsoft 365 mail parsing where the overall summary message was not stored.
- 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.
---
## 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 (AZ).
- Applied consistent sorting across all relevant views, including Inbox, Job Details, Run Checks, Daily Jobs, and Admin All Mail.
---
## v20260109-03-preserve-ampersand-errors
- Decode HTML entities (e.g. &amp;) in parsed object fields (name/type/status/error_message) before storing them.
- Ensures ampersands and other entities are displayed correctly in the UI error messages.
---
## v20260109-04-parsers-page-all-parsers
- Updated the Parsers overview page to use the central parser registry instead of a static list.
- All currently available parsers are now automatically displayed on the page.
- Ensures the Parsers page stays in sync with newly added or removed parsers without manual template updates.
- Improved maintainability by removing hardcoded parser definitions from the template.
---
## v20260109-05-fix-parsers-route-import
- Fixed parsers page route startup crash by replacing an invalid absolute import with a package-relative import for the parser registry.
- Prevented Gunicorn worker boot failure (Bad Gateway) caused by "No module named 'app'" during application initialization.
---
## v20260109-06-user-management-edit-roles
- Added support to edit user roles directly in the User Management interface.
- Implemented backend logic to update existing user role assignments without requiring user deletion.
- Updated validation to ensure role changes are applied immediately and consistently.
- Ensured role updates are reflected correctly in permissions and access control.
---
## v20260109-07-feedback-open-default-resolved-sort
- Updated feedback listing to show only Open items by default.
- Adjusted sorting logic so Resolved items are always placed at the bottom when viewing all items.
- Preserved existing filtering, searching, and user-controlled sorting behavior.
---
## v20260109-08-ui-ellipsis-and-remove-objects-header
- Added reusable ellipsis styling for detail fields to prevent long values (e.g., email addresses) from overlapping other UI elements.
- Implemented click-to-expand for ellipsized fields so the full text becomes visible and selectable; double-click expands and selects all text.
- Added automatic tooltip (title) showing the full value when the field is truncated.
- Removed the redundant "Objects" heading above the objects table (table column header remains as the single label).
- Applied the detail-field truncation behavior consistently across Inbox, Deleted Mail, Run Checks, Daily Jobs, Job Detail, and Admin All Mail popups/pages where long values can occur.
---
## v20260109-09-ellipsis-reset-on-popup-close
- Reset expanded ellipsis fields when a Bootstrap modal is shown or hidden, so expanded state does not persist between openings.
- Added the same reset behavior for Bootstrap offcanvas components to keep behavior consistent across popups.
---
## v20260109-10-veeam-cloud-connect-report-parser
- Updated the Veeam Cloud Connect Report parser to correctly handle object naming by combining User and Repository Name with a "|" separator.
- Excluded the row containing "TOTAL" from being processed as an object.
- Adjusted status detection so red rows are interpreted as Errors and yellow/orange rows as Warnings.
- Ensured the overall status is set to Error when one or more objects are detected as errors.
- Improved parsing logic to correctly classify mixed-status reports within a single mail.
---
## v20260109-11-ntfs-auditing-audit-parser
- Added parser support for “NTFS Auditing” with type “Audit”.
- Implemented job name extraction from the mail subject (e.g. “<hostname> file audits”).
- Handled reports without an overall status by defaulting the result to Success.
- Ensured existing missing-run logic is applied when no audit report mail is received.
- Defined that these audit mails contain no objects; object list remains empty.
---
## v20260109-12-ntfs-audit-fqdn-jobname
- Updated NTFS Auditing (Audit) subject parsing to extract the hostname/FQDN directly from the start of the subject before "file audits".
- Removed the dependency on a fixed "Bouter <host>" subject prefix, so hosts like dc01.totall-it.local and fs01.totall-it.local are recognized.
---
## v20260109-13-ntfs-audit-jobname-prefix-flex
- Updated NTFS Auditing (Audit) subject parsing to support both formats:
- Subjects starting with "Bouter <host> file audits"
- Subjects starting directly with "<host> file audits"
- Ensures both btr-dc001/btr-dc002 and dc01/fs01 style hostnames are recognized consistently.
---
## v20260112-01-synology-abb-partial-warning
- Updated the Synology Active Backup for Business parser to detect “partially completed” jobs as Warning instead of ignoring them.
- Added support for localized variants of the completion message (including cases without an explicit host in the first line).
- Improved host detection by extracting the system name from the “From” header when not present in the subject/body.
- Extended object parsing to recognize per-device backup results and correctly classify them as Success or Error.
- Fixed the ABB-specific regular expression to prevent parser failures on valid warning mails.
---
## v20260112-02-synology-abb-subject-partial-warning
- Updated the Synology Active Backup for Business subject matching to also recognize “Virtual machine backup task …” variants.
- Added subject-based detection for “partially completed / gedeeltelijk voltooid” and map this to Overall status: Warning.
- Fixed the ABB completion regex (it previously failed to match valid subjects).
- Improved per-device object parsing by detecting “backup succeeded/failed” device-list variants and mapping them to Success/Error accordingly.
---
## v20260112-03-ntfs-audit-recognize-bouter-hosts
- Improved NTFS Auditing (Audit) subject parsing to extract the hostname reliably, including subjects with a leading company prefix (e.g. "Bouter ...") and underscores-as-spaces variants.
- Set overall status to Warning when the subject indicates any detected changes (↑/↓ counts > 0); otherwise Success.
- Ensured job name is consistently generated as "<hostname> file audits" for all supported senders.
---
## v20260112-04-remove-runchecks-success-override-button
- Removed the “Mark success (override)” button from the Run Checks popup.
- Prevented creation of actual overrides when marking individual runs as success.
- Simplified override overview by ensuring Run Checks actions no longer affect override administration.
---
## v20260112-05-qnap-firmware-update-info-parser
- Added parser support for QNAP Firmware Update notifications.
- Classified firmware update messages as informational warnings.
- Excluded QNAP firmware update messages from missing-run detection logic.
- Excluded QNAP firmware update messages from reports and scheduling.
- Ensured affected NAS devices are only shown in Run Checks when the message occurs.
---
## v20260112-06-veeam-spc-alarm-summary-parser
- Added support for Veeam Service Provider Console (VSPC) summary daily alarm notification emails.
- Implemented parsing that aggregates alarms per Company and stores one object per company, with the alarm details in the object error message.
- Derived overall status from the worst status found across all companies (Failed > Warning > Success).
- Registered "Service Provider Console" as a supported Veeam backup type for consistent reporting.
---
## v20260112-07-veeam-vspc-active-alarms-parser
- Improved detection for VSPC “Active Alarms” summary emails based on HTML content to prevent fallback to other Veeam parsers.
- Implemented parsing of alarms per Company and per alarm row, creating objects named “<Company> | <Object>”.
- Derived object status from “Current State” and attached alarm details where available (fallback to Alarm Name).
---
## v20260112-08-fix-veeam-vspc-parser-syntaxerror
- Fixed a SyntaxError in the Veeam VSPC Active Alarms parser caused by an incomplete regular expression.
- Restored valid parser loading to prevent Gunicorn startup failure and Bad Gateway errors.
- No functional logic changes; fix is limited to syntax correction only.
---
## v20260112-09-veeam-vspc-company-mapping-popup
- Added a dedicated company mapping popup for Veeam Service Provider Console "Active alarms summary" reports.
- Enabled manual linking of companies found in the mail to existing customers, as automatic customer matching is not applicable for this report type.
- Introduced per-company job and run creation (job name format: "Active alarms summary | <Company>") to ensure correct customer association.
- Ensured only alarms and objects belonging to the selected company are attached to the corresponding run.
- Disabled the standard job approval flow for this report type and replaced it with the company mapping workflow.
---
## v20260112-10-fix-vspc-approve-endpoint-duplicate
- Fixed a Flask startup crash caused by duplicate endpoint registration for the VSPC company approve route.
- Corrected misplaced route decorators that caused the approve handler to be mapped to the delete endpoint.
- Restored proper route separation between inbox message delete and VSPC company approve actions.
- Added missing authentication requirement to the VSPC approve endpoint to align with other inbox actions.
---
## v20260112-11-show-vspc-company-mapping-popup
- Fixed VSPC company-mapping popup visibility by removing strict job name matching in the Inbox modal logic.
- Made VSPC detection case-insensitive for backup software/type to improve robustness across mail variants and legacy data.
---
## v20260112-12-vspc-company-mapping-popup-visible
- Enabled VSPC company-mapping popup visibility for “Active alarms summary” messages even when no objects are parsed.
- Exposed parsed VSPC company list via the inbox message detail endpoint.
- Updated inbox popup logic to trigger the dedicated VSPC company-mapping workflow based on detected companies instead of parsed objects.
---
## v20260112-13-vspc-company-mapping-popup-ui
- Added VSPC company extraction to the inbox message detail response so multi-company summaries expose a company list even when no objects are stored.
- Updated the Inbox message modal to show the “Map companies” button based on the returned VSPC company list (with fallback to legacy object-name parsing).
- Disabled the standard Customer selector when VSPC company mapping is available to avoid using the wrong approval flow.
---
## v20260112-14-vspc-company-mapping-require-all
- Filtered VSPC company extraction to include only companies with alarms > 0 to avoid showing unrelated companies in the mapping popup.
- Added default customer prefill for each VSPC company based on existing per-company jobs (previous mappings).
- Changed VSPC approval flow to require all companies in the email to be mapped before approval; when mappings are incomplete the message stays in the Inbox while newly provided mappings are still saved.
---
## v20260112-15-vspc-scroll-partial-approve-objects
- Added a vertical scrollbar to the VSPC company mapping popup so “Approve mapped companies” stays reachable without browser zoom.
- Changed VSPC approval to approve only mapped companies; if some companies are still unmapped, the email stays in the Inbox while runs for mapped companies are created.
- Added de-duplication for VSPC approvals to prevent creating duplicate runs on repeated approvals.
- Improved VSPC error detection by treating both “Error” and “Failed” states as errors for the run status.
- Enhanced VSPC parsing to use the “Alarm Details” column so object rows (e.g., HV01, USB Disk) persist with their full alarm messages and become visible in the customer job view.
---
## v20260112-16-runchecks-popup-objects-no-overlap
- 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.
- 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.20
This release delivers a comprehensive set of improvements focused on parser correctness, data consistency, and clearer operator workflows across Inbox handling, Run Checks, and administrative tooling. The main goal of these changes is to ensure that backup notifications are parsed reliably, presented consistently, and handled through predictable and auditable workflows, even for complex or multi-entity reports.
### Mail Parsing and Data Integrity
- Fixed Veeam Backup for Microsoft 365 parsing where the overall summary message was not consistently stored.
- Improved extraction of overall detail messages so permission and role warnings are reliably captured.
- Ensured the extracted overall message is always available across Job Details, Run Checks, and reporting views.
- Added decoding of HTML entities in parsed object fields (name, type, status, error message) before storage, ensuring characters such as ampersands are displayed correctly.
- Improved robustness of parsing logic to prevent partial or misleading data from being stored when mails contain mixed or malformed content.
### Object Classification and Sorting
- Updated object list sorting to improve readability and prioritization.
- Objects are now grouped by severity in a fixed order: Errors first, then Warnings, followed by all other statuses.
- Within each severity group, objects are sorted alphabetically (AZ).
- Applied the same sorting logic consistently across Inbox, Job Details, Run Checks, Daily Jobs, and the Admin All Mail view.
- Improved overall run status determination by reliably deriving the worst detected object state.
### Parsers Overview and Maintainability
- Refactored the Parsers overview page to use the central parser registry instead of a static, hardcoded list.
- All available parsers are now displayed automatically, ensuring the page stays in sync as parsers are added or removed.
- Removed hardcoded parser definitions from templates to improve long-term maintainability.
- Fixed a startup crash in the parsers route caused by an invalid absolute import by switching to a package-relative import.
- Prevented Gunicorn worker boot failures and Bad Gateway errors during application initialization.
### User Management and Feedback Handling
- Added support for editing user roles directly from the User Management interface.
- Implemented backend logic to update existing role assignments without requiring user deletion.
- Ensured role changes are applied immediately and reflected correctly in permissions and access control.
- Updated feedback listings to show only Open items by default.
- Ensured Resolved items are always sorted to the bottom when viewing all feedback.
- Preserved existing filtering, searching, and user-controlled sorting behavior.
### UI Improvements and Usability Enhancements
- Introduced reusable ellipsis handling for long detail fields to prevent layout overlap.
- Added click-to-expand behavior for truncated fields, with double-click support to expand and select all text.
- Added automatic tooltips showing the full value when a field is truncated.
- Removed the redundant “Objects” heading above objects tables to reduce visual clutter.
- Applied truncation and expansion behavior consistently across Inbox, Deleted Mail, Run Checks, Daily Jobs, Job Detail views, and Admin All Mail.
- Reset expanded ellipsis fields when Bootstrap modals or offcanvas components are opened or closed to prevent state leakage.
- Fixed layout issues where the Objects table could overlap mail content in the Run Checks popup.
### Veeam Cloud Connect and VSPC Parsing
- Improved the Veeam Cloud Connect Report parser by combining User and Repository Name into a single object identifier.
- Excluded “TOTAL” rows from object processing.
- Correctly classified red rows as Errors and yellow/orange rows as Warnings.
- Ensured overall status is set to Error when one or more objects are in error state.
- Added support for Veeam Service Provider Console daily alarm summary emails.
- Implemented per-company object aggregation and derived overall status from the worst detected state.
- Improved detection of VSPC Active Alarms emails to prevent incorrect fallback to other Veeam parsers.
- Fixed a SyntaxError in the VSPC parser that caused application startup failures.
### VSPC Company Mapping Workflow
- Introduced a dedicated company-mapping popup for VSPC Active Alarms summary reports.
- Enabled manual mapping of companies found in mails to existing customers.
- Implemented per-company job and run creation using the format “Active alarms summary | <Company>”.
- Disabled the standard approval flow for this report type and replaced it with a dedicated mapping workflow.
- Required all detected companies to be mapped before full approval, while still allowing partial approvals.
- Prevented duplicate run creation on repeated approvals.
- Improved visibility and usability of the mapping popup with scroll support for large company lists.
- Ensured only alarms belonging to the selected company are attached to the corresponding run.
### NTFS Auditing and Synology ABB Enhancements
- Added full parser support for NTFS Auditing reports.
- Improved hostname and FQDN extraction from subject lines, supporting multiple subject formats and prefixes.
- Ensured consistent job name generation as “<hostname> file audits”.
- Set overall status to Warning when detected change counts are greater than zero.
- Improved Synology Active Backup for Business parsing to detect partially completed jobs as Warning.
- Added support for localized completion messages and subject variants.
- Improved per-device object extraction and ensured specific device statuses take precedence over generic listings.
### Workflow Simplification and Cleanup
- Removed the “Mark success (override)” button from the Run Checks popup.
- Prevented creation of unintended overrides when marking individual runs as successful.
- Simplified override handling so Run Checks actions no longer affect override administration.
- Ensured firmware update notifications (QNAP) are treated as informational warnings and excluded from missing-run detection and reporting.
---
## 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.