mirror of
https://github.com/Dvorinka/beszel.git
synced 2026-06-03 21:02:56 +00:00
8011d487f1
- Add status pages, incidents, badges, maintenance, bulk ops, and metrics - Add Docker packaging, env example, and frontend routes - Refresh GitHub workflows and project metadata
222 lines
7.3 KiB
Markdown
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
|