diff --git a/assets/css/dashboard.css b/assets/css/dashboard.css index 7b80471..d110dfa 100644 --- a/assets/css/dashboard.css +++ b/assets/css/dashboard.css @@ -159,17 +159,38 @@ h2 { color: var(--primary); } -/* Status dot */ -.status { - position: absolute; - top: 1rem; - right: 1rem; - width: 8px; - height: 8px; - background: var(--chart-4); - border-radius: 50%; +/* Health, inside the tile. Same shape as the corwins.media status badge: + a label, a status word, and a left edge that carries the state. */ +.health { + display: flex; + flex-direction: column; + margin: 0 0 0.85rem; + padding: 8px 10px; + border: 1px solid var(--border); + border-left-width: 4px; + background: var(--background); } +.health-k { + font-family: var(--font-mono); + font-size: 12px; + letter-spacing: 0.08em; + text-transform: uppercase; + color: var(--muted-foreground); +} + +.health-v { + font-size: 18px; + font-weight: 600; + line-height: 1.2; + color: var(--foreground); +} + +.health-ok { border-left-color: var(--chart-4) !important; } +.health-warn { border-left-color: var(--chart-5) !important; } +.health-bad { border-left-color: var(--destructive) !important; } +.health-unknown { border-left-color: var(--muted-foreground) !important; } + /* Icon plate — one navy line glyph in a hairline square, like the identification block on a technical drawing. Glyphs are the inline Tabler sprite in index.html; stroke weight and size live here. */ diff --git a/compose.yml b/compose.yml index 1bc399d..6dd7a68 100644 --- a/compose.yml +++ b/compose.yml @@ -600,10 +600,15 @@ services: dashboard: image: nginx:alpine container_name: dashboard + # gateway reaches the apps. observability reaches loki and tempo. + # storage reaches rustfs. The landing-page health probes use those names. networks: - gateway + - observability + - storage volumes: - ./infra/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - ./infra/nginx/healthz-headers.conf:/etc/nginx/healthz-headers.conf:ro - ./infra/nginx/index.html:/usr/share/nginx/html/index.html:ro - ./assets/css/dashboard.css:/usr/share/nginx/html/dashboard.css:ro - ./assets/css/inject.css:/usr/share/nginx/html/fhirworx.css:ro diff --git a/dev/scripts/bootstrap_sso.py b/dev/scripts/bootstrap_sso.py index 862954a..f14fc50 100644 --- a/dev/scripts/bootstrap_sso.py +++ b/dev/scripts/bootstrap_sso.py @@ -277,6 +277,7 @@ SUBDOMAINS = [ "llm", "bcda", # BCDA manager (P52) — Streamlit behind git-sso "lead", # LEAD public-data explorer — Streamlit behind git-sso + "reach", # same public-data explorer, at reach.fhirworx.io ] diff --git a/infra/coredns/hosts b/infra/coredns/hosts index 5fb5f2d..8518f2f 100644 --- a/infra/coredns/hosts +++ b/infra/coredns/hosts @@ -19,3 +19,4 @@ 192.168.1.192 llm.fhirworx.io 192.168.1.192 bcda.fhirworx.io 192.168.1.192 lead.fhirworx.io +192.168.1.192 reach.fhirworx.io diff --git a/infra/nginx/healthz-headers.conf b/infra/nginx/healthz-headers.conf new file mode 100644 index 0000000..bf62633 --- /dev/null +++ b/infra/nginx/healthz-headers.conf @@ -0,0 +1,10 @@ +proxy_http_version 1.1; +proxy_set_header Host $proxy_host; +proxy_set_header Connection ""; +proxy_connect_timeout 2s; +proxy_read_timeout 3s; +# Some apps already send this header. Two copies make the browser +# reject the response, so the badge would say down while the app is up. +proxy_hide_header Access-Control-Allow-Origin; +add_header Access-Control-Allow-Origin "*" always; +add_header Cache-Control "no-store" always; diff --git a/infra/nginx/index.html b/infra/nginx/index.html index 05fc17e..fd25e8a 100644 --- a/infra/nginx/index.html +++ b/infra/nginx/index.html @@ -51,178 +51,188 @@
RAG chat over indexed CMS rulemaking comments, with cited sources
+ healthchecking - - +Beneficiary Claims Data API v3 — exports, store, load, crosswalk
+ healthchecking - - +Read-only explorer over the public-data DuckDB mirror
+ healthchecking + + + + + + +Read-only explorer over the public-data DuckDB mirror
+ healthchecking -Cloud-native reverse proxy and load balancer with automatic TLS
+ healthchecking -S3-compatible object storage for all your data needs
+ healthchecking -Self-hosted Git service with packages and CI
+ healthchecking GPU -Marimo reactive notebooks with CUDA acceleration
+ healthchecking GPU -Research reference manager in the cloud
+ healthchecking -API reference and CMS bibliography browser
+ healthchecking - + Data -Git-like versioned data catalog for Apache Iceberg
+ healthchecking Data -Distributed SQL query engine for the lakehouse
+ healthchecking -Apache Iceberg catalog with governance and Unity-style access control
+ healthchecking -Observability dashboards for metrics, logs, and traces
+ healthchecking -Distributed tracing for microservices
+ healthchecking -Metrics collection and alerting
+ healthchecking - - +Log aggregation system by Grafana
+ healthchecking - - +FastAPI platform backend
+ healthchecking @@ -234,15 +244,33 @@