Repository navigation
v1.1.0 — PagerDuty/OpsGenie channels, PDF reports and multi-workspace support
Overview
v1.1.0 extends AutoFlowOps with two new notification providers (PagerDuty and OpsGenie), PDF export for operational reports, and multi-workspace support for namespace isolation within a single instance.
All changes are backward-compatible. Existing deployments without the X-Workspace-ID header continue to operate exactly as before.
What's New
PagerDuty notification channel
A new pagerduty channel type integrates with the PagerDuty Events API v2.
routing_keyis the only required credential; encrypted at rest using the existing Fernet mechanism.- Alerts dispatch a
triggerevent with severity mapped from the internal alert severity. - The
routing_keyis masked in all API responses and delivery error records. - The channel can be tested via
POST /api/notification-channels/{id}/test.
OpsGenie notification channel
A new opsgenie channel type integrates with the OpsGenie Alerts API.
- Supports US (
api.opsgenie.com) and EU (api.eu.opsgenie.com) regions via aregionfield (usby default). api_keyis the required credential; encrypted at rest and masked in API responses.- Optional
responderslist accepts any structure supported by the OpsGenie API (teams, users, escalations, schedules). - The channel can be tested via
POST /api/notification-channels/{id}/test.
PDF report export
Operational reports can now be downloaded as PDF in addition to JSON, Markdown and CSV.
- Endpoint:
GET /api/reports/{id}/download?format=pdf - Generated with
reportlab(pure-Python, no OS-level dependencies). - PDF sections: title, period, summary metrics, top failed jobs, alerts, recommendations.
- The
ReportFormattype in the frontend now includespdf; the Reports page exposes a PDF download button alongside the existing format options.
Multi-workspace
Resources can now be scoped to a workspace using the X-Workspace-ID request header.
- New tables:
workspaces,workspace_memberships. - A default workspace (
Default/ slugdefault) is created automatically on first startup. - All domain resources (jobs, executions, alerts, webhooks, notification channels, notification templates, escalation policies, reports) accept the header and filter results accordingly.
- When the header is absent, no filtering is applied — full backward compatibility.
- Workspace CRUD:
GET /api/workspaces,POST /api/workspaces,PATCH /api/workspaces/{id},DELETE /api/workspaces/{id}(admin-only for write operations). - Member management:
GET /api/workspaces/{id}/members,POST /api/workspaces/{id}/members,DELETE /api/workspaces/{id}/members/{user_id}. - The default workspace cannot be deleted.
- Frontend workspace selector in the sidebar persists the active workspace to
localStorageand injects theX-Workspace-IDheader into all API requests. - Admin-only Workspaces settings page at
/workspaces.
Upgrade Steps
A database migration is required to add the workspaces and workspace_memberships tables and the workspace_id column to domain tables.
Pull from registry
make pull IMAGE_TAG=v1.1.0
make registry-down
make registry-up IMAGE_TAG=v1.1.0Build from source
git pull origin main
docker compose up -d --buildFor production environments with existing data, run the Alembic migration explicitly:
docker compose exec backend alembic upgrade headProduction Safety Notes
- PagerDuty/OpsGenie credentials —
routing_keyandapi_keyare encrypted at rest. EnsureNOTIFICATION_ENCRYPTION_KEYis set and backed up before adding channels. - Workspace isolation — the
X-Workspace-IDheader is a convenience filter, not a security boundary. Use RBAC roles for access control. - Default workspace — all resources created before v1.1.0 have
workspace_id = NULL. They remain visible when no workspace header is sent.
Known Limitations
- PagerDuty and OpsGenie channel tests require valid credentials; the test endpoint returns a delivery failure for placeholder keys.
- Workspace filtering does not enforce data access control; RBAC remains the access control mechanism.