- Add status pages, incidents, badges, maintenance, bulk ops, and metrics - Add Docker packaging, env example, and frontend routes - Refresh GitHub workflows and project metadata
7.3 KiB
Features Implementation Summary
Completed Features
1. Status Pages (HIGH PRIORITY) ✅
Files:
internal/hub/statuspages/api.go- Full CRUD API for status pagesinternal/migrations/1_add_monitor_collections.go- Added collections:status_pages- Store status page configurationstatus_page_monitors- Link monitors to status pages
Features:
- Create/update/delete status pages with custom slug
- Add/remove monitors from status pages
- Public status page endpoint at
/status/:slug - Configurable themes (light/dark/auto)
- Custom CSS support
- Logo/favicon upload
- Show/hide uptime percentages
- Group monitors by category
API Endpoints:
GET /status/:slug- Public status page (no auth)GET /api/beszel/status-pages- List status pagesPOST /api/beszel/status-pages- Create status pageGET/PATCH/DELETE /api/beszel/status-pages/:idPOST /api/beszel/status-pages/:id/monitors- Add monitorDELETE /api/beszel/status-pages/:id/monitors/:monitorId
2. Maintenance Windows (HIGH PRIORITY) ✅
Files:
internal/hub/maintenance/api.go- Full maintenance window APIinternal/migrations/1_add_monitor_collections.go- Added collection:maintenance_windows- Store maintenance schedules
internal/alerts/alerts.go- Integrated maintenance check
Features:
- Schedule maintenance windows for monitors/domains
- Recurring maintenance support (with pattern storage)
- Suppress alerts during maintenance
- Status tracking (scheduled/in_progress/completed/cancelled)
- Cancel maintenance windows
- API to check if in maintenance window
API Endpoints:
GET /api/beszel/maintenance- List maintenance windowsPOST /api/beszel/maintenance- Create maintenance windowGET/PATCH/DELETE /api/beszel/maintenance/:idPOST /api/beszel/maintenance/:id/cancel- Cancel maintenance
Alert Suppression:
Alerts are automatically suppressed when a monitor or domain is in an active maintenance window with suppress_alerts=true.
3. Prometheus Export (MEDIUM PRIORITY) ✅
Files:
internal/hub/export/csv.go- Added Prometheus endpoint
Features:
- Public
/metricsendpoint (no auth required) - System metrics (status, CPU, memory, disk usage)
- Monitor metrics (status, response time)
- Domain metrics (status, days until expiry, SSL days)
- Incident metrics (active count)
Metrics Format:
beszel_system_status{name="server1"} 0
beszel_system_cpu_usage{name="server1"} 45.2
beszel_monitor_status{name="api",user="xxx"} 0
beszel_monitor_response_time_ms{name="api",user="xxx"} 123
beszel_domain_status{domain="example.com",user="xxx"} 0
beszel_domain_days_until_expiry{domain="example.com",user="xxx"} 365
beszel_incidents_active 0
4. Subdomain Tracking (MEDIUM PRIORITY) ✅
Files:
internal/hub/domains/scheduler.go- AddeddiscoverSubdomains()internal/migrations/1_add_monitor_collections.go- Added collection:subdomains- Store discovered subdomains
Features:
- Automatic subdomain discovery during domain check
- Checks 50 common subdomains (www, mail, api, blog, etc.)
- DNS resolution to verify existence
- Stores IP addresses for each subdomain
- Tracks status and last checked time
- Prevents duplicate entries
Discovery List Includes: www, mail, ftp, api, blog, shop, admin, app, cdn, static, dev, staging, test, demo, docs, support, help, status, monitor, grafana, prometheus, db, cache, redis, queue, worker, backup, media, assets, download, upload, git, gitlab, github, jenkins, ci, cd, vpn, ssh, smtp, imap, mx, webmail, email, analytics, stats, search, login, auth, sso, oauth, account, user
5. Bulk Import/Export (MEDIUM PRIORITY) ✅
Files:
internal/hub/bulk/api.go- Full bulk import/export APIinternal/hub/hub.go- Wired up bulk API
Features:
- CSV import for domains (name, tags, notes, auto_renew)
- CSV import for monitors (name, URL, type, interval, retries)
- JSON export for domains (full data including WHOIS, SSL, DNS)
- JSON export for monitors (full data including stats)
- Duplicate detection
- Import result summary (success/failed counts with errors)
API Endpoints:
POST /api/beszel/bulk/import/domains- CSV uploadPOST /api/beszel/bulk/import/monitors- CSV uploadGET /api/beszel/bulk/export/domains- JSON downloadGET /api/beszel/bulk/export/monitors- JSON download
CSV Format (Domains):
domain_name,tags,notes,auto_renew
example.com,"tag1,tag2",My notes,true
CSV Format (Monitors):
name,url,type,interval,retries
API,https://api.example.com,http,60,3
Remaining Features (Not Implemented)
HIGH PRIORITY (Pending)
- Incident Management - Full incident tracking with updates (collections exist, need API/frontend)
- Real Browser Monitoring - Headless browser checks (Puppeteer/Playwright)
- API Access - REST API key management (partial - needs auth keys)
MEDIUM PRIORITY (Pending)
- Multi-user Roles - Better RBAC (collections have role checks, need UI)
- 2FA/Passkey - Authentication improvements (PocketBase supports this, needs configuration)
Database Collections Already Created
incidents- For incident trackingincident_updates- For incident updatessubdomains- For subdomain trackingstatus_pages- For status pagesstatus_page_monitors- For status page monitor linksmaintenance_windows- For maintenance scheduling
API Summary
New Endpoints Added:
Status Pages:
GET /status/:slug # Public status page
GET /api/beszel/status-pages # List
POST /api/beszel/status-pages # Create
GET /api/beszel/status-pages/:id # Get
PATCH /api/beszel/status-pages/:id # Update
DELETE /api/beszel/status-pages/:id # Delete
POST /api/beszel/status-pages/:id/monitors # Add monitor
DELETE /api/beszel/status-pages/:id/monitors/:monitorId # Remove
GET /api/beszel/status-pages/:id/monitors # List monitors
Maintenance Windows:
GET /api/beszel/maintenance # List
POST /api/beszel/maintenance # Create
GET /api/beszel/maintenance/:id # Get
PATCH /api/beszel/maintenance/:id # Update
DELETE /api/beszel/maintenance/:id # Delete
POST /api/beszel/maintenance/:id/cancel # Cancel
Bulk Import/Export:
POST /api/beszel/bulk/import/domains # CSV upload
POST /api/beszel/bulk/import/monitors # CSV upload
GET /api/beszel/bulk/export/domains # JSON download
GET /api/beszel/bulk/export/monitors # JSON download
Prometheus:
GET /metrics # Public metrics endpoint
Build Status
✅ All backend code compiles successfully ✅ All database migrations added ✅ All APIs registered and wired up
Frontend Needed
The following frontend components would complete these features:
- Status pages management UI
- Public status page viewer
- Maintenance windows UI
- Bulk import/export UI
- Subdomains display in domain detail
- Incident management UI
Testing Checklist
- Create status page via API
- View public status page
- Add/remove monitors from status page
- Create maintenance window
- Verify alerts suppressed during maintenance
- Test Prometheus metrics endpoint
- Import domains via CSV
- Export domains to JSON
- Verify subdomain discovery
- Test bulk import with duplicate detection