Finalize documentation audit batches and settings docs
This commit is contained in:
parent
3dae203cf6
commit
7b4b889911
@ -3,7 +3,177 @@
|
||||
**Branch:** `v20260207-02-wiki-documentation`
|
||||
**Date Started:** 2026-02-07
|
||||
**Date Updated:** 2026-02-08 (Latest: Per-job review corrections)
|
||||
**Status:** In Progress - 19 of 33 pages complete (58%)
|
||||
**Status:** Review Required - full documentation verification against current UI/flows
|
||||
|
||||
---
|
||||
|
||||
## ✅ Validation Update (2026-03-26)
|
||||
|
||||
This TODO was re-checked against the current codebase and documentation templates.
|
||||
|
||||
Findings:
|
||||
- The progress metrics in this file are outdated (`19/33`) and no longer reflect the repository state.
|
||||
- The documentation template tree currently contains **39 files** under `containers/backupchecks/src/templates/documentation`.
|
||||
- Because the app layout and multiple workflows changed after the original documentation wave, **all documentation pages require content review** for functional correctness (not only layout styling).
|
||||
|
||||
Decision:
|
||||
- Keep this TODO active.
|
||||
- Treat this as a full documentation audit task: verify each page against current UI/routes/behavior and update screenshots/text where needed.
|
||||
|
||||
---
|
||||
|
||||
## 🧾 Review Checklist (2026-03-26)
|
||||
|
||||
Gebruik deze lijst voor de volledige inhoudsreview tegen de huidige applicatie.
|
||||
|
||||
**Legenda**
|
||||
- `P1` = hoge prioriteit (kritieke workflows / grootste kans op afwijkingen)
|
||||
- `P2` = normale prioriteit
|
||||
- `P3` = lage prioriteit
|
||||
|
||||
### Global checks (voor elke pagina)
|
||||
- [ ] Route, paginatitel en navigatiepad kloppen met huidige UI
|
||||
- [ ] Terminologie klopt met huidige labels/knoppen in de app
|
||||
- [ ] Screenshots zijn actueel (nieuwe layout) of vervangen/verwijderd
|
||||
- [ ] Tekst verwijst niet naar verwijderde/gewijzigde functies
|
||||
- [ ] Role-based behavior (admin/operator/viewer/reporter) klopt
|
||||
|
||||
### Missing documentation topics (new pages required)
|
||||
- [x] `[P1]` Cove Accounts + Cove run detail flow documenteren
|
||||
- [x] `[P1]` Veeam Cloud Connect accounts/run flow documenteren
|
||||
- [x] `[P1]` Run Checks Autotask "Link existing" gedrag updaten (incl. cross-company)
|
||||
- [ ] `[P1]` Sidebar layout v2 consistent door alle docs verwerken
|
||||
|
||||
### Page-by-page review
|
||||
#### Getting Started
|
||||
- [ ] `[P2]` getting-started/what-is-backupchecks
|
||||
- [ ] `[P2]` getting-started/first-login
|
||||
- [ ] `[P2]` getting-started/quick-start
|
||||
|
||||
#### User Management
|
||||
- [ ] `[P2]` users/users-and-roles
|
||||
- [ ] `[P2]` users/login-authentication
|
||||
- [ ] `[P2]` users/profile-settings
|
||||
|
||||
#### Customers & Jobs
|
||||
- [ ] `[P2]` customers-jobs/managing-customers
|
||||
- [ ] `[P2]` customers-jobs/configuring-jobs
|
||||
- [ ] `[P2]` customers-jobs/approved-jobs
|
||||
- [ ] `[P2]` customers-jobs/job-schedules
|
||||
|
||||
#### Mail & Import
|
||||
- [ ] `[P1]` mail-import/setup
|
||||
- [ ] `[P1]` mail-import/inbox-management
|
||||
- [ ] `[P1]` mail-import/mail-parsing
|
||||
- [ ] `[P1]` mail-import/auto-import
|
||||
|
||||
#### Backup Review
|
||||
- [ ] `[P1]` backup-review/approving-backups
|
||||
- [ ] `[P1]` backup-review/daily-jobs
|
||||
- [ ] `[P1]` backup-review/run-checks-modal
|
||||
- [ ] `[P1]` backup-review/overrides
|
||||
- [ ] `[P1]` backup-review/remarks-tickets
|
||||
|
||||
#### Reports
|
||||
- [ ] `[P1]` reports/creating-reports
|
||||
- [ ] `[P1]` reports/relative-periods
|
||||
- [ ] `[P1]` reports/scheduling
|
||||
- [ ] `[P1]` reports/exporting-data
|
||||
|
||||
#### Autotask Integration
|
||||
- [x] `[P1]` autotask/setup-configuration
|
||||
- [x] `[P1]` autotask/company-mapping
|
||||
- [x] `[P1]` autotask/creating-tickets
|
||||
- [x] `[P1]` autotask/ticket-management
|
||||
|
||||
#### Settings
|
||||
- [x] `[P1]` settings/general
|
||||
- [x] `[P1]` settings/mail-configuration
|
||||
- [x] `[P1]` settings/autotask-integration
|
||||
- [x] `[P1]` settings/entra-sso
|
||||
- [x] `[P1]` settings/reporting-settings
|
||||
- [x] `[P1]` settings/user-management
|
||||
- [x] `[P1]` settings/maintenance
|
||||
|
||||
#### Troubleshooting
|
||||
- [ ] `[P2]` troubleshooting/common-issues
|
||||
- [ ] `[P2]` troubleshooting/faq
|
||||
- [ ] `[P2]` troubleshooting/support-contact
|
||||
|
||||
---
|
||||
|
||||
## 🔎 Batch 1 Findings (P1) — 2026-03-26
|
||||
|
||||
### A. Immediate correctness fixes (existing content)
|
||||
- [x] `documentation/backup-review/daily-jobs.html`
|
||||
- Remove/replace incorrect claim that successful jobs are automatically reviewed.
|
||||
- Align workflow text with current behavior: review is handled via Run Checks job-level review.
|
||||
- [x] `documentation/backup-review/approving-backups.html`
|
||||
- Replace wording "select multiple runs" with "select multiple jobs" where bulk review is described.
|
||||
- Re-verify Daily Jobs vs Run Checks role split text for current operational flow.
|
||||
- [x] `documentation/backup-review/run-checks-modal.html`
|
||||
- Fix broken cross-link: `url_for('documentation.page', section='autotask', page='overview')` does not exist.
|
||||
- Replace with valid links to existing Autotask pages.
|
||||
- [x] `documentation/backup-review/remarks-tickets.html`
|
||||
- Fix same broken `autotask/overview` link.
|
||||
- Re-check Autotask behavior section against current link-existing/create/resolve-note flow.
|
||||
|
||||
### B. Placeholder pages that require full rewrite (currently "Coming Soon")
|
||||
- [ ] `documentation/reports/creating-reports.html`
|
||||
- [ ] `documentation/reports/relative-periods.html`
|
||||
- [ ] `documentation/reports/scheduling.html`
|
||||
- [ ] `documentation/reports/exporting-data.html`
|
||||
- [x] `documentation/autotask/setup-configuration.html`
|
||||
- [x] `documentation/autotask/company-mapping.html`
|
||||
- [x] `documentation/autotask/creating-tickets.html`
|
||||
- [x] `documentation/autotask/ticket-management.html`
|
||||
- [x] `documentation/settings/general.html`
|
||||
- [x] `documentation/settings/mail-configuration.html`
|
||||
- [x] `documentation/settings/autotask-integration.html`
|
||||
- [x] `documentation/settings/reporting-settings.html`
|
||||
- [x] `documentation/settings/user-management.html`
|
||||
- [x] `documentation/settings/maintenance.html`
|
||||
|
||||
### C. Pages with content present but requiring targeted re-validation
|
||||
- [x] `documentation/settings/entra-sso.html`
|
||||
- Verify navigation path labels (Integrations wording/layout) against current settings UI.
|
||||
- Keep untested warning unless production validation has been completed.
|
||||
- [ ] `documentation/mail-import/setup.html`
|
||||
- Re-check exact settings navigation wording and folder-browser flow against current UI labels.
|
||||
- [ ] `documentation/mail-import/auto-import.html`
|
||||
- Re-check references to Logging page path/wording and Imports section labels.
|
||||
|
||||
---
|
||||
|
||||
## 🔎 Batch 2 Findings (P1) — 2026-03-26 (Completed)
|
||||
|
||||
### A. Autotask docs rewritten from placeholders
|
||||
- [x] `documentation/autotask/setup-configuration.html`
|
||||
- [x] `documentation/autotask/company-mapping.html`
|
||||
- [x] `documentation/autotask/creating-tickets.html`
|
||||
- [x] `documentation/autotask/ticket-management.html`
|
||||
|
||||
### B. Autotask behavior alignment fixes
|
||||
- [x] Documented `Link existing` cross-company behavior for shared/umbrella tickets.
|
||||
- [x] Removed references to non-existent `autotask/overview` page and replaced broken links.
|
||||
- [x] Re-validated ticket lifecycle notes (create/link/resolve note) against current Run Checks behavior.
|
||||
|
||||
---
|
||||
|
||||
## 🔎 Batch 3 Findings (P1) — 2026-03-26 (Completed)
|
||||
|
||||
### A. Settings docs rewritten from placeholders
|
||||
- [x] `documentation/settings/general.html`
|
||||
- [x] `documentation/settings/mail-configuration.html`
|
||||
- [x] `documentation/settings/autotask-integration.html`
|
||||
- [x] `documentation/settings/reporting-settings.html`
|
||||
- [x] `documentation/settings/user-management.html`
|
||||
- [x] `documentation/settings/maintenance.html`
|
||||
|
||||
### B. Settings content alignment notes
|
||||
- [x] Re-validated `documentation/settings/entra-sso.html` against current Settings -> Integrations navigation and field names.
|
||||
- [x] Reporting page updated to explicitly document current status: no dedicated Reporting settings card is available in Settings.
|
||||
- [x] Removed all placeholder text from Settings documentation pages.
|
||||
|
||||
---
|
||||
|
||||
@ -67,17 +237,17 @@
|
||||
|
||||
### Remaining Work 🚧
|
||||
|
||||
**Phase 4: Advanced Features (0/14 pages - PLACEHOLDER)**
|
||||
**Phase 4: Advanced Features (10/14 pages complete)**
|
||||
- Reports (0/4 pages)
|
||||
- Autotask Integration (0/4 pages)
|
||||
- Settings (0/6 pages)
|
||||
- Autotask Integration (4/4 pages - COMPLETE)
|
||||
- Settings (6/6 pages - COMPLETE)
|
||||
- Troubleshooting (0/3 pages)
|
||||
|
||||
**Progress Summary:**
|
||||
- ✅ 19 of 33 pages complete (58%)
|
||||
- ✅ 10 screenshots added
|
||||
- ✅ All completed pages reviewed and corrected based on actual UI
|
||||
- ⏳ 14 pages remaining (placeholders created)
|
||||
- ✅ Batch 1 documentation updates completed (Integrations + critical Run Checks wording/link fixes).
|
||||
- ✅ Batch 2 documentation updates completed (Autotask section rewritten and aligned with current behavior).
|
||||
- ✅ Batch 3 documentation updates completed (Settings section rewritten and revalidated).
|
||||
- ⏳ Remaining focus: Mail Import re-validation pages, Troubleshooting pages, and final Sidebar Layout v2 consistency pass.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -6,6 +6,18 @@
|
||||
|
||||
---
|
||||
|
||||
## ✅ Validation Update (2026-03-26)
|
||||
|
||||
Status re-checked against current codebase: this TODO is still open and not implemented yet.
|
||||
|
||||
Confirmed as NOT present:
|
||||
- `operator_notifications` table/model
|
||||
- Notification inbox routes/UI (e.g. `/notifications`)
|
||||
- Notification lifecycle audit events (`notification_created`, `notification_read`, `notification_handled`)
|
||||
- Dedicated mailbox alias ingestion flow for `backups+notification@...`
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Goal
|
||||
|
||||
Maak een notificatieflow waarbij collega's een email sturen naar `backups+notification@...`, waarna Backupchecks deze berichten ophaalt en de operator informeert in de applicatie (optioneel ook via email).
|
||||
|
||||
@ -6,6 +6,20 @@
|
||||
|
||||
---
|
||||
|
||||
## ✅ Validation Update (2026-03-26)
|
||||
|
||||
Status re-checked against current codebase: this TODO is still open and largely not implemented yet.
|
||||
|
||||
Confirmed as NOT present (core planned scope):
|
||||
- Reporting settings extension in Settings (`reporting_*` fields, branding/email configuration)
|
||||
- Relative period engine (`period_type`, `relative_period`, timezone-aware calculator)
|
||||
- Report model extensions for scheduling metadata and per-report email template fields
|
||||
- Scheduling execution/retry flow for automatic report delivery
|
||||
|
||||
Note: only small earlier UI items at the top of this TODO appear completed; the main roadmap sections remain open.
|
||||
|
||||
---
|
||||
|
||||
## ✅ Wat is al gedaan
|
||||
|
||||
- ✅ Scheduling placeholder verwijderd van reports overview pagina (reports.html)
|
||||
|
||||
@ -51,6 +51,14 @@ DOCUMENTATION_STRUCTURE = {
|
||||
{'slug': 'auto-import', 'title': 'Auto-Import Configuration'},
|
||||
]
|
||||
},
|
||||
'integrations': {
|
||||
'title': 'Integrations',
|
||||
'icon': '🔌',
|
||||
'pages': [
|
||||
{'slug': 'cove-data-protection', 'title': 'Cove Data Protection'},
|
||||
{'slug': 'veeam-cloud-connect', 'title': 'Veeam Cloud Connect'},
|
||||
]
|
||||
},
|
||||
'backup-review': {
|
||||
'title': 'Backup Review',
|
||||
'icon': '✅',
|
||||
|
||||
@ -4,16 +4,65 @@
|
||||
<h1>Company Mapping</h1>
|
||||
|
||||
<p class="lead">
|
||||
Map customers to Autotask companies.
|
||||
Map each Backupchecks customer to the correct Autotask company.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>📝 Coming Soon:</strong>
|
||||
This page is under construction. Full content will be added in a future update.
|
||||
<div class="doc-callout doc-callout-warning">
|
||||
<strong>Required for Autotask actions:</strong><br>
|
||||
Creating or linking Autotask tickets from Run Checks requires a valid customer mapping status.
|
||||
</div>
|
||||
|
||||
<h2>Content</h2>
|
||||
<h2>Where to Manage Mappings</h2>
|
||||
|
||||
<p>Detailed content will be added here in a future update.</p>
|
||||
<ol>
|
||||
<li>Open <a href="{{ url_for('main.customers') }}"><strong>Customers</strong></a>.</li>
|
||||
<li>Use <strong>Edit</strong> on a customer.</li>
|
||||
<li>In the Autotask mapping section:
|
||||
<ul>
|
||||
<li>Search Autotask companies</li>
|
||||
<li>Select result</li>
|
||||
<li>Set mapping / Refresh status / Clear mapping</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
|
||||
<h2>Mapping Status Values</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>OK</strong>: mapping is valid.</li>
|
||||
<li><strong>Renamed</strong>: company still exists but name changed in Autotask.</li>
|
||||
<li><strong>Missing</strong>: temporary lookup/API issue.</li>
|
||||
<li><strong>Invalid</strong>: mapped company no longer exists (e.g. 404).</li>
|
||||
<li><strong>Not mapped</strong>: no company ID set.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Refresh Operations</h2>
|
||||
|
||||
<ul>
|
||||
<li>Per customer: <strong>Refresh status</strong> in the edit modal.</li>
|
||||
<li>Bulk: <strong>Refresh all Autotask mappings</strong> on Customers page.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Import/Export Behavior</h2>
|
||||
|
||||
<ul>
|
||||
<li>Customer CSV supports optional Autotask ID/name columns.</li>
|
||||
<li>Import can include mapping IDs only when explicit option is enabled.</li>
|
||||
<li>After import with IDs, mapping status is revalidated via refresh.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Troubleshooting</h2>
|
||||
|
||||
<ul>
|
||||
<li>If company search fails, verify integration setup in Settings.</li>
|
||||
<li>If status stays <strong>Missing</strong>, check API connectivity/permissions.</li>
|
||||
<li>If status is <strong>Invalid</strong>, remap to the current Autotask company.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Next Steps</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='creating-tickets') }}">Creating Tickets</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='ticket-management') }}">Ticket Management</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -4,16 +4,63 @@
|
||||
<h1>Creating Tickets</h1>
|
||||
|
||||
<p class="lead">
|
||||
Manually create tickets for failed backups.
|
||||
Use Run Checks to create new Autotask tickets or link existing ones to active runs.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>📝 Coming Soon:</strong>
|
||||
This page is under construction. Full content will be added in a future update.
|
||||
<strong>Where:</strong><br>
|
||||
Ticket actions are available in the Run Checks modal for admin/operator roles.
|
||||
</div>
|
||||
|
||||
<h2>Content</h2>
|
||||
<h2>Before You Start</h2>
|
||||
|
||||
<p>Detailed content will be added here in a future update.</p>
|
||||
<ul>
|
||||
<li>Autotask integration enabled and configured.</li>
|
||||
<li>Customer has a valid Autotask mapping (<strong>OK</strong> or <strong>Renamed</strong>).</li>
|
||||
<li>Run is selected in Run Checks modal.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Create New Ticket</h2>
|
||||
|
||||
<ol>
|
||||
<li>Open Run Checks and select a run.</li>
|
||||
<li>Click <strong>Create</strong> (or <strong>Create new</strong> when previous linked ticket is resolved/deleted).</li>
|
||||
<li>Backupchecks creates ticket using configured queue/source/status/priority defaults.</li>
|
||||
<li>Ticket info is stored on the run and visible in the modal.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Link Existing Ticket</h2>
|
||||
|
||||
<ol>
|
||||
<li>Click <strong>Link existing</strong>.</li>
|
||||
<li>Search tickets by title/number.</li>
|
||||
<li>Select and confirm <strong>Link</strong>.</li>
|
||||
</ol>
|
||||
|
||||
<p>Behavior:</p>
|
||||
<ul>
|
||||
<li>Link propagates to all active (unreviewed) runs of the same job.</li>
|
||||
<li>Terminal/completed tickets are blocked from linking.</li>
|
||||
<li>Cross-company linking is allowed for overarching/shared tickets.</li>
|
||||
<li>Backupchecks attempts to post a note on the linked Autotask ticket.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Internal Ticket Relationship</h2>
|
||||
|
||||
<p>When Autotask tickets are created/linked, Backupchecks also keeps internal ticket linkage for consistent indicators and history behavior.</p>
|
||||
|
||||
<h2>Troubleshooting</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>No tickets found:</strong> verify customer mapping and search terms.</li>
|
||||
<li><strong>Link blocked:</strong> check whether ticket is terminal/completed.</li>
|
||||
<li><strong>Create fails:</strong> validate default queue/source/status configuration in settings.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Next Steps</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='ticket-management') }}">Ticket Management</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='backup-review', page='run-checks-modal') }}">Run Checks Modal</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -4,16 +4,66 @@
|
||||
<h1>Setup & Configuration</h1>
|
||||
|
||||
<p class="lead">
|
||||
Configure Autotask PSA integration.
|
||||
Configure Autotask PSA integration so operators can create and link PSA tickets from Run Checks.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>📝 Coming Soon:</strong>
|
||||
This page is under construction. Full content will be added in a future update.
|
||||
<strong>Scope:</strong><br>
|
||||
This page covers technical setup in Backupchecks Settings. Customer-to-company mapping is documented separately.
|
||||
</div>
|
||||
|
||||
<h2>Content</h2>
|
||||
<h2>Prerequisites</h2>
|
||||
|
||||
<p>Detailed content will be added here in a future update.</p>
|
||||
<ul>
|
||||
<li>Autotask API user with access to tickets and companies.</li>
|
||||
<li>Autotask API integration tracking identifier.</li>
|
||||
<li>Backupchecks admin access to <strong>Settings</strong>.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Step 1: Enable Integration</h2>
|
||||
|
||||
<ol>
|
||||
<li>Open <strong>Settings</strong>.</li>
|
||||
<li>In the Autotask section, enable integration.</li>
|
||||
<li>Select environment (<code>production</code> or <code>sandbox</code>).</li>
|
||||
<li>Fill in username, password, and tracking identifier.</li>
|
||||
<li>Optional: set <strong>Autotask Base URL</strong> for links in notes/details.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Step 2: Configure Ticket Defaults</h2>
|
||||
|
||||
<p>Backupchecks ticket creation needs default values from Autotask reference data.</p>
|
||||
|
||||
<ul>
|
||||
<li>Default queue</li>
|
||||
<li>Default ticket source</li>
|
||||
<li>Default ticket status</li>
|
||||
<li>Priority for warning and error conditions</li>
|
||||
</ul>
|
||||
|
||||
<p>Use the reference-data refresh action if dropdowns are empty.</p>
|
||||
|
||||
<h2>Step 3: Validate Connection</h2>
|
||||
|
||||
<ol>
|
||||
<li>Use the <strong>Test connection</strong> action in settings.</li>
|
||||
<li>Confirm the API call succeeds.</li>
|
||||
<li>If test fails, re-check credentials, environment, and integration code.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Operational Notes</h2>
|
||||
|
||||
<ul>
|
||||
<li>Passwords are stored in settings but not shown back in plain text.</li>
|
||||
<li>Settings changes are audit logged in Backupchecks logging.</li>
|
||||
<li>Ticket creation in Run Checks depends on customer mapping being valid.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Next Steps</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='company-mapping') }}">Company Mapping</a> - map customers to Autotask companies.</li>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='creating-tickets') }}">Creating Tickets</a> - create or link tickets from Run Checks.</li>
|
||||
<li><a href="{{ url_for('main.settings') }}">Open Settings</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -4,16 +4,61 @@
|
||||
<h1>Ticket Management</h1>
|
||||
|
||||
<p class="lead">
|
||||
Manage and track Autotask tickets.
|
||||
Understand ticket lifecycle, synchronization behavior, and operator actions after linking.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>📝 Coming Soon:</strong>
|
||||
This page is under construction. Full content will be added in a future update.
|
||||
</div>
|
||||
<h2>Lifecycle in Run Checks</h2>
|
||||
|
||||
<h2>Content</h2>
|
||||
<ul>
|
||||
<li>Linked ticket info is shown per run (ticket number/state).</li>
|
||||
<li>If linked ticket is resolved or deleted in PSA, state is reflected in Backupchecks.</li>
|
||||
<li>When a linked ticket is resolved/deleted, operators can create a new ticket for the same run.</li>
|
||||
</ul>
|
||||
|
||||
<p>Detailed content will be added here in a future update.</p>
|
||||
<h2>Resolve Note Action</h2>
|
||||
|
||||
<ol>
|
||||
<li>In Run Checks modal, click <strong>Resolve</strong> on Autotask ticket section.</li>
|
||||
<li>Backupchecks posts a user-visible update note to the PSA ticket.</li>
|
||||
<li>If ticket has no time entries, Autotask can close it; otherwise it may stay open.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Propagation and Scope</h2>
|
||||
|
||||
<ul>
|
||||
<li>Link-existing operation propagates to all active runs of the job.</li>
|
||||
<li>New runs can inherit open ticket context through the link-based internal ticket model.</li>
|
||||
<li>Resolved internal ticket state stops propagation to future runs.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Deleted vs Resolved</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Resolved:</strong> ticket still exists in PSA but is closed/completed.</li>
|
||||
<li><strong>Deleted:</strong> ticket was removed in PSA; deletion metadata is stored on runs.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Operational Best Practices</h2>
|
||||
|
||||
<ul>
|
||||
<li>Use <strong>Link existing</strong> for umbrella incidents affecting multiple customers/jobs.</li>
|
||||
<li>Use <strong>Create</strong> when no suitable active PSA ticket exists.</li>
|
||||
<li>Always complete Run Checks review after ticket actions.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Troubleshooting</h2>
|
||||
|
||||
<ul>
|
||||
<li>If resolve note fails, ticket link can still remain valid; check warning message.</li>
|
||||
<li>If state looks stale, refresh Run Checks details and verify PSA accessibility.</li>
|
||||
<li>If no Autotask actions appear, verify role permissions and integration settings.</li>
|
||||
</ul>
|
||||
|
||||
<h2>See Also</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='setup-configuration') }}">Setup & Configuration</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='company-mapping') }}">Company Mapping</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='creating-tickets') }}">Creating Tickets</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -207,7 +207,7 @@
|
||||
|
||||
<div class="doc-callout doc-callout-warning">
|
||||
<strong>⚠️ Always Mark as Reviewed:</strong><br>
|
||||
Regardless of which action you take (override, remark, or ticket), you <strong>must always mark the run as reviewed</strong> afterwards. If you don't, the run will remain in the Run Checks list and can show the wrong status the next day (only the first unreviewed status is displayed).
|
||||
Regardless of which action you take (override, remark, or ticket), you <strong>must always mark the job as reviewed</strong> afterwards. If you don't, the run will remain in the Run Checks list and can show the wrong status the next day (only the first unreviewed status is displayed).
|
||||
</div>
|
||||
|
||||
<h2>Stage 7: Mark as Reviewed</h2>
|
||||
@ -217,7 +217,7 @@
|
||||
<h3>What Happens</h3>
|
||||
|
||||
<ul>
|
||||
<li>Click <strong>Mark as reviewed</strong> in the Run Checks modal (or select multiple runs and mark all at once)</li>
|
||||
<li>Click <strong>Mark as reviewed</strong> in the Run Checks modal (or select multiple jobs and mark all at once)</li>
|
||||
<li>The run is marked with a review timestamp</li>
|
||||
<li>The run disappears from the Run Checks page</li>
|
||||
<li>A review audit record is created (visible to Admins)</li>
|
||||
@ -225,7 +225,7 @@
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>💡 Goal: Empty Run Checks Page:</strong><br>
|
||||
The objective is to have the <strong>Run Checks page completely empty</strong> - this means all runs have been reviewed. Even successful backups must be marked as reviewed, because they haven't been <em>looked at</em>, but they still need to be marked to clear the Run Checks page. You can select multiple runs and mark them all as reviewed at once for efficiency.
|
||||
The objective is to have the <strong>Run Checks page completely empty</strong> - this means all runs have been reviewed. Even successful backups must be marked as reviewed, because they haven't been <em>looked at</em>, but they still need to be marked to clear the Run Checks page. You can select multiple jobs and mark them all as reviewed at once for efficiency.
|
||||
</div>
|
||||
|
||||
<h3>Bulk Review</h3>
|
||||
@ -245,11 +245,11 @@
|
||||
|
||||
<ul>
|
||||
<li><strong>Start with Run Checks every day:</strong> Open Run Checks page first thing every morning - this is your primary workflow</li>
|
||||
<li><strong>Goal: Empty Run Checks page:</strong> Mark all runs as reviewed (even successful ones) until the page is completely empty</li>
|
||||
<li><strong>Goal: Empty Run Checks page:</strong> Mark all jobs as reviewed (including successful ones) until the page is completely empty</li>
|
||||
<li><strong>Approve inbox emails quickly:</strong> New customer emails won't appear in Run Checks until approved</li>
|
||||
<li><strong>Triage by status:</strong> Review red (Failed) before yellow (Warning) before green (Success)</li>
|
||||
<li><strong>Use bulk review for successes:</strong> Select multiple successful runs and mark them all at once</li>
|
||||
<li><strong>Always mark as reviewed:</strong> Even after creating tickets/remarks/overrides, you must still mark the run as reviewed</li>
|
||||
<li><strong>Use bulk review for successes:</strong> Select multiple successful jobs and mark them all at once</li>
|
||||
<li><strong>Always mark as reviewed:</strong> Even after creating tickets/remarks/overrides, you must still mark the job as reviewed</li>
|
||||
<li><strong>Use overrides for recurring acceptable warnings:</strong> Don't mark the same warning as reviewed every day - create an override</li>
|
||||
<li><strong>Create tickets for customer action items:</strong> Formal tracking ensures followup</li>
|
||||
<li><strong>Use remarks for temporary notes:</strong> Don't create tickets for short-term issues</li>
|
||||
|
||||
@ -235,7 +235,7 @@
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>💡 Review Workflow:</strong><br>
|
||||
Only jobs with warnings or failures need to be reviewed. Successful jobs are automatically considered reviewed. The Run Checks workflow is designed to help you quickly triage and acknowledge known issues.
|
||||
Jobs with warnings or failures typically need investigation first. Successful runs can also appear in Run Checks until they are explicitly marked as reviewed (often via bulk review). The Run Checks workflow helps you triage and clear the unreviewed queue.
|
||||
</div>
|
||||
|
||||
<h2>Common Workflows</h2>
|
||||
|
||||
@ -384,7 +384,7 @@
|
||||
|
||||
<p>BackupChecks monitors Autotask for ticket status changes and can automatically resolve internal tickets when the corresponding Autotask ticket is resolved or deleted.</p>
|
||||
|
||||
<p>See <a href="{{ url_for('documentation.page', section='autotask', page='overview') }}">Autotask Integration</a> for details on setup and PSA ticket synchronization.</p>
|
||||
<p>See <a href="{{ url_for('documentation.page', section='autotask', page='setup-configuration') }}">Autotask Integration</a> for details on setup and PSA ticket synchronization.</p>
|
||||
|
||||
<h2>Troubleshooting</h2>
|
||||
|
||||
@ -423,7 +423,7 @@
|
||||
<li><a href="{{ url_for('documentation.page', section='backup-review', page='daily-jobs') }}">Daily Jobs View</a> - See how ticket and remark indicators appear in daily monitoring</li>
|
||||
<li><a href="{{ url_for('documentation.page', section='backup-review', page='run-checks-modal') }}">Run Checks Modal</a> - Create tickets and remarks while reviewing job runs</li>
|
||||
<li><a href="{{ url_for('documentation.page', section='backup-review', page='overrides') }}">Overrides & Exceptions</a> - Handle known issues with automated rules</li>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='overview') }}">Autotask Integration</a> - Learn about PSA integration and ticket synchronization</li>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='setup-configuration') }}">Autotask Integration</a> - Learn about PSA integration and ticket synchronization</li>
|
||||
</ul>
|
||||
|
||||
{% endblock %}
|
||||
|
||||
@ -170,7 +170,7 @@
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>💡 Autotask Integration:</strong><br>
|
||||
Autotask ticket information only appears if the Autotask integration is enabled in Settings and a ticket was created for this run. See <a href="{{ url_for('documentation.page', section='autotask', page='overview') }}">Autotask Integration</a> for details.
|
||||
Autotask ticket information only appears if the Autotask integration is enabled in Settings and a ticket was created for this run. See <a href="{{ url_for('documentation.page', section='autotask', page='setup-configuration') }}">Autotask Integration</a> for details.
|
||||
</div>
|
||||
|
||||
<h2>Review Actions</h2>
|
||||
|
||||
@ -0,0 +1,65 @@
|
||||
{% extends "documentation/base.html" %}
|
||||
|
||||
{% block doc_content %}
|
||||
<h1>Cove Data Protection</h1>
|
||||
|
||||
<p class="lead">
|
||||
Integrate N-able Cove backup accounts into Backupchecks using the Cove API.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>Scope:</strong><br>
|
||||
Cove integration is API-based (not email-based). Accounts are staged first, then linked to jobs.
|
||||
</div>
|
||||
|
||||
<h2>How the Cove Flow Works</h2>
|
||||
|
||||
<ol>
|
||||
<li>Cove import reads account statistics from the Cove API.</li>
|
||||
<li>Accounts are upserted into the Cove staging table.</li>
|
||||
<li>Unlinked accounts appear on <strong>Cove Accounts</strong>.</li>
|
||||
<li>Operator links account to an existing job or creates a new job.</li>
|
||||
<li>After linking, an immediate import runs so new Cove runs appear right away.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Open Cove Accounts</h2>
|
||||
|
||||
<ol>
|
||||
<li>Open <a href="{{ url_for('main.cove_accounts') }}"><strong>Cove Accounts</strong></a>.</li>
|
||||
<li>Review <strong>unmatched</strong> accounts first.</li>
|
||||
<li>Link each account to a job (create or existing).</li>
|
||||
</ol>
|
||||
|
||||
<h2>Settings and Operations</h2>
|
||||
|
||||
<ul>
|
||||
<li>Configure Cove under <strong>Settings → Integrations</strong>.</li>
|
||||
<li>Use <strong>Test connection</strong> to validate credentials and partner access.</li>
|
||||
<li>Use <strong>Run import now</strong> for manual sync.</li>
|
||||
<li>Background import runs on configured interval when enabled.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Run Visibility</h2>
|
||||
|
||||
<ul>
|
||||
<li>Cove runs are stored as API runs (<code>source_type = cove_api</code>).</li>
|
||||
<li>Cove run details are visible in Job Detail and Run Checks with a Cove summary panel.</li>
|
||||
<li>No mail message is required for Cove runs.</li>
|
||||
<li>Historical backfill can create runs from Cove 28-day colorbar data.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Troubleshooting</h2>
|
||||
|
||||
<ul>
|
||||
<li>If <strong>Cove Accounts</strong> is empty, run a manual import and check credentials.</li>
|
||||
<li>If a linked account shows no runs, verify link target job and import logs.</li>
|
||||
<li>If statuses look outdated, run <strong>Run import now</strong> and refresh Run Checks/Job Detail.</li>
|
||||
</ul>
|
||||
|
||||
<h2>See Also</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='backup-review', page='run-checks-modal') }}">Run Checks Modal</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='customers-jobs', page='approved-jobs') }}">Approved Jobs</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
@ -0,0 +1,63 @@
|
||||
{% extends "documentation/base.html" %}
|
||||
|
||||
{% block doc_content %}
|
||||
<h1>Veeam Cloud Connect</h1>
|
||||
|
||||
<p class="lead">
|
||||
Review and link Cloud Connect tenant rows from shared report emails to Backupchecks jobs.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>Scope:</strong><br>
|
||||
Cloud Connect imports from report emails, stages accounts, then creates runs only for linked accounts.
|
||||
</div>
|
||||
|
||||
<h2>How the Cloud Connect Flow Works</h2>
|
||||
|
||||
<ol>
|
||||
<li>Cloud Connect report emails are parsed from Inbox mail storage.</li>
|
||||
<li>Per-tenant rows are upserted into <strong>Cloud Connect Accounts</strong>.</li>
|
||||
<li>Unlinked rows are reviewed and linked to jobs.</li>
|
||||
<li>On link, historical report mails are re-processed for that account/job mapping.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Open Cloud Connect Accounts</h2>
|
||||
|
||||
<ol>
|
||||
<li>Open <a href="{{ url_for('main.cloud_connect_accounts') }}"><strong>Cloud Connect Accounts</strong></a>.</li>
|
||||
<li>Use <strong>Scan inbox</strong> to re-process stored Cloud Connect report mails.</li>
|
||||
<li>Link each account row to an existing job or create a new one.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Important Mapping Notes</h2>
|
||||
|
||||
<ul>
|
||||
<li>Rows are account-level; one user can have multiple repositories.</li>
|
||||
<li>Repository-level linking is supported (separate rows/jobs where needed).</li>
|
||||
<li>Unlinking removes mapping only; historical runs remain as records.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Run Visibility</h2>
|
||||
|
||||
<ul>
|
||||
<li>Cloud Connect runs are stored with <code>source_type = cloud_connect</code>.</li>
|
||||
<li>Run Checks and Job Detail show structured Cloud Connect summaries.</li>
|
||||
<li>Shared source report email can still be inspected from detail UI.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Troubleshooting</h2>
|
||||
|
||||
<ul>
|
||||
<li>If expected rows are missing, run <strong>Scan inbox</strong> and verify report mail type.</li>
|
||||
<li>If runs are missing after link, re-link check + scan inbox again.</li>
|
||||
<li>If one tenant has multiple repos, verify each repo row is linked as intended.</li>
|
||||
</ul>
|
||||
|
||||
<h2>See Also</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='mail-import', page='inbox-management') }}">Inbox Management</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='backup-review', page='run-checks-modal') }}">Run Checks Modal</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='customers-jobs', page='approved-jobs') }}">Approved Jobs</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
@ -4,16 +4,58 @@
|
||||
<h1>Autotask Integration</h1>
|
||||
|
||||
<p class="lead">
|
||||
Configure Autotask API settings.
|
||||
Configure Autotask connectivity and ticket defaults used by Run Checks ticket actions.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>📝 Coming Soon:</strong>
|
||||
This page is under construction. Full content will be added in a future update.
|
||||
<strong>Where:</strong><br>
|
||||
Open <a href="{{ url_for('main.settings', section='integrations') }}"><strong>Settings -> Integrations</strong></a> and use the <strong>Autotask</strong> cards.
|
||||
</div>
|
||||
|
||||
<h2>Content</h2>
|
||||
<h2>Autotask Connection Settings</h2>
|
||||
|
||||
<p>Detailed content will be added here in a future update.</p>
|
||||
<ul>
|
||||
<li><strong>Enable Autotask integration</strong></li>
|
||||
<li><strong>Environment:</strong> Sandbox or Production</li>
|
||||
<li><strong>API Username</strong></li>
|
||||
<li><strong>API Password</strong> (leave empty to keep stored password)</li>
|
||||
<li><strong>Tracking Identifier (Integration Code)</strong></li>
|
||||
<li><strong>Backupchecks Base URL:</strong> used for links in ticket notes/details</li>
|
||||
</ul>
|
||||
|
||||
<h2>Ticket Defaults</h2>
|
||||
|
||||
<p>Required for ticket creation from Run Checks:</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>Default Queue</strong></li>
|
||||
<li><strong>Ticket Source</strong></li>
|
||||
<li><strong>Default Ticket Status</strong></li>
|
||||
<li><strong>Priority for Warning</strong></li>
|
||||
<li><strong>Priority for Error</strong></li>
|
||||
</ul>
|
||||
|
||||
<h2>Diagnostics & Reference Data</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Test connection:</strong> validates API credentials/access.</li>
|
||||
<li><strong>Refresh reference data:</strong> reloads queues, sources, statuses, priorities.</li>
|
||||
<li>When cache is missing and integration is valid, reference data can auto-load on Settings page open.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Operational Notes</h2>
|
||||
|
||||
<ul>
|
||||
<li>Customer mappings are configured in Customers, not in Settings.</li>
|
||||
<li>Settings updates are audit logged (password never logged).</li>
|
||||
<li>If dropdowns are empty, refresh reference data first.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Related Pages</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='setup-configuration') }}">Autotask: Setup & Configuration</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='autotask', page='company-mapping') }}">Autotask: Company Mapping</a></li>
|
||||
<li><a href="{{ url_for('main.customers') }}">Open Customers</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -2,120 +2,77 @@
|
||||
|
||||
{% block doc_content %}
|
||||
<h1>Microsoft Entra SSO</h1>
|
||||
<p>Use Microsoft Entra ID (Azure AD) to let users sign in with their Microsoft account.</p>
|
||||
|
||||
<p class="lead">
|
||||
Configure Microsoft Entra sign-in so users can authenticate with their Microsoft account.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-warning">
|
||||
<strong>Status: Untested in Backupchecks.</strong>
|
||||
This SSO implementation has not yet been end-to-end validated in Backupchecks itself.
|
||||
Treat this page as implementation guidance for future rollout, not as a confirmed production setup.
|
||||
<strong>Status:</strong><br>
|
||||
This flow is configurable in Settings and available in the application, but should still be validated in your own tenant before production rollout.
|
||||
</div>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>Scope:</strong> this page explains the setup for Backupchecks and Microsoft Entra.
|
||||
It does not replace your internal identity/security policies.
|
||||
<strong>Where:</strong><br>
|
||||
Open <a href="{{ url_for('main.settings', section='integrations') }}"><strong>Settings -> Integrations</strong></a> and use the <strong>Microsoft Entra SSO</strong> card.
|
||||
</div>
|
||||
|
||||
<h2>Prerequisites</h2>
|
||||
|
||||
<ul>
|
||||
<li>Admin access to your Microsoft Entra tenant.</li>
|
||||
<li>Admin access to Backupchecks <strong>Settings → Integrations</strong>.</li>
|
||||
<li>A stable HTTPS URL for Backupchecks (recommended for production).</li>
|
||||
<li>Admin access to Microsoft Entra (Azure AD).</li>
|
||||
<li>Admin access to Backupchecks Settings.</li>
|
||||
<li>Stable HTTPS URL for Backupchecks.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Step 1: Register an app in Microsoft Entra</h2>
|
||||
<h2>Entra App Registration</h2>
|
||||
|
||||
<ol>
|
||||
<li>Open <strong>Microsoft Entra admin center</strong> → <strong>App registrations</strong>.</li>
|
||||
<li>Create a new registration (single-tenant is typical for internal use).</li>
|
||||
<li>Set a name, for example <code>Backupchecks SSO</code>.</li>
|
||||
<li>After creation, copy:
|
||||
<ul>
|
||||
<li><strong>Application (client) ID</strong></li>
|
||||
<li><strong>Directory (tenant) ID</strong></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Create an app registration in Entra.</li>
|
||||
<li>Capture <strong>Tenant ID</strong> and <strong>Client ID</strong>.</li>
|
||||
<li>Create and copy a <strong>Client Secret</strong>.</li>
|
||||
<li>Add redirect URI: <code>https://your-domain/auth/entra/callback</code>.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Step 2: Configure redirect URI</h2>
|
||||
<ol>
|
||||
<li>In the app registration, open <strong>Authentication</strong>.</li>
|
||||
<li>Add a <strong>Web</strong> redirect URI:
|
||||
<ul>
|
||||
<li><code>https://your-backupchecks-domain/auth/entra/callback</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Save the authentication settings.</li>
|
||||
</ol>
|
||||
<h2>Backupchecks Fields</h2>
|
||||
|
||||
<h2>Step 3: Create client secret</h2>
|
||||
<ol>
|
||||
<li>Open <strong>Certificates & secrets</strong> in the app registration.</li>
|
||||
<li>Create a new client secret.</li>
|
||||
<li>Copy the secret value immediately (it is shown only once).</li>
|
||||
</ol>
|
||||
|
||||
<h2>Step 4: Configure Backupchecks</h2>
|
||||
<ol>
|
||||
<li>Open <strong>Settings → Integrations → Microsoft Entra SSO</strong>.</li>
|
||||
<li>Enable <strong>Microsoft sign-in</strong>.</li>
|
||||
<li>Fill in:
|
||||
<ul>
|
||||
<li><strong>Enable Microsoft sign-in</strong></li>
|
||||
<li><strong>Tenant ID</strong></li>
|
||||
<li><strong>Client ID</strong></li>
|
||||
<li><strong>Client Secret</strong></li>
|
||||
<li><strong>Redirect URI</strong> (optional override, leave empty to auto-use callback URL)</li>
|
||||
<li><strong>Client Secret</strong> (leave empty to keep stored secret)</li>
|
||||
<li><strong>Redirect URI</strong> (optional override)</li>
|
||||
<li><strong>Allowed domain/tenant</strong> (optional restriction)</li>
|
||||
<li><strong>Allowed Entra Group Object ID(s)</strong> (optional but recommended)</li>
|
||||
<li><strong>Allowed Entra Group Object ID(s)</strong> (optional hard access gate)</li>
|
||||
<li><strong>Auto-provision unknown users as Viewer</strong> (optional)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Optional: enable <strong>Auto-provision unknown users as Viewer</strong>.</li>
|
||||
<li>Save settings.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Security Group Restriction (recommended)</h2>
|
||||
<p>You can enforce that only members of one or more specific Entra security groups can sign in.</p>
|
||||
<h2>Group Restriction Notes</h2>
|
||||
|
||||
<ol>
|
||||
<li>Create or choose a security group in Entra (for example <code>Backupchecks-Users</code>).</li>
|
||||
<li>Add the allowed users to that group.</li>
|
||||
<li>Copy the group <strong>Object ID</strong> (not display name).</li>
|
||||
<li>Paste one or more group object IDs in:
|
||||
<ul>
|
||||
<li><strong>Settings → Integrations → Microsoft Entra SSO → Allowed Entra Group Object ID(s)</strong></li>
|
||||
<li>Use Entra security group object IDs (not display names).</li>
|
||||
<li>User must be member of at least one configured group.</li>
|
||||
<li>Ensure ID token includes <code>groups</code> claim.</li>
|
||||
<li>When Entra returns group overage tokens without inline groups, access is denied by design.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>In the Entra app registration, configure <strong>Token configuration</strong> to include the <code>groups</code> claim in ID tokens.</li>
|
||||
</ol>
|
||||
|
||||
<div class="doc-callout doc-callout-warning">
|
||||
<strong>Important:</strong> if users are member of many groups, Entra may return a "group overage" token without inline
|
||||
<code>groups</code> list. In that case Backupchecks cannot verify membership and login is blocked by design.
|
||||
</div>
|
||||
<h2>User Mapping Behavior</h2>
|
||||
|
||||
<h2>Step 5: Test sign-in</h2>
|
||||
<ol>
|
||||
<li>Open <strong>/auth/login</strong> in a private/incognito browser session.</li>
|
||||
<li>Click <strong>Sign in with Microsoft</strong>.</li>
|
||||
<li>Authenticate with an allowed account.</li>
|
||||
<li>Confirm you are redirected back into Backupchecks.</li>
|
||||
</ol>
|
||||
|
||||
<h2>User mapping behavior</h2>
|
||||
<ul>
|
||||
<li>Backupchecks first tries to match Entra user to local user by username/email.</li>
|
||||
<li>If no match exists:
|
||||
<li>Existing users are matched by username/email mapping logic.</li>
|
||||
<li>If no local user exists:
|
||||
<ul>
|
||||
<li>With auto-provision disabled: login is rejected.</li>
|
||||
<li>With auto-provision enabled: a new local user is created with <strong>Viewer</strong> role.</li>
|
||||
<li>Auto-provision disabled: login is rejected.</li>
|
||||
<li>Auto-provision enabled: user is created with Viewer role.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>Troubleshooting</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Redirect URI mismatch:</strong> ensure Entra app URI exactly matches Backupchecks callback URI.</li>
|
||||
<li><strong>SSO button not visible:</strong> check that SSO is enabled and Tenant/Client/Secret are saved.</li>
|
||||
<li><strong>Account not allowed:</strong> verify tenant/domain restriction in <em>Allowed domain/tenant</em>.</li>
|
||||
<li><strong>Group restricted login fails:</strong> verify group object IDs and ensure the ID token includes a <code>groups</code> claim.</li>
|
||||
<li><strong>No local user mapping:</strong> create a matching local user or enable auto-provision.</li>
|
||||
<li><strong>Button not visible:</strong> verify SSO enabled and required IDs/secrets saved.</li>
|
||||
<li><strong>Redirect mismatch:</strong> ensure callback URL matches Entra app configuration exactly.</li>
|
||||
<li><strong>Access denied:</strong> verify allowed domain/tenant and group membership settings.</li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -4,16 +4,61 @@
|
||||
<h1>General Settings</h1>
|
||||
|
||||
<p class="lead">
|
||||
Configure general system settings.
|
||||
Use the General tab to configure core application behavior, display defaults, and safety features.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>📝 Coming Soon:</strong>
|
||||
This page is under construction. Full content will be added in a future update.
|
||||
<strong>Where:</strong><br>
|
||||
Open <a href="{{ url_for('main.settings', section='general') }}"><strong>Settings -> General</strong></a>.
|
||||
</div>
|
||||
|
||||
<h2>Content</h2>
|
||||
<h2>System Status</h2>
|
||||
|
||||
<p>Detailed content will be added here in a future update.</p>
|
||||
<ul>
|
||||
<li><strong>Database size:</strong> current database footprint.</li>
|
||||
<li><strong>Free disk space:</strong> highlighted in red when low; mail import is blocked below 2 GB.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Daily Jobs</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Daily Jobs start date:</strong> defines when missed-run checks start.</li>
|
||||
<li>Older runs are still used to learn schedules.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Display</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Timezone:</strong> controls timestamp rendering across UI pages (Logging, Jobs, Daily Jobs, Run Checks).</li>
|
||||
</ul>
|
||||
|
||||
<h2>Navigation</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Require dashboard visit on first page view each day:</strong> forces first daily navigation to Dashboard.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Environment</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Sandbox/Development environment:</strong> shows a visual non-production banner across the app.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Security</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Enable login captcha:</strong> requires users to solve a simple math challenge on login.</li>
|
||||
<li>Enabled by default for new and migrated installations.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Audit Logging</h2>
|
||||
|
||||
<p>General settings changes are written to the admin audit log for traceability.</p>
|
||||
|
||||
<h2>Related Pages</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='settings', page='mail-configuration') }}">Mail Configuration</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='settings', page='maintenance') }}">Maintenance</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -4,16 +4,68 @@
|
||||
<h1>Mail Configuration</h1>
|
||||
|
||||
<p class="lead">
|
||||
Configure Graph API mail settings.
|
||||
Configure Microsoft Graph access and import behavior for backup report emails.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>📝 Coming Soon:</strong>
|
||||
This page is under construction. Full content will be added in a future update.
|
||||
<strong>Where:</strong><br>
|
||||
Credentials and folders are in <a href="{{ url_for('main.settings', section='general') }}"><strong>Settings -> General</strong></a>.<br>
|
||||
Import behavior is in <a href="{{ url_for('main.settings', section='imports') }}"><strong>Settings -> Imports</strong></a>.
|
||||
</div>
|
||||
|
||||
<h2>Content</h2>
|
||||
<h2>Graph Connection (General tab)</h2>
|
||||
|
||||
<p>Detailed content will be added here in a future update.</p>
|
||||
<ul>
|
||||
<li><strong>Tenant ID</strong></li>
|
||||
<li><strong>Client ID</strong></li>
|
||||
<li><strong>Client secret</strong> (leave empty to keep stored secret)</li>
|
||||
<li><strong>Mailbox address</strong></li>
|
||||
</ul>
|
||||
|
||||
<h2>Folder Selection (General tab)</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Incoming folder:</strong> source folder read by import.</li>
|
||||
<li><strong>Processed folder:</strong> destination after processing.</li>
|
||||
<li>Use <strong>Browse...</strong> to load folder tree via Graph and select the exact path.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Automatic Import (Imports tab)</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Enable automatic mail import</strong></li>
|
||||
<li><strong>Interval (minutes)</strong></li>
|
||||
<li><strong>Automatic importer cutoff date:</strong> older messages are ignored.</li>
|
||||
<li><strong>Manual import batch size:</strong> configurable between 1 and 50.</li>
|
||||
</ul>
|
||||
|
||||
<h2>EML Retention (Imports tab)</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Store EML for debugging:</strong> Off, 7 days, or 14 days.</li>
|
||||
<li>When set to <strong>Off</strong>, stored EML blobs are cleared.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Manual Import</h2>
|
||||
|
||||
<ul>
|
||||
<li>Use <strong>Run import</strong> in Settings -> Imports for one-time import.</li>
|
||||
<li>Manual import is blocked when free disk space is below 2 GB.</li>
|
||||
<li>Results and errors are shown via notifications and logged in Logging.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Operational Notes</h2>
|
||||
|
||||
<ul>
|
||||
<li>Automatic importer batch size is fixed to 50 items internally.</li>
|
||||
<li>Secret fields are write-only in the UI.</li>
|
||||
<li>Mail/import setting changes are audit logged.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Related Pages</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='mail-import', page='setup') }}">Mail Import Setup</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='mail-import', page='auto-import') }}">Auto-Import Configuration</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -4,16 +4,67 @@
|
||||
<h1>Maintenance</h1>
|
||||
|
||||
<p class="lead">
|
||||
System maintenance and data management.
|
||||
Use Maintenance tools for data migration, cleanup, test data generation, and emergency reset actions.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>📝 Coming Soon:</strong>
|
||||
This page is under construction. Full content will be added in a future update.
|
||||
<div class="doc-callout doc-callout-warning">
|
||||
<strong>Admin only:</strong><br>
|
||||
Several actions on this page are destructive and cannot be undone.
|
||||
</div>
|
||||
|
||||
<h2>Content</h2>
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>Where:</strong><br>
|
||||
Open <a href="{{ url_for('main.settings', section='maintenance') }}"><strong>Settings -> Maintenance</strong></a>.
|
||||
</div>
|
||||
|
||||
<p>Detailed content will be added here in a future update.</p>
|
||||
<h2>Approved Jobs Export / Import</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Download export (JSON):</strong> exports customers/jobs for migration or restore scenarios.</li>
|
||||
<li><strong>Import jobs:</strong> updates existing jobs by key (Customer + Backup + Type + Job name) or creates missing jobs.</li>
|
||||
<li><strong>Include Autotask IDs:</strong> keep disabled when importing into environments with different Autotask datasets.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Object Maintenance</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Backfill objects:</strong> rebuilds missing object link data for existing approved runs to repair reporting relationships.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Cleanup Orphaned Jobs</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Preview orphaned jobs:</strong> shows jobs without a valid customer link.</li>
|
||||
<li><strong>Delete orphaned:</strong> removes orphaned jobs and related run/email data.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Generate Test Emails</h2>
|
||||
|
||||
<ul>
|
||||
<li>Generates one Veeam test email per selected status: Success, Warning, or Error.</li>
|
||||
<li>Useful for parser testing and maintenance validation.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Jobs Maintenance</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Delete all jobs:</strong> removes all jobs and job runs.</li>
|
||||
<li>Related mails are moved back to Inbox (job link removed).</li>
|
||||
</ul>
|
||||
|
||||
<h2>Danger Zone</h2>
|
||||
|
||||
<ul>
|
||||
<li><strong>Reset application:</strong> permanently clears application data and users.</li>
|
||||
<li>Requires explicit confirmation value <code>RESET</code>.</li>
|
||||
<li>After reset, application returns to initial setup flow.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Best Practices</h2>
|
||||
|
||||
<ul>
|
||||
<li>Always export before destructive operations.</li>
|
||||
<li>Use orphaned-job preview before deletion.</li>
|
||||
<li>Run destructive actions in maintenance windows.</li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -4,16 +4,32 @@
|
||||
<h1>Reporting Settings</h1>
|
||||
|
||||
<p class="lead">
|
||||
Configure reporting defaults.
|
||||
There is currently no dedicated Reporting configuration card in Settings.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>📝 Coming Soon:</strong>
|
||||
This page is under construction. Full content will be added in a future update.
|
||||
<div class="doc-callout doc-callout-warning">
|
||||
<strong>Current status:</strong><br>
|
||||
Reporting settings in the Settings page are not implemented as a separate configurable section.
|
||||
</div>
|
||||
|
||||
<h2>Content</h2>
|
||||
<h2>What This Means</h2>
|
||||
|
||||
<p>Detailed content will be added here in a future update.</p>
|
||||
<ul>
|
||||
<li>You will not find a <strong>Reporting</strong> tab/card under Settings.</li>
|
||||
<li>Global reporting defaults are therefore not managed in Settings at this time.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Related Functionality</h2>
|
||||
|
||||
<ul>
|
||||
<li>Object maintenance/backfill actions that support report data quality are available in <a href="{{ url_for('main.settings', section='maintenance') }}">Settings -> Maintenance</a>.</li>
|
||||
<li>Reporting feature documentation will be expanded when the reporting module/settings are finalized.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Next Steps</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='reports', page='creating-reports') }}">Reports: Creating Reports</a> (planned/placeholder)</li>
|
||||
<li><a href="{{ url_for('documentation.page', section='settings', page='maintenance') }}">Settings: Maintenance</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -4,16 +4,62 @@
|
||||
<h1>User Management</h1>
|
||||
|
||||
<p class="lead">
|
||||
Manage users and roles.
|
||||
Admins can create users, change roles, reset passwords, and remove accounts from Settings.
|
||||
</p>
|
||||
|
||||
<div class="doc-callout doc-callout-info">
|
||||
<strong>📝 Coming Soon:</strong>
|
||||
This page is under construction. Full content will be added in a future update.
|
||||
<strong>Where:</strong><br>
|
||||
Open <a href="{{ url_for('main.settings', section='users') }}"><strong>Settings -> Users</strong></a>.
|
||||
</div>
|
||||
|
||||
<h2>Content</h2>
|
||||
<h2>Available Roles</h2>
|
||||
|
||||
<p>Detailed content will be added here in a future update.</p>
|
||||
<ul>
|
||||
<li><strong>Admin</strong></li>
|
||||
<li><strong>Operator</strong></li>
|
||||
<li><strong>Reporter</strong></li>
|
||||
<li><strong>Viewer</strong></li>
|
||||
</ul>
|
||||
|
||||
<h2>Create User</h2>
|
||||
|
||||
<ol>
|
||||
<li>Enter <strong>Username</strong>.</li>
|
||||
<li>Select one or more roles (default fallback is Viewer).</li>
|
||||
<li>Set initial password.</li>
|
||||
<li>Click <strong>Create</strong>.</li>
|
||||
</ol>
|
||||
|
||||
<h2>Update Roles</h2>
|
||||
|
||||
<ul>
|
||||
<li>Role changes are saved per user via the inline <strong>Save</strong> button.</li>
|
||||
<li>At least one role is always enforced (Viewer fallback).</li>
|
||||
<li>The last remaining admin cannot lose Admin role.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Password Reset</h2>
|
||||
|
||||
<ul>
|
||||
<li>Use the per-user reset field in the Actions column.</li>
|
||||
<li>New password is required.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Delete User</h2>
|
||||
|
||||
<ul>
|
||||
<li>Use the per-user <strong>Delete</strong> action.</li>
|
||||
<li>The last remaining admin account cannot be deleted.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Audit Logging</h2>
|
||||
|
||||
<p>User creation, role updates, password resets, and deletions are written to the admin audit log.</p>
|
||||
|
||||
<h2>Related Pages</h2>
|
||||
|
||||
<ul>
|
||||
<li><a href="{{ url_for('documentation.page', section='users', page='users-and-roles') }}">Users & Roles</a></li>
|
||||
<li><a href="{{ url_for('documentation.page', section='users', page='profile-settings') }}">Profile Settings</a></li>
|
||||
</ul>
|
||||
{% endblock %}
|
||||
|
||||
@ -1,11 +1,28 @@
|
||||
# TODO: Cove Data Protection Integration
|
||||
|
||||
**Date:** 2026-02-23
|
||||
**Status:** Research COMPLETED — Ready for implementation
|
||||
**Status:** COMPLETED (implemented)
|
||||
**Priority:** Medium
|
||||
|
||||
---
|
||||
|
||||
## ✅ Completion Update (2026-03-26)
|
||||
|
||||
This TODO is now completed and superseded by the implemented Cove integration in the codebase.
|
||||
|
||||
Implemented scope includes:
|
||||
- Cove API client + importer with deduplication and status mapping
|
||||
- Scheduled background polling service with configurable interval
|
||||
- Database/model support (`cove_accounts`, `job_runs.source_type`, `job_runs.external_id`, Cove settings fields)
|
||||
- Cove settings flows (`test-connection`, `run-now`, credentials + partner ID handling)
|
||||
- Cove Accounts inbox-style UI and link/unlink workflow
|
||||
- Run Checks + Job Detail Cove run presentation
|
||||
- Historical run backfill via 28-day colorbar (`D09F08`)
|
||||
|
||||
Remaining items in this file under "Nice to Have" are optional future enhancements, not blockers for Cove integration completion.
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Goal
|
||||
|
||||
Integrate Cove Data Protection (formerly N-able Backup / SolarWinds Backup) into Backupchecks for backup status monitoring via scheduled API polling. The integration runs server-side within the Backupchecks web application.
|
||||
@ -5,6 +5,10 @@ This file documents all changes made to this project via Claude Code.
|
||||
## [2026-03-26]
|
||||
|
||||
### Fixed
|
||||
- Documentation Batch 3 (Settings): replaced Settings "Coming Soon" pages with current operational guidance (General, Mail Configuration, Autotask Integration, User Management, Maintenance) and updated Reporting Settings to explicitly state that no dedicated reporting settings card exists yet.
|
||||
- Documentation Batch 2 (Autotask): replaced the four Autotask "Coming Soon" pages with current operational documentation (setup/configuration, company mapping, creating tickets, ticket management), including Run Checks `Link existing` cross-company behavior.
|
||||
- Documentation Batch 1: added new documentation section `Integrations` with pages for Cove Data Protection and Veeam Cloud Connect, and linked them into the documentation navigation.
|
||||
- Documentation hotfixes (Batch 2): fixed broken documentation links pointing to non-existent `autotask/overview` page, corrected Run Checks/Daily Jobs review wording to match job-level review behavior, and updated TODO-documentation batch checklist progress.
|
||||
- Run Checks modal mail visibility hotfix: normal mail runs now explicitly clear the `is-cove` modal class before rendering mail content, preventing intermittent hidden mail after navigating from a Cove run; Cove behavior itself remains unchanged.
|
||||
- Run Checks Autotask "Link existing ticket" now allows linking cross-company tickets (for shared/umbrella tickets that apply to multiple customers):
|
||||
- Removed the hard company mismatch block in `POST /api/run-checks/autotask-link-existing-ticket` (`containers/backupchecks/src/backend/app/main/routes_run_checks.py`).
|
||||
|
||||
Loading…
Reference in New Issue
Block a user