Some checks are pending
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
External monitoring via UptimeRobot (free tier) with internal health logger to differentiate ISP outages from server issues. Includes: - 4 new DB models (UptimeMonitor, UptimeCheck, UptimeIncident, InternalHealthLog) - Migration 082 with tables, indexes, and permissions - Internal health logger script (cron */5 min) - UptimeRobot sync script (cron hourly) with automatic cause correlation - Admin dashboard /admin/uptime with uptime %, response time charts, incident log with editable notes/causes, pattern analysis, monthly report - SLA comparison table (99.9%/99.5%/99%) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
68 lines
2.5 KiB
SQL
68 lines
2.5 KiB
SQL
-- Migration 082: Uptime Monitoring
|
|
-- Tabele do monitorowania dostępności portalu z zewnątrz (UptimeRobot)
|
|
-- oraz wewnętrznego stanu serwera (health logger)
|
|
|
|
-- Konfiguracja monitorów UptimeRobot
|
|
CREATE TABLE IF NOT EXISTS uptime_monitors (
|
|
id SERIAL PRIMARY KEY,
|
|
uptimerobot_id INTEGER UNIQUE NOT NULL,
|
|
name VARCHAR(200) NOT NULL,
|
|
url VARCHAR(500) NOT NULL,
|
|
check_interval_sec INTEGER DEFAULT 300,
|
|
is_active BOOLEAN DEFAULT TRUE,
|
|
created_at TIMESTAMP DEFAULT NOW()
|
|
);
|
|
|
|
-- Wyniki sprawdzeń z UptimeRobot
|
|
CREATE TABLE IF NOT EXISTS uptime_checks (
|
|
id SERIAL PRIMARY KEY,
|
|
monitor_id INTEGER NOT NULL REFERENCES uptime_monitors(id) ON DELETE CASCADE,
|
|
checked_at TIMESTAMP NOT NULL,
|
|
status VARCHAR(20) NOT NULL,
|
|
response_time_ms INTEGER,
|
|
status_code INTEGER
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_uptime_checks_monitor_id ON uptime_checks(monitor_id);
|
|
CREATE INDEX IF NOT EXISTS idx_uptime_checks_checked_at ON uptime_checks(checked_at);
|
|
|
|
-- Incydenty (okresy niedostępności)
|
|
CREATE TABLE IF NOT EXISTS uptime_incidents (
|
|
id SERIAL PRIMARY KEY,
|
|
monitor_id INTEGER NOT NULL REFERENCES uptime_monitors(id) ON DELETE CASCADE,
|
|
started_at TIMESTAMP NOT NULL,
|
|
ended_at TIMESTAMP,
|
|
duration_seconds INTEGER,
|
|
cause VARCHAR(20) DEFAULT 'unknown',
|
|
notes TEXT,
|
|
auto_resolved BOOLEAN DEFAULT FALSE
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_uptime_incidents_monitor_id ON uptime_incidents(monitor_id);
|
|
CREATE INDEX IF NOT EXISTS idx_uptime_incidents_started_at ON uptime_incidents(started_at);
|
|
|
|
-- Wewnętrzny health log (stan serwera co 5 min)
|
|
CREATE TABLE IF NOT EXISTS internal_health_logs (
|
|
id SERIAL PRIMARY KEY,
|
|
checked_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
app_ok BOOLEAN NOT NULL,
|
|
db_ok BOOLEAN NOT NULL,
|
|
cpu_percent NUMERIC(5,2),
|
|
ram_percent NUMERIC(5,2),
|
|
disk_percent NUMERIC(5,2),
|
|
gunicorn_workers INTEGER
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_internal_health_logs_checked_at ON internal_health_logs(checked_at);
|
|
|
|
-- Uprawnienia dla app usera
|
|
GRANT ALL ON TABLE uptime_monitors TO nordabiz_app;
|
|
GRANT ALL ON TABLE uptime_checks TO nordabiz_app;
|
|
GRANT ALL ON TABLE uptime_incidents TO nordabiz_app;
|
|
GRANT ALL ON TABLE internal_health_logs TO nordabiz_app;
|
|
|
|
GRANT USAGE, SELECT ON SEQUENCE uptime_monitors_id_seq TO nordabiz_app;
|
|
GRANT USAGE, SELECT ON SEQUENCE uptime_checks_id_seq TO nordabiz_app;
|
|
GRANT USAGE, SELECT ON SEQUENCE uptime_incidents_id_seq TO nordabiz_app;
|
|
GRANT USAGE, SELECT ON SEQUENCE internal_health_logs_id_seq TO nordabiz_app;
|