67 KiB
v20260115-01-autotask-settings
Changes:
- Added initial Autotask integration settings structure to Backupchecks.
- Introduced new system settings demonstrating Autotask configuration fields such as enable toggle, environment selection, credentials, tracking identifier, and Backupchecks base URL.
- Prepared data model and persistence layer to store Autotask-related configuration.
- Laid groundwork for future validation and integration logic without enabling ticket creation or customer mapping.
- Ensured changes are limited to configuration foundations only, keeping Phase 1 scope intact.
v20260115-02-autotask-settings-migration-fix
Changes:
- Fixed Autotask system settings migration so it is always executed during application startup.
- Added safe, idempotent column existence checks to prevent startup failures on re-deployments.
- Ensured all Autotask-related system_settings columns are created before being queried.
- Prevented aborted database transactions caused by missing columns during settings initialization.
- Improved overall stability of the Settings page when Autotask integration is enabled.
v20260115-03-autotask-settings-ui
Changes:
- Added visible Autotask configuration section under Settings → Integrations.
- Implemented form fields for enabling Autotask integration, environment selection, API credentials, tracking identifier, and Backupchecks base URL.
- Wired Autotask settings to SystemSettings for loading and saving configuration values.
- Added Diagnostics & Reference Data section with actions for testing the Autotask connection and refreshing reference data.
- Kept all functionality strictly within Phase 1 scope without introducing ticket or customer logic.
v20260115-04-autotask-reference-data-fix
Changes:
- Fixed Autotask API client to use correct endpoints for reference data instead of invalid
/queryroutes. - Implemented proper retrieval of Autotask Queues and Ticket Sources via collection endpoints.
- Added dynamic retrieval of Autotask Priorities using ticket entity metadata and picklist values.
- Cached queues, ticket sources, and priorities in system settings for safe reuse in the UI.
- Updated Autotask settings UI to use dropdowns backed by live Autotask reference data.
- Improved “Test connection” to validate authentication and reference data access reliably.
- Fixed admin event logging to prevent secondary exceptions during error handling.
v20260115-05-autotask-queues-picklist-fix
Changes:
- Reworked Autotask reference data retrieval to use Ticket entity picklists instead of non-existent top-level resources.
- Retrieved Queues via the Tickets.queueID picklist to ensure compatibility with all Autotask tenants.
- Retrieved Ticket Sources via the Tickets.source picklist instead of a direct collection endpoint.
- Kept Priority retrieval fully dynamic using the Tickets.priority picklist.
- Normalized picklist values so IDs and display labels are handled consistently in settings dropdowns.
- Fixed Autotask connection test to rely on picklist availability, preventing false 404 errors.
v20260115-06-autotask-auth-fallback
Changes:
- Improved Autotask authentication handling to support sandbox-specific behavior.
- Implemented automatic fallback authentication flow when initial Basic Auth returns HTTP 401.
- Added support for header-based authentication using UserName and Secret headers alongside the Integration Code.
- Extended authentication error diagnostics to include selected environment and resolved Autotask zone information.
- Increased reliability of Autotask connection testing across different tenants and sandbox configurations.
v20260115-07-autotask-picklist-field-detect
Changes:
- Improved detection of Autotask Ticket entity picklist fields to handle tenant-specific field naming.
- Added fallback matching logic based on field name and display label for picklist fields.
- Fixed queue picklist resolution when fields are not named exactly
queueorqueueid. - Applied the same robust detection logic to ticket priority picklist retrieval.
- Prevented connection test failures caused by missing or differently named metadata fields.
v20260115-08-autotask-entityinfo-fields-shape-fix
Changes:
- Fixed parsing of Autotask entityInformation responses to correctly read field metadata from the
fieldsattribute. - Extended metadata normalization to support different response shapes returned by Autotask.
- Improved picklist value handling to support both inline picklist values and URL-based retrieval.
- Resolved failures in queue, source, and priority picklist detection caused by empty or misparsed field metadata.
- Stabilized Autotask connection testing across sandbox environments with differing metadata formats.
v20260115-09-autotask-customer-company-mapping
- Added explicit Autotask company mapping to customers using ID-based linkage.
- Extended customer data model with Autotask company ID, cached company name, mapping status, and last sync timestamp.
- Implemented Autotask company search and lookup endpoints for customer mapping.
- Added mapping status handling to detect renamed, missing, or invalid Autotask companies.
- Updated Customers UI to allow searching, selecting, refreshing, and clearing Autotask company mappings.
- Ensured mappings remain stable when Autotask company names change and block future ticket actions when mappings are invalid.
v20260115-10-autotask-customers-settings-helper-fix
- Fixed /customers crash caused by missing _get_or_create_settings by removing reliance on shared star-imported helpers.
- Added a local SystemSettings get-or-create helper in customers routes to prevent runtime NameError in mixed/partial deployments.
- Added explicit imports for SystemSettings, db, and datetime to keep the Customers page stable across versions.
v20260115-11-autotask-companyname-unwrap
- Fixed Autotask company name being shown as "Unknown" by correctly unwrapping nested Autotask API responses.
- Improved company lookup handling to support different response shapes (single item and collection wrappers).
- Ensured the cached Autotask company name is stored and displayed consistently after mapping and refresh.
v20260115-12-autotask-customers-refreshall-mappings
- Added a “Refresh all Autotask mappings” button on the Customers page to validate all mapped customers in one action.
- Implemented a new backend endpoint to refresh mapping status for all customers with an Autotask Company ID and return a status summary (ok/renamed/missing/invalid).
- Updated the Customers UI to call the refresh-all endpoint, show a short result summary, and reload to reflect updated mapping states.
v20260115-14-autotask-runchecks-ticket-migration-fix
- Fixed missing database helper used by the Autotask ticket fields migration for job runs.
- Corrected the job_runs migration to ensure Autotask ticket columns are created reliably and committed properly.
- Resolved Run Checks errors caused by incomplete database migrations after introducing Autotask ticket support.
v20260115-15-autotask-default-ticket-status-setting
- Added “Default Ticket Status” dropdown to Autotask settings (Ticket defaults).
- Implemented retrieval and caching of Autotask ticket statuses as reference data for dropdown usage.
- Extended reference data refresh to include Ticket Statuses and updated diagnostics counters accordingly.
- Added database column for cached ticket statuses and included it in migrations for existing installations.
v20260115-16-autotask-ticket-create-response-fix
- Fixed Autotask ticket creation handling for tenants that return a lightweight or empty POST /Tickets response.
- Added support for extracting the created ticket ID from itemId/id fields and from the Location header.
- Added a follow-up GET /Tickets/{id} to always retrieve the full created ticket object (ensuring ticketNumber/id are available).
v20260115-17-autotask-ticket-create-trackingid-lookup
- Reworked Autotask ticket creation flow to no longer rely on POST /Tickets response data for returning an ID.
- Added deterministic fallback lookup using Tickets/query filtered by TrackingIdentifier (and CompanyID when available).
- Ensured the created ticket is reliably retrieved via follow-up GET /Tickets/{id} so ticketNumber/id can always be stored.
- Eliminated false-negative ticket creation errors when Autotask returns an empty body and no Location header.
v20260115-19-autotask-ticket-create-debug-logging
- Added optional verbose Autotask ticket creation logging (guarded by BACKUPCHECKS_AUTOTASK_DEBUG=1).
- Introduced per-request correlation IDs and included them in ticket creation error messages for log tracing.
- Logged POST /Tickets response characteristics (status, headers, body preview) to diagnose tenants returning incomplete create responses.
- Logged fallback Tickets/query lookup payload and result shape to pinpoint why deterministic lookup fails.
v20260116-01-autotask-ticket-id-normalization
Changes:
- Normalized Autotask GET /Tickets/{id} API responses by unwrapping the returned "item" object.
- Ensured the ticket data is returned as a flat object so existing logic can reliably read the ticket id.
- Enabled correct retrieval of the Autotask ticketNumber via a follow-up GET after ticket creation.
- Prevented false error messages where ticket creation succeeded but no ticket id was detected.
v20260116-02-runchecks-autotask-create-refresh
Changes:
- Fixed a JavaScript error in the Run Checks view where a non-existent renderModal() function was called after creating an Autotask ticket.
- Replaced the renderModal() call with renderRun() to properly refresh the Run Checks modal state.
- Ensured the Autotask ticket status is updated in the UI without throwing a frontend error.
v20260116-03-autotask-ticket-linking-visibility
Changes:
- Ensured Autotask tickets created via Run Checks are stored as internal Ticket records instead of only external references.
- Linked created Autotask tickets to the corresponding Job Run so they appear in Tickets/Remarks.
- Added proper ticket association to Job Details, matching the behaviour of manually entered tickets.
- Updated the Run Checks view to show the ticket indicator when an Autotask ticket is linked to a run.
v20260116-04-runchecks-autotask-ticket-polling
Changes:
- Added read-only Autotask ticket polling triggered on Run Checks page load
- Introduced backend endpoint to poll only relevant active Autotask tickets linked to visible runs
- Implemented ticket ID deduplication to minimize Autotask API calls
- Ensured polling is best-effort and does not block Run Checks rendering
- Added client support for bulk ticket queries with per-ticket fallback
- Updated Run Checks UI to display polled PSA ticket status without modifying run state
- Explicitly prevented any ticket mutation, resolution, or Backupchecks state changes
v20260116-05-autotask-ticket-create-link-all-open-runs
Changes:
- Fixed Autotask ticket creation to link the newly created ticket to all relevant open runs of the same job
- Aligned automatic ticket creation behaviour with existing manual ticket linking logic
- Ensured ticket linkage is applied consistently across runs until the ticket is resolved
- Prevented Phase 2.1 polling from being blocked by incomplete ticket-run associations
- No changes made to polling logic, resolution logic, or PSA state interpretation
v20260116-06-runchecks-polling-merge-fix
Changes:
- Restored Phase 2.1 read-only Autotask polling logic after ticket-creation fix overwrote Run Checks routes
- Merged polling endpoint and UI polling trigger with updated ticket-linking behaviour
- Ensured polled PSA ticket status is available again on the Run Checks page
- No changes made to ticket creation logic, resolution handling, or Backupchecks run state
v20260116-07-autotask-ticket-link-all-runs-ticketjobrun-fix
Changes:
- Fixed Autotask ticket creation linking so the internal TicketJobRun associations are created for all relevant open runs of the same job
- Ensured ticket numbers and ticket presence are consistently visible per run (Run Checks and Job Details), not only for the selected run
- Made the list of runs to link deterministic by collecting run IDs first, then applying both run field updates and internal ticket linking across that stable set
- No changes made to polling logic or PSA status interpretation
v20260116-08-autotask-ticket-backfill-ticketjobrun
- Fixed inconsistent ticket linking when creating Autotask tickets from the Run Checks page.
- Ensured that newly created Autotask tickets are linked to all related job runs, not only the selected run.
- Backfilled ticket-to-run associations so tickets appear correctly in the Tickets overview.
- Corrected Job Details visibility so open runs linked to the same ticket now display the ticket number consistently.
- Aligned Run Checks, Tickets, and Job Details views to use the same ticket-jobrun linkage logic.
v0.1.21
This release focuses on improving correctness, consistency, and access control across core application workflows, with particular attention to changelog rendering, browser-specific mail readability, Run Checks visibility, role-based access restrictions, override flexibility, and VSPC object linking reliability. The goal is to ensure predictable behavior, clearer diagnostics, and safer administration across both day-to-day operations and complex multi-entity reports.
Changelog Rendering and Documentation Accuracy
- Updated the Changelog route to render remote Markdown content instead of plain text.
- Enabled full Markdown parsing so headings, lists, links, and code blocks are displayed correctly.
- Ensured the changelog always fetches the latest version directly from the source repository at request time.
- Removed legacy plain-text rendering to prevent loss of structure and formatting.
Mail Rendering and Browser Compatibility
- Forced a light color scheme for embedded mail content to prevent Microsoft Edge from applying automatic dark mode styling.
- Added explicit
color-schemeandforced-color-adjustrules so original mail CSS is respected. - Ensured consistent mail readability across Edge and Firefox.
- Applied these fixes consistently across Inbox, Deleted Inbox, Job Details, Run Checks, Daily Jobs, and Admin All Mail views.
Run Checks Visibility and Consistency
- Added support for displaying the overall remark (overall_message) directly on the Run Checks page.
- Ensured consistency between Run Checks and Job Details, where the overall remark was already available.
- Improved operator visibility of high-level run context without requiring navigation to job details.
Initial Setup and User Existence Safeguards
- Fixed an incorrect redirect to the “Initial admin setup” page when users already exist.
- Changed setup detection logic from “admin user exists” to “any user exists”.
- Ensured existing environments always show the login page instead of allowing a new initial admin to be created.
- Prevented direct access to the initial setup route when at least one user is present.
Role-Based Access Control and Menu Restrictions
- Restricted the Reporter role to only access Dashboard, Reports, Changelog, and Feedback.
- Updated menu rendering to fully hide unauthorized menu items for Reporter users.
- Adjusted route access to ensure Feedback pages remain accessible for the Reporter role.
- Improved overall consistency between visible navigation and backend access rules.
Override Matching Flexibility and Maintainability
- Added configurable error text matching modes for overrides: contains, exact, starts with, and ends with.
- Updated override evaluation logic to apply the selected match mode across run remarks and object error messages.
- Extended the overrides UI with a match type selector and improved edit support for existing overrides.
- Added a database migration to create and backfill the
overrides.match_error_modefield for existing records.
Job Deletion Stability
- Fixed an error that occurred during job deletion.
- Corrected backend deletion logic to prevent runtime exceptions.
- Ensured related records are handled safely to avoid constraint or reference errors during removal.
VSPC Object Linking and Normalization
- Fixed VSPC company name normalization so detection and object prefixing behave consistently.
- Ensured filtered object persistence respects the UNIQUE(customer_id, object_name) constraint.
- Correctly update
last_seentimestamps for existing objects. - Added automatic object persistence routing for VSPC per-company runs, ensuring objects are linked to the correct customer and job.
- Improved auto-approval for VSPC Active Alarms summaries with per-company run creation and case-insensitive object matching.
- Added best-effort retroactive processing to automatically link older inbox messages once company mappings are approved.
VSPC Normalization Bug Fixes and Backward Compatibility
- Removed duplicate definitions of VSPC Active Alarms company extraction logic that caused inconsistent normalization.
- Ensured a single, consistent normalization path is used when creating jobs and linking objects.
- Improved object linking so real objects (e.g. HV01, USB Disk) are reliably associated with their jobs.
- Restored automatic re-linking for both new and historical VSPC mails.
- Added backward-compatible matching to prevent existing VSPC jobs from breaking due to earlier inconsistent company naming.
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 (A–Z).
- 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 | ”.
- 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 “ 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.
Mail Import Reliability and Data Integrity
- Updated the mail import flow so messages are only moved to the processed folder after a successful database store and commit.
- 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.
v0.1.18
This release focuses on improving ticket reuse, scoping, and visibility across jobs, runs, and history views to ensure consistent and flexible ticket handling.
Ticket Linking and Reuse
- 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).
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.
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.
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.pyfile 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
NULLcustomer 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
TemplateSyntaxErrorissues 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.6as 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
ResourceClosedErrorexceptions 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)
- Upserted into
- 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.