diff --git a/.last-branch b/.last-branch index c8b2ccf..268e004 100644 --- a/.last-branch +++ b/.last-branch @@ -1 +1 @@ -v20260106-20-fix-customer-delete-fk +backupchecks-v20260106-21-changelog-0.1.17 diff --git a/containers/backupchecks/src/backend/app/main/routes_changelog.py b/containers/backupchecks/src/backend/app/main/routes_changelog.py index 4a1f83e..170d75b 100644 --- a/containers/backupchecks/src/backend/app/main/routes_changelog.py +++ b/containers/backupchecks/src/backend/app/main/routes_changelog.py @@ -8,6 +8,119 @@ def changelog_page(): changelog = { "completed_summary": [ + { + "version": "0.1.17", + "status": "Completed", + "overview": [ + "This release focuses on improving job normalization, ticket and remark handling, UI usability, and the robustness of run and object detection across the platform." + ], + "categories": [ + { + "category": "Job normalization and aggregation", + "items": [ + { + "title": None, + "details": [ + "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." + ] + } + ] + }, + { + "category": "Inbox and bulk operations", + "items": [ + { + "title": None, + "details": [ + "Introduced multi-select inbox functionality for Operator and Admin roles.", + "Added a bulk Delete selected action with validation, counters, and admin audit logging." + ] + } + ] + }, + { + "category": "Jobs UI and navigation", + "items": [ + { + "title": None, + "details": [ + "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." + ] + } + ] + }, + { + "category": "Tickets and remarks", + "items": [ + { + "title": None, + "details": [ + "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." + ] + } + ] + }, + { + "category": "Customer deletion stability", + "items": [ + { + "title": None, + "details": [ + "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." + ] + } + ] + }, + { + "category": "Feedback handling", + "items": [ + { + "title": None, + "details": [ + "Users can now reply directly to Feedback items while they are in the Open state.", + "Replies are stored for audit and history tracking." + ] + } + ] + }, + { + "category": "Veeam parser improvements", + "items": [ + { + "title": None, + "details": [ + "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 and info messages, even on successful runs." + ] + } + ] + }, + { + "category": "Run checks and missed run detection", + "items": [ + { + "title": None, + "details": [ + "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." + ] + } + ] + } + ] + }, { "version": "0.1.16", "overview": [ diff --git a/docs/changelog.md b/docs/changelog.md index 5cb1d60..bc22d8e 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,154 +1,56 @@ -## v20260106-01-m365-combined-job-name-merge -- Updated the Veeam Backup for Microsoft 365 mail parser to normalize job names. -- Job names containing the suffix "(Combined)" are now mapped to the same job as the corresponding job without this suffix. -- This ensures that combined and non-combined backup result emails are aggregated under a single job in reports and statistics. - ---- - -## v20260106-02-inbox-bulk-delete - -- Added multi-select checkboxes to the Inbox for users with the operator or admin role. -- Added a “Delete selected” bulk action that soft-deletes selected inbox messages (moves them to Deleted), including select-all support and a selected-count indicator. -- Implemented a new POST API endpoint to bulk delete inbox messages with proper validation, skip/missing counts, and admin event logging. - ---- - -## v20260106-03-veeam-full-job-name-merge - -- Updated Veeam parser to normalize job names. -- Jobs containing "(Full)" are now treated as the same job as those without "(Full)". -- This prevents duplicate job entries and ensures correct aggregation and reporting. - ---- - -## v20260106-04-jobs-archive - -- Added job archiving support, allowing Operator and Admin roles to archive jobs that no longer produce runs. -- Archived jobs are excluded from Daily Jobs and Run Checks to keep active views clean. -- Introduced an Admin-only Archived Jobs page to view and restore archived jobs. -- Archived job runs remain fully included in all reports and statistics to preserve historical accuracy. - ---- - -## v20260106-05-jobs-row-click-and-archive-button-move - -- Restored the original Jobs page behavior where clicking anywhere on a job row navigates to the Job Details page. -- Removed the Job name hyperlink from the Jobs table; navigation is now handled by row click again. -- Moved the Archive action from the Jobs table to the Job Details page. -- Placed the Archive button next to the existing Delete job button for better consistency. - ---- - -## v20260106-06-customers-delete-fk-cascade-fix - -- Fixed customer deletion failing with FK constraint errors caused by existing customer_objects rows. -- Migration: enforced ON DELETE CASCADE on customer_objects.customer_id by recreating the FK constraint if needed (idempotent). -- Customer delete flow: unlinks jobs (sets jobs.customer_id to NULL) before deleting the customer, so historical job/run data remains intact. - ---- - -## v20260106-07-feedback-open-reply - -- Added the ability for users to reply to Feedback items with status "Open". -- Implemented reply functionality directly within the Feedback detail view. -- Ensured replies are only allowed while the Feedback item remains in the Open state. -- Stored user replies linked to the original Feedback item for audit and history purposes. - ---- - -## v20260106-08-ticket-code-input-disable-edit - -- Changed ticket creation to use the user-provided ticket_code instead of generating a new code. -- Added server-side validation for ticket_code format (TYYYYMMDD.####) and uniqueness checks. -- Added ticket number input field to Daily Jobs and Run Checks “New ticket” forms and included client-side format validation. -- Disabled editing of tickets and remarks (UI forms made read-only and update endpoints now return an error instructing to resolve and recreate). -- Updated Ticket and Remark detail pages to remove save/edit actions while keeping resolve functionality. - ---- - -## v20260106-09-fix-ticket-detail-indent - -- Fixed an IndentationError in routes_tickets.py that prevented the backend from booting (ticket_detail route). -- Removed an accidentally indented redirect line after disabling ticket editing, restoring valid module syntax. - ---- - -## v20260106-10-fix-remarks-indent-bad-gateway - -Fixed a Python IndentationError in the remarks detail route that caused Gunicorn to fail on startup. -Removed an incorrectly indented redirect statement so the module loads correctly and prevents Bad Gateway errors. - ---- - -## v20260106-11-new-ticket-remove-description - -- Removed the "Description" input from the "New ticket" form on Daily Jobs and Run Checks pages. -- Updated the ticket creation request to store only the ticket number (ticket_code) when creating a new ticket. -- Backend /api/tickets (POST) now ignores any description input during ticket creation (use remarks for additional context). - ---- - -## v20260106-12-disable-ticket-and-remark-edit -- Removed ticket edit UI actions (Daily Jobs, Run Checks, Tickets & Remarks overview). -- Removed remark edit UI actions (Daily Jobs, Run Checks, Tickets & Remarks overview). -- Removed ticket description display from ticket detail to prevent the field from reappearing. -- Kept resolve actions available for tickets and remarks. - ---- - -## v20260106-13-veeam-config-backup-overall-message - -- Updated the Veeam Configuration Backup parser to correctly capture and store overall warning messages. -- Added support for date formats without leading zeros (e.g. "6-1-2026") when parsing log lines. -- Ensured multi-line warning messages from configuration backup emails are stored as a single overall message. -- This allows overrides to be applied correctly for configuration backup warnings. - ---- - -## v20260106-14-veeam-m365-overall-message -- Updated the Veeam Backup for Microsoft 365 mail parser to always persist the extracted overall “Details” warning/info message, even when the run is reported as Success. -- This ensures permission/role warnings (e.g. “Missing application permissions/roles…”) are stored and can be used for overrides. - ---- - -## v20260106-15-jobrun-popup-objects-sort - -- Fixed job run popup so objects are rendered again. -- Restored object list handling in the job run popup. -- Updated sorting logic: - - Objects with an error message are shown first, sorted alphabetically by object name. - - Remaining objects are shown below, also sorted alphabetically by object name. - ---- - -## v20260106-16-jobrun-popup-objects-visible - -- Fixed job run popup where the Objects section was not visible for certain runs. -- Adjusted popup layout to prevent objects from being hidden behind the footer. -- Improved object rendering to handle different mail structures consistently. -- Updated object sorting logic: - - Objects with an error message are displayed first, sorted alphabetically by object name. - - Remaining objects are displayed below, also sorted alphabetically by object name. - ---- - -## v20260106-18-runchecks-popup-objects-fallback - -- Fixed Run Checks modal object list by adding fallbacks when persisted run_object_links are missing. -- Added legacy fallback to load objects via JobRun.objects for older data during/after upgrades. -- Added mail-based fallback to load objects via MailObject when no run-linked objects exist yet. -- Updated imports in routes_run_checks to include JobObject and MailObject used by the fallback logic. - ---- - -## v20260106-19-missed-run-detection-threshold -- Improved weekly schedule inference by requiring a time bucket to occur at least 3 times before it is considered “expected” (reduces outlier noise and false missed runs). -- Added monthly schedule inference based on real mail-based runs (>= 3 occurrences) with a cadence check to avoid classifying weekly jobs as monthly. -- Updated missed run generation (Run Checks) to use monthly inference when no stable weekly schedule exists, so monthly jobs are marked missed on the correct expected day instead of a week later. -- Updated Daily Jobs to show expected entries for inferred monthly jobs on the scheduled day-of-month (with last-day-of-month fallback for short months). ================================================================================================================================================ +## v0.1.17 + +### Release Summary + +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. + +--- + ## v0.1.16 This release significantly expands and stabilizes the reporting functionality, focusing on configurability, correctness, and richer output formats. diff --git a/version.txt b/version.txt index 00a2c6f..30cbcd2 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v0.1.16 +v0.1.17