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

222 lines
7.3 KiB
Markdown

# 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):**
```csv
domain_name,tags,notes,auto_renew
example.com,"tag1,tag2",My notes,true
```
**CSV Format (Monitors):**
```csv
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