Update docs/changelog.md

This commit is contained in:
Ivo Oskamp 2026-01-12 16:33:36 +01:00
parent fcd8518598
commit 67c6db34ee

View File

@ -1,115 +1,247 @@
## v20260103-01-reports-jobs-delete ## v0.1.20
- Changed report output to aggregate results per job instead of listing individual objects, making reports more suitable for high-level job status review. 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.
- Updated report generation logic to build snapshots and summaries based on job runs.
- Added the ability to delete reports, including removal of all associated report data. ### 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.
--- ---
## v20260103-02-reports-delete ## 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.
- Added the ability to delete reports from the Reports overview. Mail Import Reliability and Data Integrity
- Introduced a Delete action per report, available to authorized roles (admin/operator/reporter). - Updated the mail import flow so messages are only moved to the processed folder after a successful database store and commit.
- Implemented backend deletion handling and automatic refresh of the reports list after removal. - Prevented Graph emails from being moved when parsing, storing, or committing data fails, ensuring no messages are lost due to partial failures.
- Added explicit commit and rollback handling to guarantee database consistency before any mail state changes occur.
- Improved logging around import, commit, and rollback failures to make skipped or retried mails easier to trace and troubleshoot.
Administrative Mail Auditing and Visibility
- Introduced an admin-only “All Mail” audit page that provides a complete overview of all received mail messages.
- Implemented pagination with a fixed page size of 50 items to ensure consistent performance and predictable navigation.
- Added always-visible search filters that can be combined using AND logic, including From, Subject, Backup, Type, Job name, and a received date/time range.
- Added an “Only unlinked” filter to quickly identify messages that are not associated with any job.
- Reused the existing Inbox message detail modal to allow consistent inspection of messages from the All Mail page.
- Added a dedicated navigation entry so administrators can easily access the All Mail audit view.
- Fixed modal opening behavior in the All Mail page to fully align click handling and popups with the Inbox implementation.
Inbox and Mail Body Rendering Improvements
- Treated whitespace-only email bodies as empty during import so HTML report attachments can be extracted and displayed correctly.
- Added legacy fallback logic in the Inbox message detail API to extract the first HTML attachment from stored EML files when bodies are empty or invalid.
- Improved iframe rendering in the Inbox so full HTML documents (commonly used for report attachments) are rendered directly instead of being wrapped.
- Added detection for “effectively empty” HTML bodies, such as empty Graph-generated HTML skeletons.
- Ensured that both newly imported and already-stored messages can dynamically fall back to EML attachment extraction without requiring a reset.
Run Checks Usability and Control
- Added a copy-to-clipboard icon next to ticket numbers in the Run Checks popup to quickly copy only the ticket code.
- Prevented accidental selection of appended status text when copying ticket numbers.
- Introduced a manual “Success (override)” action that allows Operators and Admins to mark a run as successful even if it originally failed or produced warnings.
- Implemented backend support to persist the override state without modifying the original run data.
- Updated UI indicators so overridden runs are clearly shown with a blue success status.
- Ensured overrides apply only to the selected run and do not affect historical or related runs.
- Improved Run Checks mail rendering by falling back to text bodies when HTML bodies are missing, matching Inbox and All Mail behavior.
- Added support for extracting HTML content from stored EML files when both HTML and text bodies are unavailable.
- Ensured plain-text emails are safely rendered using preformatted HTML to preserve readability.
Customer, Ticket, and Scope Cleanup
- Updated customer deletion logic to allow removal of customers even when tickets or remarks are linked.
- Added explicit cleanup of related TicketScope and RemarkScope records prior to customer deletion.
- Ensured jobs linked to a deleted customer are safely unassigned to prevent foreign key constraint errors.
- Eliminated deletion failures caused by lingering ticket or remark relationships.
Parser Enhancements and Informational Messages
- Added parser support for 3CX SSL Certificate notification emails.
- Classified these messages as Backup: 3CX with Type: SSL Certificate.
- Parsed and displayed certificate information in the Run Checks popup.
- Stored these messages as successful runs so certificate status can be tracked over time.
- Added detection for Synology DSM automatic update cancellation messages in both Dutch and English.
- Classified Synology Updates messages as informational and set their overall status to Warning.
- Excluded Synology Updates informational messages from scheduling logic and reporting output.
UI Layout and Status Accuracy Improvements
- Moved the Details section above the email body in both Inbox and Job Details popups to improve readability.
- Avoided long detail texts being constrained to narrow side columns.
- Adjusted missed run detection to include a ±1 hour grace window around scheduled run times.
- Prevented runs that arrive shortly after the scheduled time from being temporarily marked as Missed.
- Ensured the Missed status is only applied after the full grace window has elapsed, reducing false alerts in Run Checks and Daily Jobs views.
--- ---
## v20260103-03-reports-loading-fix ## v0.1.18
- Fixed an issue where the Reports page remained stuck on “Loading…”. This release focuses on improving ticket reuse, scoping, and visibility across jobs, runs, and history views to ensure consistent and flexible ticket handling.
- Ensured reports are rendered correctly when the page is loaded, even if the client-side API call fails.
- Fixed customer selection components on the Reports pages that could remain in a loading state. ### Ticket Linking and Reuse
- Improved robustness of report data handling to prevent rendering issues caused by invalid or missing customer references. - Updated ticket linking logic to allow the same existing ticket number to be associated with multiple jobs and job runs.
- Prevented duplicate ticket creation errors when reusing an existing ticket code.
- Ensured existing tickets are consistently reused and linked instead of being rejected when already present in the system.
### Ticket Scope and Resolution
- Fixed missing ticket number display in job and run popups by always creating or reusing a ticket scope when linking an existing ticket to a job.
- Updated ticket resolution logic to support per-job resolution when resolving tickets from a job or run context.
- Ensured resolving a ticket from the central Tickets view resolves the ticket globally and closes all associated job scopes.
- Updated ticket active status determination to be based on open job scopes, allowing the same ticket number to remain active for other jobs when applicable.
### Job History Tickets and Remarks
- Added a Tickets and Remarks section to the Job History mail popup.
- Aligned ticket handling in Job History with the existing Run Checks popup behavior.
- Enabled viewing of active and resolved tickets and remarks per job run.
- Added support for creating new tickets and remarks directly from the Job History popup.
- Enabled resolving tickets and remarks directly from the Job History popup.
- Ensured tickets and remarks are correctly scoped to the selected run (run_id).
--- ---
## v20260103-04-reports-default-period-fix ## v0.1.17
- Fixed a NameError on the Reports page by adding the missing get_default_report_period helper. ### Release Summary
- Ensured a default reporting period is always available to prevent the Reports view from failing during load.
This release focuses on improving job normalization, ticket and remark handling, UI usability, and the robustness of run and object detection across the platform.
**Job normalization and aggregation**
- Veeam job names are now normalized to prevent duplicates:
- Jobs with “(Combined)” and “(Full)” suffixes are merged with their base job names.
- Ensures accurate aggregation, reporting, and statistics for Veeam Backup and Microsoft 365 jobs.
- Added support for archiving inactive jobs while keeping all historical runs fully included in reports.
**Inbox and bulk operations**
- Introduced multi-select inbox functionality for Operator and Admin roles.
- Added a bulk “Delete selected” action with validation, counters, and admin audit logging.
**Jobs UI and navigation**
- Restored row-click navigation on the Jobs page.
- Moved the Archive action from the Jobs table to the Job Details page for consistency.
- Improved layout and behavior of job run popups, ensuring objects are visible, correctly rendered, and consistently sorted.
**Tickets and remarks**
- Ticket creation now always uses a user-provided ticket code with strict format and uniqueness validation.
- Editing of tickets and remarks has been fully disabled; items must be resolved and recreated instead.
- Removed ticket description fields from creation and detail views to prevent inconsistent data.
- Fixed backend indentation errors that previously caused startup and Bad Gateway failures.
**Customer deletion stability**
- Fixed foreign key constraint issues when deleting customers.
- Customer deletion now safely unlinks jobs while preserving historical job and run data.
- Enforced cascading deletes where appropriate to prevent integrity errors.
**Feedback handling**
- Users can now reply directly to Feedback items while they are in the “Open” state.
- Replies are stored for audit and history tracking.
**Veeam parser improvements**
- Configuration Backup parser now correctly captures multi-line overall warning messages.
- Improved date parsing to support formats without leading zeros.
- Microsoft 365 parser now always persists overall warning/info messages, even on successful runs.
**Run checks and missed run detection**
- Improved weekly and monthly schedule inference to reduce false positives.
- Monthly jobs are now detected and marked as missed on the correct expected date.
- Added fallback mechanisms for loading run objects in Run Checks to support legacy and transitional data.
Overall, this release significantly improves data consistency, usability, and reliability across jobs, tickets, inbox management, and run analysis.
--- ---
## v20260103-05-reports-date-import-fix ## v0.1.16
- Fixed a crash on the Reports page caused by missing datetime imports. This release significantly expands and stabilizes the reporting functionality, focusing on configurability, correctness, and richer output formats.
- Added the required `date` and `timedelta` imports to prevent a NameError when determining the default report period.
### Key Highlights
- Reports are now **job-aggregated** instead of object-level, making them suitable for high-level status reviews.
- Full **report lifecycle management** was added, including secure deletion and reliable refresh behavior.
- Introduced **advanced reporting foundations** with configurable report definitions (columns, filters, layout, charts).
- Added support for **multiple export formats**: CSV, HTML, and PDF, including graphical HTML previews and basic PDF charts.
- Implemented extensive **column selection** across Summary, Snapshot, and Jobs views, with drag-and-drop ordering and persistence.
- Added **job-level aggregated metrics**, including per-job success rates and charts over the selected period.
- Improved **filtering** to exclude informational (non-backup) jobs and allow selection by backup software and type.
- Ensured **success rate and total runs calculations** are correct and consistently based only on selected run statuses.
- Added **Customer** as a selectable column and improved multi-customer report clarity.
- Introduced configurable **HTML/PDF content scope** (Customers, Jobs, or both).
- Fixed numerous **stability issues** (loading states, NameErrors, missing imports, endpoint collisions, JS errors).
- Improved HTML report layout, table rendering, column labeling, sorting logic, and visual consistency.
- Cleaned up column metadata, removed deprecated/duplicate options, and added migration logic to fix existing configurations.
--- ---
## v20260103-06-reports-delete-button-fix
- Fixed an issue where the Delete button on the Reports page did not perform any action.
- Resolved a JavaScript block/brace error that prevented the delete handler from executing.
- Ensured the DELETE API call is correctly triggered and the reports list is refreshed after deletion.
- Restored correct CSS classes for the server-rendered Delete button to ensure proper binding.
---
## v20260103-07-reports-advanced-reporting-foundation
### Changed
- Introduced configurable report definitions to support advanced reporting options.
- Reports can now store selected columns, chart preferences, filters, and layout settings as structured configuration data.
- Extended Reports API to read and write report configuration data.
### Added
- Database migration adding `report_config` field to report definitions.
- New API endpoint to expose available report columns grouped by category for report configuration.
- New statistics endpoint providing aggregated KPI data and chart-ready datasets for reports.
- Foundation for graphical report rendering (charts and summaries) alongside tabular data.
### Fixed
- Ensured report deletion flow remains compatible with extended report definition handling.
---
## v20260103-08-reports-stats-endpoint-fix
- Fixed application startup crash caused by duplicate registration of the `api_reports_stats` endpoint.
- Removed the redundant `/api/reports/<report_id>/stats` route definition to ensure the endpoint is registered only once.
- Restored proper Gunicorn boot sequence by resolving Flask endpoint name collision.
---
## v20260103-09-reports-column-selection-ui
- Added extended report configuration options when creating a report, allowing users to select which columns are included.
- Introduced grouped column selection for Summary and Snapshot views, aligned with the reporting proposal.
- Implemented drag-and-drop ordering for selected report columns.
- Persisted selected columns per report so configurations are reused consistently.
- Updated report rendering to dynamically display data based on the configured columns instead of fixed defaults.
- Extended reports columns metadata endpoint to support configurable and future report metrics.
---
## v20260103-10-reports-summary-columns-metadata
- Added missing column definitions for **Summary** reports to the reports columns metadata endpoint.
- Enabled column selection in the **Report content** UI for Summary-based reports.
- Corrected the **Missed** column mapping to use `missed_count` for Summary views instead of snapshot-specific fields.
- Ensured column metadata is consistent between backend and frontend to allow future graphical output.
---
## v20260103-11-reports-view-raw-columns-fix
### Changed
- Fixed the **View raw** action in Reports by correcting a broken JavaScript function call that prevented raw data from loading.
- Extended the Reports backend to always include column metadata (`columns_meta`) in the response.
- Updated the Reports UI to use embedded column metadata as a fallback, ensuring column selection is available even when an API fetch fails.
- Improved column metadata loading logic to only fetch metadata when it is not already present in the report payload.
---
## v20260103-12-reports-columns-selector-init-fix
- Fixed /api/reports/columns to always return the column metadata payload (removed incorrect indentation that prevented a response for authorized users).
- Ensured the “New report” page always initializes the column selector by providing the initial customers payload to the frontend (prevents JS initialization issues that could stop the column lists from rendering).
================================================================================================================================================
## v0.1.15 ## v0.1.15
This release focused on improving operational clarity and usability by strengthening dashboard guidance, introducing a solid reporting foundation, and significantly refining the Run Checks review workflow for daily accountability. This release focused on improving operational clarity and usability by strengthening dashboard guidance, introducing a solid reporting foundation, and significantly refining the Run Checks review workflow for daily accountability.