clusev/database/migrations
boban 65b92bc65c feat(uptime): HTTP/TCP health checks + status board (feature 8/8)
Uptime monitoring for the services the fleet hosts: HTTP and TCP probes with a live up/down status
board. Completes the monitoring trio (alerts, certs, uptime).

- HealthService::probe(check): native — Laravel HTTP client (withoutRedirecting; reports only the
  status code + latency, never the response body → no internal-content exfil) for http, a PHP TCP
  stream for tcp. No SSH, no shell, so the target is never interpolated into a command. 2xx/3xx = up;
  a 4xx/5xx means "answered but unhealthy"; a connect error = down.
- Health\Index page (route /health, `operate`-gated: route + mount + per-method). Add/remove checks
  (http target validated as a real http(s) URL; tcp target as a hostname/IP + a required port). Lazy
  per-check probe, each guarded. Up/total summary. Delete via signed ConfirmToken + R5 modal.
  Add/delete audited.
- lang/{de,en}/health.php + audit.php health.check_* + shell.nav_health (de/en parity). No emoji.

11 new tests: service (http 2xx up / 5xx down / connection-error down, tcp refused-port down),
component (route gating, add http + audit, reject non-url http target, tcp requires host+port,
reject missing port, scan probes each check, delete via confirmed token). 742 tests green, Pint,
lang parity, self-reviewed. A PUBLIC (unauthenticated) status page is a documented future.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 21:04:14 +02:00
..
0001_01_01_000000_create_users_table.php feat: scaffold — Dockerized Laravel 13 + Livewire 3 + Tailwind 4 + Reverb 2026-06-12 00:31:50 +02:00
0001_01_01_000001_create_cache_table.php feat: scaffold — Dockerized Laravel 13 + Livewire 3 + Tailwind 4 + Reverb 2026-06-12 00:31:50 +02:00
0001_01_01_000002_create_jobs_table.php feat: scaffold — Dockerized Laravel 13 + Livewire 3 + Tailwind 4 + Reverb 2026-06-12 00:31:50 +02:00
2026_06_12_041823_create_servers_table.php feat: v1 data models + routes (Server/AuditEvent/SshCredential) 2026-06-12 06:25:47 +02:00
2026_06_12_041824_create_audit_events_table.php feat: v1 data models + routes (Server/AuditEvent/SshCredential) 2026-06-12 06:25:47 +02:00
2026_06_12_041824_create_ssh_credentials_table.php feat: v1 data models + routes (Server/AuditEvent/SshCredential) 2026-06-12 06:25:47 +02:00
2026_06_12_114836_add_security_columns_to_users_table.php feat: auth + 2FA (login wall + TOTP + forced onboarding) 2026-06-12 13:57:02 +02:00
2026_06_12_120000_add_ssh_host_key_to_servers.php fix(ssh): address adversarial review — host-key pinning, escaping, parsers 2026-06-12 21:55:27 +02:00
2026_06_13_010000_add_name_and_status_to_ssh_credentials.php feat(security): dashboard hardening, credential mgmt, system domain/TLS + channel, self-hardening 2026-06-13 02:25:23 +02:00
2026_06_13_010001_create_settings_table.php feat(security): dashboard hardening, credential mgmt, system domain/TLS + channel, self-hardening 2026-06-13 02:25:23 +02:00
2026_06_13_020000_drop_dashboard_domain_settings.php fix(tls/ui): fully automatic TLS (status-only) + uniform hardening buttons 2026-06-13 21:17:26 +02:00
2026_06_13_030000_add_locale_to_users.php feat(i18n): bilingual foundation (DE/EN) + localize auth/dashboard/servers/fleet/account 2026-06-13 22:36:16 +02:00
2026_06_14_000001_add_two_factor_recovery_codes_to_users_table.php feat(auth): store 2FA recovery codes (encrypted) on users 2026-06-14 16:48:21 +02:00
2026_06_14_000002_create_webauthn_credentials_table.php fix(webauthn): hash-indexed credential ids + reset keys on 2FA disable 2026-06-14 18:40:24 +02:00
2026_06_17_000001_add_two_factor_last_used_step_to_users_table.php fix(security): harden brute-force, rate-limiting and auth-DoS (audit follow-up) 2026-06-17 17:59:45 +02:00
2026_06_20_000001_create_banned_ips_table.php feat(auth): BannedIp model + migration 2026-06-20 17:26:28 +02:00
2026_06_20_000010_create_wg_traffic_samples_table.php feat(wg): wg_traffic_samples table + model 2026-06-20 23:59:11 +02:00
2026_06_25_000001_create_metric_samples_table.php feat(metrics): persistent resource-history graph on the Server-Details page 2026-06-25 01:31:27 +02:00
2026_06_25_000002_create_terminal_sessions_table.php feat(terminal): web terminal — per-server SSH + Clusev host PTY (xterm.js + node sidecar) 2026-06-25 03:21:10 +02:00
2026_06_25_000003_create_host_credentials_table.php feat(terminal): Clusev-host SSH login tile + server search; drop the inline hint 2026-06-25 19:46:55 +02:00
2026_06_26_000001_add_onboarding_tour_to_users.php feat(onboarding): first-run spotlight tour — dimmed backdrop, sidebar highlights, relaunchable 2026-07-02 20:00:19 +02:00
2026_07_05_000001_add_role_to_users_table.php feat(rbac): role enum + column + gates foundation (admin>operator>viewer) 2026-07-05 00:42:16 +02:00
2026_07_05_100001_create_server_groups_table.php feat(fleet): server groups — organise the fleet + filter (feature 1/8) 2026-07-05 19:36:17 +02:00
2026_07_05_100002_create_alert_rules_table.php feat(alerts): threshold alerting + notifications (feature 2/8) 2026-07-05 20:07:54 +02:00
2026_07_05_100003_create_alert_incidents_table.php feat(alerts): threshold alerting + notifications (feature 2/8) 2026-07-05 20:07:54 +02:00
2026_07_05_100004_create_runbooks_table.php feat(commands): ad-hoc fleet commands + runbooks (feature 4/8) 2026-07-05 20:38:09 +02:00
2026_07_05_100005_create_cert_endpoints_table.php feat(security): TLS certificate expiry monitoring (feature 7/8) 2026-07-05 20:57:53 +02:00
2026_07_05_100006_create_health_checks_table.php feat(uptime): HTTP/TCP health checks + status board (feature 8/8) 2026-07-05 21:04:14 +02:00