From d095a23944129009decfc3dd423cb9a3cc9530e7 Mon Sep 17 00:00:00 2001 From: Ivo Oskamp Date: Mon, 13 Apr 2026 15:42:50 +0200 Subject: [PATCH] Fix Run Checks remark network error and prepare v0.2.5 changelog --- .../backupchecks/src/backend/app/changelog.py | 41 +++++++++++++++++++ .../src/backend/app/ticketing_utils.py | 3 -- .../src/templates/main/run_checks.html | 10 ++++- docs/changelog.md | 26 ++++++++++++ 4 files changed, 75 insertions(+), 5 deletions(-) diff --git a/containers/backupchecks/src/backend/app/changelog.py b/containers/backupchecks/src/backend/app/changelog.py index d9e12eb..a6a8928 100644 --- a/containers/backupchecks/src/backend/app/changelog.py +++ b/containers/backupchecks/src/backend/app/changelog.py @@ -3,6 +3,47 @@ Changelog data structure for Backupchecks """ CHANGELOG = [ + { + "version": "v0.2.5", + "date": "2026-04-13", + "summary": "Consolidated release since v0.2.4 with manual schedule overrides, Autotask/remark synchronization improvements, Run Checks stability fixes, and refreshed operational documentation.", + "sections": [ + { + "title": "Added", + "type": "feature", + "changes": [ + "Manual schedule override support in Job Details (daily/weekly/monthly) with save/clear endpoint POST /jobs//schedule", + "Job Details now shows First backup detected based on earliest non-missed run", + "Remarks now support source and ticket_id metadata with migration and indexes", + "Autotask resolution text can be mirrored to active internal remarks with source=autotask_resolution and deduplication", + "Documentation Integrations section added with dedicated Cove Data Protection and Veeam Cloud Connect pages" + ] + }, + { + "title": "Changed", + "type": "improvement", + "changes": [ + "Effective schedule resolution is now manual-first across Daily Jobs, Dashboard, Search, Job Details, and Run Checks missed-run generation", + "Missed-run grace window increased from +/- 1 hour to +/- 3 hours in Run Checks and Daily Jobs", + "Schedule inference now also includes Cove API runs (source_type=cove_api) in addition to mail-based runs", + "Run Checks now suppresses repeated Cove runs on the same local day after the first complete success run for that job/day", + "Ticket API active-state logic now uses effective status from both ticket-level and scope-level resolution", + "Settings/Autotask documentation pages were rewritten from placeholder content to current operational guidance" + ] + }, + { + "title": "Fixed", + "type": "bugfix", + "changes": [ + "Run Checks modal mail visibility no longer remains hidden after navigating from Cove runs", + "Run Checks modal responsive behavior improved for smaller viewports so scrolling/content access remains usable", + "Run Checks Link existing Autotask ticket supports cross-company shared/umbrella tickets while preserving validation checks", + "Ticket copy action in Run Checks and Job Detail hardened with improved click handling and clipboard fallback", + "Autotask unresolved-ticket propagation to new runs fixed for edge cases where internal open-ticket rows are temporarily absent" + ] + } + ] + }, { "version": "v0.2.4", "date": "2026-03-26", diff --git a/containers/backupchecks/src/backend/app/ticketing_utils.py b/containers/backupchecks/src/backend/app/ticketing_utils.py index 2ab6e35..c18579b 100644 --- a/containers/backupchecks/src/backend/app/ticketing_utils.py +++ b/containers/backupchecks/src/backend/app/ticketing_utils.py @@ -193,9 +193,6 @@ def link_open_internal_tickets_to_run(*, run: JobRun, job: Job) -> None: except Exception: rows = [] - if not rows: - return - # Link all open tickets to this run (idempotent) for tid, code, t_resolved, ts_resolved in rows: if not TicketJobRun.query.filter_by(ticket_id=int(tid), job_run_id=int(run.id)).first(): diff --git a/containers/backupchecks/src/templates/main/run_checks.html b/containers/backupchecks/src/templates/main/run_checks.html index a656b22..8788667 100644 --- a/containers/backupchecks/src/templates/main/run_checks.html +++ b/containers/backupchecks/src/templates/main/run_checks.html @@ -892,10 +892,16 @@ table.addEventListener('change', function (e) { opts = opts || {}; opts.headers = opts.headers || {}; opts.headers['Content-Type'] = 'application/json'; + opts.headers['X-Requested-With'] = 'XMLHttpRequest'; + if (!opts.credentials) opts.credentials = 'same-origin'; return fetch(url, opts).then(function (r) { - return r.json().then(function (j) { + return r.text().then(function (txt) { + var j = null; + try { j = txt ? JSON.parse(txt) : null; } catch (_) { j = null; } if (!r.ok || !j || j.status !== 'ok') { - var msg = (j && j.message) ? j.message : ('Request failed (' + r.status + ')'); + var msg = (j && j.message) + ? j.message + : ((txt && txt.trim()) ? txt.trim() : ('Request failed (' + r.status + ')')); throw new Error(msg); } return j; diff --git a/docs/changelog.md b/docs/changelog.md index a9eca2e..3b10155 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,3 +1,29 @@ +## v0.2.5 + +This release bundles all changes made since `v0.2.4`, including schedule management improvements, Autotask/remark synchronization, Run Checks stability updates, and a full documentation refresh. + +### Added +- **Manual schedule overrides per job** — Job Details now supports saving and clearing manual schedules (`Daily`, `Weekly`, `Monthly`) via `POST /jobs//schedule`. +- **First backup detected in Job Details** — shows the earliest non-missed run timestamp for operational context. +- **Autotask resolution remark metadata** — remarks now support `source` and optional `ticket_id`, with migration and indexes. +- **Autotask resolution mirroring** — PSA ticket resolution text can be mirrored into internal active remarks (`source=autotask_resolution`) with deduplication. +- **Documentation Integrations section** — added dedicated pages for Cove Data Protection and Veeam Cloud Connect. + +### Changed +- **Effective schedule resolution (manual-first)** — Daily Jobs, Dashboard, Search, Job Details and Run Checks missed-run logic now use effective schedule resolution (`manual` override first, inferred fallback). +- **Missed-run grace window widened** — tolerance changed from `±1 hour` to `±3 hours` in Daily Jobs and Run Checks. +- **Schedule inference coverage** — inference now also considers Cove API runs (`source_type='cove_api'`) next to mail-based runs. +- **Run Checks Cove deduplication in-day** — once a complete Cove success run is detected for a job/day, newer runs that day are suppressed in Run Checks overview/modal. +- **Tickets API active-state semantics** — effective active state now considers both ticket-level and scope-level resolution. +- **Documentation refresh** — Settings and Autotask documentation pages were replaced with current operational guidance; outdated TODO audit/Cove documents were archived. + +### Fixed +- **Run Checks modal mail visibility** — navigating from Cove runs no longer leaves regular mail runs hidden. +- **Run Checks responsive behavior on smaller screens** — modal layout/scroll behavior improved so content and footer remain reachable. +- **Autotask link-existing cross-company support** — shared/umbrella tickets can be linked across companies while terminal/incomplete validations remain enforced. +- **Ticket copy action robustness** — click/copy handling improved in Run Checks and Job Details. +- **Autotask propagation to new runs** — fixed a propagation path where an open Autotask ticket could disappear on a next-day run if internal open-ticket rows were temporarily absent; unresolved ticket links are now propagated consistently. + ## v0.2.4 ### Fixed