Files
Beszel/FEATURES_IMPLEMENTED.md
T
Tomas Dvorak 8011d487f1 Add public monitoring features and CI updates
- Add status pages, incidents, badges, maintenance, bulk ops, and metrics
- Add Docker packaging, env example, and frontend routes
- Refresh GitHub workflows and project metadata
2026-04-27 11:10:18 +02:00

7.3 KiB

Features Implementation Summary

Completed Features

1. Status Pages (HIGH PRIORITY)

Files:

  • internal/hub/statuspages/api.go - Full CRUD API for status pages
  • internal/migrations/1_add_monitor_collections.go - Added collections:
    • status_pages - Store status page configuration
    • status_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 pages
  • POST /api/beszel/status-pages - Create status page
  • GET/PATCH/DELETE /api/beszel/status-pages/:id
  • POST /api/beszel/status-pages/:id/monitors - Add monitor
  • DELETE /api/beszel/status-pages/:id/monitors/:monitorId

2. Maintenance Windows (HIGH PRIORITY)

Files:

  • internal/hub/maintenance/api.go - Full maintenance window API
  • internal/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 windows
  • POST /api/beszel/maintenance - Create maintenance window
  • GET/PATCH/DELETE /api/beszel/maintenance/:id
  • POST /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 /metrics endpoint (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 - Added discoverSubdomains()
  • 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 API
  • internal/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 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

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)

  1. Incident Management - Full incident tracking with updates (collections exist, need API/frontend)
  2. Real Browser Monitoring - Headless browser checks (Puppeteer/Playwright)
  3. API Access - REST API key management (partial - needs auth keys)

MEDIUM PRIORITY (Pending)

  1. Multi-user Roles - Better RBAC (collections have role checks, need UI)
  2. 2FA/Passkey - Authentication improvements (PocketBase supports this, needs configuration)

Database Collections Already Created

  • incidents - For incident tracking
  • incident_updates - For incident updates
  • subdomains - For subdomain tracking
  • status_pages - For status pages
  • status_page_monitors - For status page monitor links
  • maintenance_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:

  1. Status pages management UI
  2. Public status page viewer
  3. Maintenance windows UI
  4. Bulk import/export UI
  5. Subdomains display in domain detail
  6. 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