730 lines
40 KiB
Markdown
730 lines
40 KiB
Markdown
## v20260103-01-reports-jobs-delete
|
||
|
||
- Changed report output to aggregate results per job instead of listing individual objects, making reports more suitable for high-level job status review.
|
||
- 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.
|
||
|
||
---
|
||
|
||
## v20260103-02-reports-delete
|
||
|
||
- Added the ability to delete reports from the Reports overview.
|
||
- Introduced a Delete action per report, available to authorized roles (admin/operator/reporter).
|
||
- Implemented backend deletion handling and automatic refresh of the reports list after removal.
|
||
|
||
---
|
||
|
||
## v20260103-03-reports-loading-fix
|
||
|
||
- Fixed an issue where the Reports page remained stuck on “Loading…”.
|
||
- 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.
|
||
- Improved robustness of report data handling to prevent rendering issues caused by invalid or missing customer references.
|
||
|
||
---
|
||
|
||
## v20260103-04-reports-default-period-fix
|
||
|
||
- Fixed a NameError on the Reports page by adding the missing get_default_report_period helper.
|
||
- Ensured a default reporting period is always available to prevent the Reports view from failing during load.
|
||
|
||
---
|
||
|
||
## v20260103-05-reports-date-import-fix
|
||
|
||
- Fixed a crash on the Reports page caused by missing datetime imports.
|
||
- Added the required `date` and `timedelta` imports to prevent a NameError when determining the default report period.
|
||
|
||
---
|
||
|
||
## 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).
|
||
|
||
---
|
||
|
||
## v20260103-13-reports-edit-and-view-raw-fix
|
||
|
||
- Added the ability to edit existing reports via a dedicated edit view.
|
||
- Reused the report configuration form for both creating and editing reports.
|
||
- Fixed the "View raw" functionality so raw report data can be viewed again.
|
||
- Resolved an HTML rendering issue causing an extra ">" character above the Name column.
|
||
- Improved the reports list to correctly display the report type instead of incorrect metadata.
|
||
|
||
---
|
||
|
||
## v20260103-14-reports-percentage-2-decimals
|
||
|
||
- Limited percentage values in reports to a maximum of two decimal places.
|
||
- Applied consistent rounding for percentage fields across:
|
||
- Report summary views
|
||
- KPI and trend data outputs
|
||
- CSV export generation
|
||
- Improved readability and consistency of reported percentage values.
|
||
|
||
---
|
||
|
||
## v20260103-15-reports-customer-column
|
||
|
||
- Added **Customer** as a selectable column in report configuration.
|
||
- Ensured customer name is included and visible when multiple customers are selected.
|
||
- Updated summary and raw data views to correctly display customer information across multi-customer reports.
|
||
|
||
---
|
||
|
||
## v20260103-16-reports-snapshot-columns-runid-remark-toggle
|
||
|
||
- Added `run_id` and `remark` to the Snapshot report column metadata.
|
||
- Enabled toggling visibility of `run_id` and `remark` via the column selector.
|
||
- Removed forced default visibility so these columns can be fully disabled by the user.
|
||
|
||
---
|
||
|
||
## v20260103-17-reports-job-filters-exclude-info-jobs
|
||
|
||
- Excluded informational jobs (such as License Key and other non-backup jobs) from all report outputs.
|
||
- Added configurable filters to reports to select which backup jobs are included.
|
||
- Added configurable filters to reports to select which backup types are included.
|
||
- Ensured selected job and type filters are consistently applied to snapshot and summary reports.
|
||
- Improved report relevance by limiting output to meaningful backup-related data only.
|
||
|
||
---
|
||
|
||
## v20260103-18-reports-job-filter-selectbox-size-6-rows
|
||
|
||
- Updated the report selection UI to make the “Backup software” and “Backup type” select boxes equal in size.
|
||
- Both select boxes are now displayed with a fixed height of 6 visible rows for consistent layout and improved usability.
|
||
|
||
|
||
================================================================================================================================================
|
||
|
||
## 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.
|
||
|
||
### Dashboard & User Guidance
|
||
- Added a comprehensive explanatory section to the Dashboard describing how Backupchecks collects, normalizes, and evaluates backup results.
|
||
- Clarified dashboard counters, job statuses, overrides, and operational workflows.
|
||
- Introduced clear guidance emphasizing the goal of keeping the Run Checks page empty or near-empty as proof of daily review and accountability.
|
||
- Positioned Backupchecks explicitly as a monitoring and validation layer that complements existing backup software.
|
||
|
||
### Navigation & Usability
|
||
- Implemented automatic redirection to the Dashboard on a user’s first visit of each day, improving daily visibility of system status.
|
||
- Refactored the Settings area into clearly separated sections (General, Imports, Users, etc.) for better usability and structure.
|
||
|
||
### Dashboard News
|
||
- Added a per-user Dashboard News section with read/unread tracking.
|
||
- Enabled full admin management of news items (create, edit, delete, pin, severity, publish window).
|
||
- Provided admin insight into read statistics and the ability to reset read status.
|
||
|
||
### Reporting – Foundation
|
||
- Introduced the initial reporting framework focused on raw, immutable data for auditability.
|
||
- Added object-based reporting across multiple jobs with aggregated success, warning, failed, missed, and override metrics.
|
||
- Prepared the data model for CSV export, future PDF generation, scheduling, and email delivery.
|
||
- Enabled reporting access for admin, operator, and reporter roles in phase 1.
|
||
|
||
### Reports UI & Generation
|
||
- Added an initial Reports UI to define, generate, and manage reports.
|
||
- Enabled raw data preview directly in the UI with pagination support.
|
||
- Implemented backend endpoints to generate and retrieve report data on demand.
|
||
- Replaced the “New report” modal with a dedicated Create Report page.
|
||
- Added month-based date selection, quick-select options, and multi-customer reporting support.
|
||
- Enabled actual report generation while keeping scheduling as a non-functional placeholder.
|
||
|
||
### Run Checks – Multi-Select Improvements
|
||
- Added Shift-click multi-selection for efficient bulk review.
|
||
- Iteratively fixed edge cases including:
|
||
- Off-by-one range selection issues
|
||
- Checkbox and row highlight desynchronization
|
||
- Last-row selection bugs
|
||
- Browser text selection interference
|
||
- Improved “Select all” checkbox behavior:
|
||
- Clearing selection when indeterminate
|
||
- Correctly resetting from the indeterminate state
|
||
- Ensuring consistent mouse and keyboard interaction
|
||
|
||
### Overall Result
|
||
- Improved clarity, accountability, and daily workflow guidance across the application.
|
||
- Established a solid, extensible reporting foundation.
|
||
- Significantly enhanced usability and reliability of the Run Checks review process.
|
||
|
||
---
|
||
|
||
## v0.1.14
|
||
|
||
### Daily Jobs
|
||
- Introduced a consistent, case-insensitive multi-level sort order for the Daily Jobs overview: Customer → Backup Software → Backup Type → Job Name.
|
||
- Fixed backend ordering issues to ensure server-side data no longer overrides the intended sort logic.
|
||
- Ensured sorting is applied before serialization so the UI always reflects the correct order.
|
||
- Improved predictability and readability of job listings across environments.
|
||
|
||
### Veeam Backup for Microsoft 365
|
||
- Improved parsing of overall warning messages to correctly extract and display permission- and role-related issues.
|
||
- Added support for combined permission and role warnings in M365 reports.
|
||
- Ensured detailed permission warnings take precedence over generic “X of X objects processed” messages.
|
||
- Fixed incorrect overall message selection and filtered out misleading banner fragments.
|
||
- Resolved an indentation error in the parser that caused backend startup failures, restoring stability.
|
||
|
||
### Overrides – Configuration and Matching
|
||
- Replaced free-text inputs with dropdowns for Backup Software and Backup Type in Overrides, including:
|
||
- Alphabetical sorting
|
||
- Preselection of existing values
|
||
- A global option at the top of each dropdown
|
||
- Fixed PostgreSQL compatibility issues by replacing DISTINCT queries with GROUP BY while preserving case-insensitive sorting.
|
||
- Ensured Overrides endpoints no longer crash due to invalid query constructions.
|
||
|
||
### Overrides – Application, Editing, and Deletion
|
||
- Made newly created overrides apply immediately and retroactively to all unreviewed runs by default.
|
||
- Added full support for editing existing overrides and reapplying changes to unreviewed runs.
|
||
- Restricted override deletion to Admin users and ensured proper reprocessing after removal.
|
||
- Fixed datetime handling in override edit flows so unchanged values are preserved and NULL constraint violations are avoided.
|
||
- Ensured Admin users always see delete actions by consistently passing permission flags to the UI.
|
||
|
||
### Overrides – Matching Logic Improvements
|
||
- Extended override matching to use persisted run_object_links joined with customer_objects instead of legacy or non-existent relationships.
|
||
- Improved global override matching by resolving backup software and type from MailMessage data when missing on jobs.
|
||
- Added support for matching against object-level error messages as well as run-level remarks.
|
||
- Ensured all override matching remains case-insensitive and consistent across run-level and object-level evaluations.
|
||
|
||
### Overrides – UI Indicators and Reporting
|
||
- Introduced a blue status indicator for runs and jobs where overrides are applied.
|
||
- Updated status labels to display “Success (override)” for clearer distinction without changing canonical stored statuses.
|
||
- Added persistent override reporting metadata to job runs, including applied override ID, level, and reason.
|
||
- Ensured dashboards, Daily Jobs, Run Checks, and popups correctly propagate and display override-based success states.
|
||
- Fixed multiple UI rendering issues so overridden runs are no longer misclassified as warnings or missed jobs.
|
||
|
||
### Daily Jobs Popups
|
||
- Fixed popup loading failures and backend unpacking errors related to override handling.
|
||
- Ensured popup details consistently load correct run data.
|
||
- Aligned popup override detection and status coloring with Run Checks and Daily Jobs overviews.
|
||
|
||
---
|
||
|
||
## v0.1.13
|
||
|
||
This release focuses on improving visibility and consistency of Tickets and Remarks across Run Checks and Job Details, alongside several UI fixes and backend stability improvements.
|
||
|
||
### Highlights
|
||
- Added clear visual indicators for active Tickets and Remarks in the Run Checks overview.
|
||
- Enhanced Job Details and Job History to display actual ticket numbers and related remark messages, both in tables and popups.
|
||
- Improved navigation consistency by adding direct “Job page” links for Tickets and Remarks.
|
||
|
||
### Improvements
|
||
- Job History popups now reliably show associated ticket numbers and remark content.
|
||
- Backend job history data is enriched to support consistent UI rendering.
|
||
- Missed-run detection now includes a ±1 hour tolerance window and respects the configured UI timezone.
|
||
- Run Checks UI is simplified by hiding last-reviewed columns (data is still retained in the backend).
|
||
|
||
### Fixes
|
||
- Resolved a backend indentation issue that caused Gunicorn startup failures.
|
||
- Made frontend parsing of ticket/remark data more robust against malformed or unexpected payloads.
|
||
- Fixed JSON encoding issues in HTML data attributes to prevent popup rendering errors.
|
||
|
||
### Changelog Update
|
||
- Simplified the changelog by removing “Current Version” and “In testing” sections.
|
||
- The changelog now only shows completed changes.
|
||
|
||
---
|
||
|
||
## v0.1.12
|
||
|
||
### Dashboard & UI
|
||
- Corrected dashboard counters so **Expected**, **Missed**, and **Success (override)** statuses are shown accurately.
|
||
- Added dedicated counters for Expected and Success (override).
|
||
- Fixed layout issues on the Inbox dashboard tiles and improved label wrapping.
|
||
- Added safe timezone fallbacks to prevent incorrect status aggregation.
|
||
- Restored missing status icons and symbols across Dashboard and Daily Jobs views.
|
||
- Cleaned up Job Details UI by removing redundant columns and clarifying schedule display.
|
||
- Extended Job History with weekday labels and review metadata (Admin-only visibility).
|
||
|
||
### Stability & Reliability
|
||
- Fixed a Gunicorn startup crash caused by incorrect Python indentation.
|
||
- Improved migration robustness for soft-delete columns to prevent startup 502 errors on busy databases.
|
||
- Prevented duplicate or unintended regeneration of reviewed “Missed” runs.
|
||
|
||
### Inbox & Mail Handling
|
||
- Introduced soft-delete for Inbox messages with full Admin restore capability.
|
||
- Added an Admin-only “Deleted mails” page with audit details (who/when).
|
||
- Added popup previews for deleted mails without requiring restore.
|
||
- Improved HTML mail handling by extracting content from HTML attachments when the body is empty.
|
||
- Added an Admin maintenance action to backfill HTML bodies from existing attachments.
|
||
|
||
### Feedback & Settings
|
||
- Changed Feedback behavior so resolved items remain visible until explicitly deleted.
|
||
- Restricted feedback deletion to Admin users only.
|
||
- Added a User Settings page allowing users to change their own password securely.
|
||
|
||
### Backup Parser Enhancements
|
||
- Improved Veeam parsing:
|
||
- Fixed Health Check Summary parsing.
|
||
- Normalized job names by stripping “(Retry)”.
|
||
- Added and refined License Key parsing with correct status detection and exclusions from scheduling logic.
|
||
- Added and expanded Synology support:
|
||
- Active Backup for Business (NL/EN).
|
||
- R-Sync (NL/EN).
|
||
- Account Protection notifications (informational, no scheduling).
|
||
- Added new parsers:
|
||
- R-Drive Image.
|
||
- Syncovery.
|
||
- Ensured correct handling of objects, statuses, and scheduling exclusions where applicable.
|
||
|
||
### Changelog
|
||
- Removed the “Planned” section from the Changelog.
|
||
- Future planning is now handled exclusively via the Feedback page.
|
||
|
||
---
|
||
|
||
## v0.1.11
|
||
|
||
### Stability & Bug Fixes
|
||
- Fixed multiple page crashes caused by missing imports after refactoring (Jobs, Feedback, Run Checks, Inbox, Daily Jobs).
|
||
- Resolved Jinja2 template errors and SQL/runtime issues related to timezone handling.
|
||
- Improved robustness by explicitly importing shared helpers to prevent NameError exceptions.
|
||
|
||
### Run Checks & Review Workflow
|
||
- Introduced a new **Run Checks** page to review job runs independently from Daily Jobs.
|
||
- Displays all unreviewed runs with no time-based filtering.
|
||
- Supports bulk review actions and per-job review via popups.
|
||
- Added admin-only features: show reviewed runs, unmark reviewed runs, reviewer metadata, and full audit logging.
|
||
- Enhanced popups to group runs per job, include missed runs, and show ticket/remark indicators.
|
||
- Added per-job and per-popup status summaries using visual indicators only.
|
||
|
||
### UI & Visual Consistency
|
||
- Unified all job and run status indicators to a single shape differentiated by color.
|
||
- Added a clear status legend to the Dashboard, including the new **Expected** state.
|
||
- Removed textual status labels across Daily Jobs and Run Checks for a cleaner UI.
|
||
- Improved table layouts and widened content areas for better use of 1080p screens.
|
||
- Ensured consistent indicator rendering across all pages.
|
||
|
||
### Timezone & Display Improvements
|
||
- Added a configurable timezone setting in Settings.
|
||
- Updated all frontend date/time rendering to use the configured timezone instead of UTC.
|
||
- Fixed offset issues and restored missing timestamps across multiple pages.
|
||
|
||
### Missed Runs Logic
|
||
- Refined missed run detection to rely only on historically received mail reports.
|
||
- Prevented synthetic or never-run schedules from generating false missed runs.
|
||
|
||
### Settings & Maintenance
|
||
- Stabilized **Delete all jobs** by adding schema-tolerant cleanup of all related foreign key references.
|
||
- Refactored the Settings page layout using accordions and cards for improved clarity.
|
||
- Improved alignment and usability of import/export and user management sections.
|
||
|
||
### Roles & Access Control
|
||
- Added support for multiple roles per user with an active role switcher.
|
||
- Fixed role-based menu rendering and ensured permissions are evaluated against the active role.
|
||
- Ensured role switching consistently redirects to the Dashboard.
|
||
|
||
### Theme & UX Fixes
|
||
- Fixed manual theme switching (Light/Dark/Auto) and ensured user preferences persist.
|
||
- Corrected Inbox EML download functionality by restoring the missing shared import.
|
||
|
||
Overall, this release significantly improves stability, review workflows, visual consistency, timezone correctness, and administrative reliability, while refining the operator experience and access control model.
|
||
|
||
---
|
||
|
||
## v0.1.10
|
||
|
||
### Performance & Stability
|
||
- Reworked **Re-parse all** to process inbox messages in controlled batches, preventing gateway and Gunicorn timeouts on large inboxes.
|
||
- Added execution time guards to stop processing before proxy limits are reached.
|
||
- Optimized job-matching queries and disabled session autoflush during batch operations to reduce database load.
|
||
- Ensured auto-approval and persistence logic only finalize after a full, successful re-parse cycle.
|
||
- Restored stable backend startup by fixing decorator ordering issues that caused 502 errors.
|
||
|
||
### Job Matching & Parsing
|
||
- Fixed approved job imports to persist `from_address`, ensuring correct matching during re-parse.
|
||
- Improved Veeam Backup Job parsing:
|
||
- Extracted and stored multi-line warnings/errors and object-level details with preserved line breaks.
|
||
- Ignored VM summary lines (e.g., “X of X VMs processed”) for overall status detection.
|
||
- Prevented incorrect overall warnings when issues are object-level only.
|
||
- Fixed regressions to ensure backup objects are consistently detected, stored, and displayed across all views.
|
||
|
||
### UI & UX Improvements
|
||
- Added EML download support for Job Details and Daily Jobs, with automatic availability handling and proper 404s when missing.
|
||
- Improved rendering to preserve line breaks (pre-wrap) in remarks, overall messages, and object details.
|
||
- Reduced visual clutter by moving overall status/messages out of tables and into context-specific popups.
|
||
- Standardized changelog version display by removing date suffixes.
|
||
- Reordered main navigation for better consistency.
|
||
|
||
### Daily Jobs & Status Accuracy
|
||
- Clarified Daily Jobs status logic:
|
||
- Introduced **Expected** for backups not yet due.
|
||
- Reserved **Missed** only for jobs past their final expected run time.
|
||
- Added last remark excerpts and ensured object details are visible in Daily Jobs popups.
|
||
|
||
### Tickets, Remarks & Overrides
|
||
- Introduced run-date–scoped ticket activity with `active_from_date`, ensuring accurate historical and current visibility.
|
||
- Implemented identical scoping for remarks, preserving visibility across runs even after resolution.
|
||
- Fixed resolve actions to redirect properly in the UI while keeping JSON responses for API/AJAX.
|
||
- Improved override handling so changes apply immediately to existing job runs with correct priority resolution.
|
||
|
||
### New Features
|
||
- Added a **Feedback** board with per-user upvoting, admin moderation (resolve/reopen, soft delete), database migrations, and navigation entry.
|
||
|
||
### Navigation
|
||
- Updated menu order to: Inbox, Customers, Jobs, Daily Jobs, Tickets, Overrides, Reports, Settings, Logging, Changelog, Feedback.
|
||
|
||
---
|
||
|
||
## v0.1.9
|
||
|
||
### Changelog System Improvements
|
||
- Added and maintained multiple **Completed** changelog entries (v0.1.2 through v0.1.8) with correct release dates.
|
||
- Ensured all existing Completed, Testing, and Planned changelog entries were preserved without loss.
|
||
- Migrated the Completed changelog from markdown-based content to a **structured, non-markdown format** aligned with the Planned section.
|
||
- Simplified changelog rendering logic to use explicit section titles and bullet handling instead of full markdown parsing.
|
||
- Standardized formatting across all versions for long-term maintainability and consistent UI rendering.
|
||
|
||
### Bug Fixes & Stability
|
||
- Fixed multiple backend **Python syntax and runtime errors** related to changelog definitions (missing commas, indentation issues, invalid list entries).
|
||
- Resolved rendering issues where markdown content was displayed as plain text or collapsed incorrectly.
|
||
- Restored application startup stability by fixing missing imports (`re`, `html`) and indentation errors in changelog-related routes.
|
||
|
||
### Refactoring & Maintainability
|
||
- Refactored a large `routes.py` file into multiple smaller route modules.
|
||
- Introduced a shared routes module for common imports, helpers, and access control.
|
||
- Fixed NameError issues after refactoring by explicitly importing underscored helper functions that are not included via wildcard imports.
|
||
- Ensured all split route modules retained full functional parity with the original implementation.
|
||
|
||
### Release Management Updates
|
||
- Moved versions through **Testing → Completed** states correctly:
|
||
- v0.1.7 marked as Completed (2025-12-23).
|
||
- v0.1.8 added as Completed (2025-12-24) and restored as Current Version.
|
||
- Testing advanced to v0.1.9.
|
||
- Updated v0.1.8 release notes to document consistent job-matching and auto-approval behavior across all mail processing flows.
|
||
- Verified no regressions in changelog structure or rendering after updates.
|
||
|
||
Overall, v20251225 focused on **hardening the changelog system**, improving backend stability, cleaning up technical debt in routing, and ensuring consistent, reliable release tracking across the application. :contentReference[oaicite:0]{index=0}
|
||
|
||
---
|
||
|
||
## v0.1.8
|
||
|
||
### Overview
|
||
This release focuses on making job matching and auto-approval behavior fully consistent across manual inbox actions, automatic mail imports, and the “Re-parse all” process. It also fixes a critical backend startup issue introduced in the re-parse logic.
|
||
|
||
### Key Changes
|
||
- Introduced a single, shared job-matching helper based on a full unique key:
|
||
- From address
|
||
- Backup software
|
||
- Backup type
|
||
- Job name
|
||
- Updated manual inbox approval to reuse existing jobs when the unique key matches, instead of relying on customer-only matching.
|
||
- Aligned inbox “Re-parse all” auto-approve logic with the same shared matching behavior.
|
||
- Fixed automatic mail import auto-approve so it correctly:
|
||
- Creates a JobRun
|
||
- Marks the mail as approved
|
||
- Moves the mail to history when a matching job exists
|
||
|
||
### Re-parse All Improvements
|
||
- Auto-approve is now executed during “Re-parse all”, not only on initial mail import.
|
||
- After re-parsing, all successfully parsed mails without a linked job are re-evaluated against existing jobs using the full unique key.
|
||
- When a matching active job with auto-approve enabled is found:
|
||
- The mail is automatically approved
|
||
- The mail is linked to the job
|
||
- The mail is moved to history
|
||
- A corresponding job run is created and shown in Job History
|
||
|
||
### Fixes
|
||
- Resolved an issue where “Re-parse all” previously only updated parse metadata and skipped auto-approve logic, causing historical mails not to appear in job history.
|
||
- Fixed a SyntaxError in the re-parse auto-approve logic that caused backend startup failures (Bad Gateway).
|
||
- Corrected try/except structure and indentation to ensure re-parse auto-approve runs safely per mail without breaking the overall process.
|
||
|
||
### Result
|
||
- Job matching and auto-approval behavior is now consistent across all mail processing flows.
|
||
- Historical mails are correctly linked to jobs and visible in job history.
|
||
- Backend stability during startup and re-parse operations is restored.
|
||
|
||
---
|
||
|
||
## v0.1.7
|
||
|
||
### Key Features
|
||
- Introduced **export and import functionality for approved jobs**, allowing approved job definitions to be migrated between clean installations via JSON.
|
||
- Import process automatically creates missing customers and updates existing jobs based on a unique job identity to prevent duplicates.
|
||
|
||
### Versioning & Changelog
|
||
- Promoted version **v0.1.7** from *Testing* to *Completed*.
|
||
- Introduced **v0.1.8** as the new *Testing* release.
|
||
- Updated the changelog structure and testing notes to reflect active export/import functionality.
|
||
|
||
### Parser Enhancements
|
||
- **Boxafe**
|
||
- Improved parsing for Shared Drives, Domain Accounts (Email, Contact, Drive, Calendar), and handling of *Warning* statuses.
|
||
- Corrected object detection logic, ensuring no false objects are created when jobs contain no object data.
|
||
- Removed object parsing for Shared Drives backups entirely.
|
||
- **Synology Hyper Backup**
|
||
- Added full support for Dutch notification emails.
|
||
- Improved status detection for Dutch phrasing.
|
||
- Confirmed that no objects are parsed for Hyper Backup jobs.
|
||
- **Veeam**
|
||
- Added support for **Scale-out Backup Repository (SOBR)** notifications, including storage capacity metrics suitable for logging and graphing.
|
||
- Added support for **Veeam Health Check** reports with correct object filtering to exclude summary-only entries.
|
||
|
||
### Job Approval & Auto-Approval Logic
|
||
- Significantly refined approved job matching logic to prevent cross-customer approvals.
|
||
- Improved auto-approve behavior during **Re-parse all**, Inbox reprocessing, and Graph imports.
|
||
- Enhanced resilience against case differences, whitespace, unicode characters, and hidden formatting issues.
|
||
- Iteratively refined normalization strategy:
|
||
- Ultimately simplified matching to rely primarily on a normalized **From address**, while ensuring parser-consistent values for Backup, Type, and Job Name.
|
||
- Ensured deterministic behavior during reprocessing by preventing mutation of message data.
|
||
|
||
### Stability Fixes
|
||
- Fixed multiple crashes and approval errors caused by undefined or incorrect job name handling.
|
||
- Resolved issues with duplicate job records (including `NULL` customer IDs) that previously blocked auto-approval.
|
||
- Ensured consistent JobRun creation and mail linking during automatic imports and re-parsing.
|
||
|
||
### Notes
|
||
- Due to changes in approval matching logic, **previously approved jobs are expected to be recreated** after these updates.
|
||
|
||
---
|
||
|
||
## v0.1.6
|
||
|
||
### Fixed
|
||
- Corrected auto-approve logic to ensure it is properly applied during automatic mail imports.
|
||
- Prevented the **Re-parse all** action from re-processing emails that were already approved.
|
||
- Ensured approved status is always respected and never overwritten during re-parsing or automatic imports.
|
||
- Fixed multiple Jinja2 `TemplateSyntaxError` issues in the base layout that caused 500 Internal Server Errors.
|
||
- Restored correct rendering of all pages affected by template errors, including Dashboard, Parsers, and Changelog.
|
||
- Resolved Changelog page rendering issues by fixing dictionary access in templates and avoiding conflicts with built-in methods.
|
||
|
||
### Added
|
||
- Introduced a centralized **Changelog** page containing:
|
||
- Active production version
|
||
- Testing version
|
||
- Planned / Todo items
|
||
- Completed changes
|
||
- Added the Changelog entry point to the main navigation.
|
||
- Applied a clear versioning convention, e.g. `v0.1.7 (v20251222-03)` for testing releases.
|
||
- Marked version `0.1.6` as the active production release.
|
||
|
||
### Planned
|
||
- Export and import of jobs to allow restoring approved jobs after a clean installation.
|
||
- Always register “New license key is not available” as an error.
|
||
- Support for a scale-out backup repository Cloud Connect Immutable parser.
|
||
- Ability to attach EML files to Daily Jobs and Job Details.
|
||
- Fix for Light/Dark theme switching so users can properly change themes.
|
||
- Restrict ticket creation and editing to Operator and Admin roles only.
|
||
|
||
### Known Bugs
|
||
- Emails that were previously approved remain in the Inbox instead of being removed, even though they appear auto-approved and linked to Jobs.
|
||
|
||
---
|
||
|
||
## v0.1.5
|
||
|
||
### Overview
|
||
This release focuses on restoring Microsoft Graph functionality, improving application reliability, and introducing a robust reset mechanism to allow a clean restart of the application state.
|
||
|
||
### Key Fixes
|
||
- Restored Microsoft Graph folder retrieval by fixing an incorrect import that caused a `ModuleNotFoundError`.
|
||
- Resolved failures in the automatic mail importer caused by `signal`-based timeout handling by replacing it with a thread-safe mechanism.
|
||
- Fixed backend startup crashes and Bad Gateway errors related to the automatic mail importer.
|
||
- Implemented missing backend logic required for automatic imports to function correctly.
|
||
|
||
### New Features
|
||
- Added an **Application Reset** option in the Settings page.
|
||
- Introduced a confirmation step to prevent accidental resets.
|
||
|
||
### Improvements & Changes
|
||
- Implemented full backend support for a complete application reset.
|
||
- Reset now clears all application data, including:
|
||
- Approved and pending jobs
|
||
- Imported and processed emails
|
||
- Daily job runs
|
||
- Logs
|
||
- User-defined settings (system defaults are preserved)
|
||
- Ensured database cleanup runs in the correct order to respect foreign key constraints.
|
||
- Aligned automatic mail import logic with the existing manual import flow for consistent behavior.
|
||
- Applied the automatic import cutoff date directly via a Microsoft Graph `$filter`, leaving older emails untouched in the inbox.
|
||
|
||
### Result
|
||
- Graph API functionality is fully restored.
|
||
- Automatic mail import runs reliably on its configured schedule.
|
||
- The application can now be safely reset to a clean, fresh-install state when needed.
|
||
|
||
---
|
||
|
||
## v0.1.4
|
||
|
||
This release focuses on improving backend stability, database reliability, and consistency in object parsing and mail handling.
|
||
|
||
### Key Changes
|
||
- Database migrations for tickets and remarks were stabilized by running each migration in its own transaction scope, preventing closed-connection errors during startup.
|
||
- Backend startup issues causing Gunicorn failures and 502 Bad Gateway errors were resolved.
|
||
- The title field was fully removed from tickets and remarks, simplifying both backend validation and UI forms to use only descriptive content.
|
||
- Manual mail imports were aligned with the **Re-parse all** behavior, ensuring immediate and consistent object detection.
|
||
- Object visibility on the Daily Jobs page was corrected for previously approved jobs.
|
||
- Manual imports were hardened against Microsoft Graph timeouts by adding DNS preflight checks and safely skipping message moves when Graph is unreachable.
|
||
|
||
### Improvements
|
||
- Eliminated `ResourceClosedError` exceptions during backend boot.
|
||
- Increased reliability of migrations and overall application startup.
|
||
- Ensured object parsing is consistently re-evaluated on every job run, with correct detection of added or removed objects.
|
||
- Prevented internal server errors and Gunicorn worker timeouts caused by long-running external Graph operations.
|
||
|
||
Overall, v0.1.4 significantly improves robustness, consistency, and fault tolerance across database migrations, job parsing, and manual mail imports.
|
||
|
||
---
|
||
|
||
## v0.1.3
|
||
|
||
### Logging & Stability
|
||
- Fixed logging persistence so log entries are consistently stored in the database.
|
||
- Resolved cases where certain log events were not stored due to object lifecycle handling.
|
||
- Improved reliability of log creation during background/asynchronous processes.
|
||
- Corrected log retrieval so stored logs are properly fetched and shown in the web UI.
|
||
- Added pagination to the logging overview (20 entries per page).
|
||
- Extended the logging view to show all available log fields and fixed missing columns in the UI.
|
||
|
||
### UI & Table Layout Improvements
|
||
- Improved the logging page usability by placing pagination controls at the top and keeping them available at the bottom.
|
||
- Increased logging table width to better fit a 1080p layout.
|
||
- Fixed column layout so all columns remain in consistent positions regardless of content length.
|
||
- Updated status styling to use colored text only within the status column (Success, Warning, Error/Failed, Missed), including clear differentiation for overrides.
|
||
- Fixed JavaScript errors in the Daily Jobs popup that prevented rendering.
|
||
|
||
### Jobs & Daily Jobs Enhancements
|
||
- Standardized default sorting for both Jobs and Daily Jobs tables (Customer → Backup → Type → Job name).
|
||
- Persisted the Daily Jobs start date setting in the database and ensured it reloads correctly in the Settings UI.
|
||
- Corrected missed-status calculation to start from the configured Daily Jobs start date.
|
||
- Improved Daily Jobs table readability:
|
||
- Moved the number of runs into a dedicated Runs column.
|
||
- Prevented layout shifting caused by variable text in the Last result column.
|
||
- Restored the original Runs visual representation and adjusted placement for better readability.
|
||
- Reduced the Last result column width so only status text is shown and the Runs column remains visible.
|
||
|
||
### Parsing & Data Normalization
|
||
- Stripped retry suffixes like “(Retry 1)”, “(Retry 2)”, etc. from job names so retries don’t create separate job identities.
|
||
- Extended the NAKIVO parser to support VMware Replication job emails:
|
||
- Detects job type (Backup vs Replication) based on email content.
|
||
- Improves replication job name parsing.
|
||
- Extracts VM names from the Objects/Virtual Machines section.
|
||
- Maps overall job status correctly for replication reports.
|
||
|
||
### Tickets & Remarks (New Feature Area)
|
||
- Added database schema for globally unique, persistent tickets linked to job runs for long-term reporting:
|
||
- New tables: tickets, ticket_scopes, ticket_job_runs.
|
||
- Ticket codes are globally unique using format TYYYYMMDD.NNNN.
|
||
- Tickets require at least one customer scope.
|
||
- Added database schema for remarks with scoped attachment and persistent linkage to job runs:
|
||
- New tables: remarks, remark_scopes, remark_job_runs.
|
||
- Implemented a new Tickets page with tabbed navigation (Tickets / Remarks):
|
||
- Overviews with filtering.
|
||
- Detail views showing scopes, linked job runs, and actions.
|
||
- Added indicators in Daily Jobs to show active tickets and/or remarks.
|
||
- Added ticket/remark management in the job run popup (create, edit, resolve).
|
||
- Introduced consistent icons for tickets, remarks, actions, and status indicators.
|
||
- Added backend API endpoints for listing/creating/updating/resolving/linking tickets and remarks, plus an endpoint to retrieve all alerts for a specific job run.
|
||
|
||
---
|
||
|
||
## v0.1.2
|
||
|
||
This release focuses on improved parser support, more robust data cleanup, and a fully reworked in-app logging and object persistence system.
|
||
|
||
### Parser & support
|
||
- Extended the Synology Hyper Backup mail parser with proper recognition of Strato HiDrive backups.
|
||
- Added support for parsing job names from the “Backup Task:” field for Strato HiDrive.
|
||
- Correct handling of successful runs without listed objects.
|
||
- Added a Strato HiDrive example to the parser templates for validation and reference.
|
||
|
||
### Administration & cleanup
|
||
- Introduced an admin-only action to delete all jobs in a single operation.
|
||
- Ensured related run mails are moved back to the Inbox when jobs are deleted.
|
||
- Fixed foreign key constraint issues by enforcing the correct deletion order:
|
||
- run_object_links first
|
||
- job_object_links next
|
||
- then job runs and jobs
|
||
- Stabilized the “Delete all jobs” action to fully clean up all related data.
|
||
|
||
### Logging (reworked)
|
||
- Moved logging away from container/stdout logging to in-app logging.
|
||
- Introduced AdminLog-based logging for:
|
||
- Mail import
|
||
- Auto-approval
|
||
- Manual job approval
|
||
- Job deletion
|
||
- Added detailed logging per imported and auto-approved email.
|
||
- Added summary logging at the end of each mail import run.
|
||
- Ensured all relevant events are logged exclusively via the AdminLog table and visible on the Logging page.
|
||
|
||
### Object persistence
|
||
- Restored persistence of parsed objects after manual approval of inbox mails.
|
||
- Restored persistence of parsed objects during auto-approval (reparse-all).
|
||
- Ensured objects from approved mails are:
|
||
- Upserted into `customer_objects`
|
||
- Linked to jobs via `job_object_links` (with first/last seen tracking)
|
||
- Linked to runs via `run_object_links` (with status and error details)
|
||
- Added centralized helper logic to ensure consistent object persistence.
|
||
- Added an admin-only maintenance action to backfill missing object links for already approved runs.
|
||
- Object persistence failures no longer block mail approval.
|
||
- Daily Jobs and Run detail views correctly display objects again for both new and historical runs after backfilling. |