feat(api, web): enhance health check and domain management features
Build, Test, and Push CFDM Docker Image / test (push) Successful in 3m3s
Build, Test, and Push CFDM Docker Image / build-and-push (push) Successful in 1m48s
Build, Test, and Push CFDM Docker Image / update-wiki (push) Successful in 6s
Build, Test, and Push CFDM Docker Image / create-release (push) Has been skipped

- Integrated domain monitoring routes and bulk update functionality for domains in the API.
- Improved health check service to include domain monitoring and logging of health status changes.
- Updated web components to reflect health status with new HealthCheckBadge and enhanced domain filtering options.
- Refactored domain service to support bulk updates and improved domain management capabilities.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Denozordec
2026-07-17 02:25:12 +07:00
co-authored by Cursor
parent dd167a4fec
commit 64585ccd47
38 changed files with 4199 additions and 677 deletions
@@ -0,0 +1,54 @@
-- Domain environment + tags + monitors + notification log
ALTER TABLE domains ADD COLUMN environment TEXT;
CREATE TABLE IF NOT EXISTS domain_tags (
domain_id INTEGER NOT NULL REFERENCES domains(id) ON DELETE CASCADE,
tag TEXT NOT NULL,
PRIMARY KEY (domain_id, tag)
);
CREATE TABLE IF NOT EXISTS domain_monitors (
id INTEGER PRIMARY KEY AUTOINCREMENT,
domain_id INTEGER NOT NULL REFERENCES domains(id) ON DELETE CASCADE,
hostname TEXT NOT NULL,
type TEXT NOT NULL DEFAULT 'http',
enabled INTEGER NOT NULL DEFAULT 1,
interval_sec INTEGER NOT NULL DEFAULT 60,
timeout_ms INTEGER NOT NULL DEFAULT 5000,
path TEXT,
expected_status INTEGER,
last_status TEXT NOT NULL DEFAULT 'unknown',
last_latency_ms INTEGER,
last_checked_at TEXT,
last_error TEXT,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX IF NOT EXISTS idx_domain_monitors_domain
ON domain_monitors(domain_id);
CREATE TABLE IF NOT EXISTS domain_monitor_results (
id INTEGER PRIMARY KEY AUTOINCREMENT,
monitor_id INTEGER NOT NULL REFERENCES domain_monitors(id) ON DELETE CASCADE,
status TEXT NOT NULL,
latency_ms INTEGER,
error TEXT,
checked_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX IF NOT EXISTS idx_domain_monitor_results_monitor
ON domain_monitor_results(monitor_id, checked_at DESC);
CREATE TABLE IF NOT EXISTS notification_log (
id INTEGER PRIMARY KEY AUTOINCREMENT,
kind TEXT NOT NULL,
ref_type TEXT NOT NULL,
ref_id INTEGER,
title TEXT NOT NULL,
message TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX IF NOT EXISTS idx_notification_log_created
ON notification_log(created_at DESC);