Files changed: engine/.embcache.json engine/changelog.md engine/lint-report.md vault/.trash/2026-06-19.md vault/docs/hardware/environment.md vault/docs/hardware/ip-allocation.md vault/docs/matrix/archivist.md vault/docs/matrix/matrix_host.md vault/docs/matrix/mautrix_signal.md vault/docs/matrix/synapse.md vault/docs/matrix/synapse_retention_discovery.md vault/docs/navi/cc-rules.md vault/docs/navi/deployment.md vault/docs/navi/themes.md vault/docs/services/ots-setup.md vault/docs/services/services.md vault/docs/services/usenet.md vault/docs/software/authentik.md vault/docs/software/caddy.md vault/docs/software/central.md vault/docs/software/dns.md vault/docs/software/geo-tools.md vault/docs/software/navi.md vault/docs/software/recon.md vault/docs/software/searxng.md vault/glossary.md vault/notes/echo6-landing-page-data-export.md vault/notes/ia-download-queue.md vault/projects/advbbs-project.md vault/projects/argus.md vault/projects/deploy-livesync.md vault/projects/fleet-patch-audit.md vault/projects/fleet-platform-baseline.md vault/projects/matrix-synapse-deployment.md vault/projects/meshai-config-hot-apply.md vault/projects/meshai-region-routing-plan.md vault/projects/meshai.md vault/projects/meshcore-transport.md vault/projects/meshtastic-headscale-runbook.md vault/projects/mmud-project.md vault/projects/nominatim-v5-reimport.md vault/runbooks/add-peertube-channel.md vault/runbooks/authentik-access-groups.md vault/runbooks/authentik-create-invitation.md vault/runbooks/authentik-oidc-application.md vault/runbooks/authentik-upgrade.md vault/runbooks/central-deploy-cutover.md vault/runbooks/ct-runbook.md vault/runbooks/edge2-access-reference.md vault/runbooks/expose-service-contabo.md vault/runbooks/expose-service-edge2.md vault/runbooks/expose-service-home.md vault/runbooks/fleet-magicdns-resolved-migration.md vault/runbooks/headless-browser-page-verification.md vault/runbooks/headscale-oidc-boot-order.md vault/runbooks/headscale-onboard-node.md vault/runbooks/ia-cli-reference.md vault/runbooks/ia-download-mirror.md vault/runbooks/idahomesh-bridge-setup.md vault/runbooks/idahomesh-vpn-device-setup.md vault/runbooks/lxc-service-migration.md vault/runbooks/mailcow-create-mailbox.md vault/runbooks/meshai-prod-compose-override.md vault/runbooks/meshmonitor-password-reset.md vault/runbooks/meshtastic-sidecar-node.md vault/runbooks/meshtasticd-sim-nodes-runbook.md vault/runbooks/nordvpn-lxc.md vault/runbooks/peertube-remote-runner.md vault/runbooks/pg-backup.md vault/runbooks/pi-nas-omv-runbook.md vault/runbooks/pipeline-patterns.md vault/runbooks/proxmox-create-ubuntu-vm.md vault/runbooks/proxmox-onboard-node.md vault/runbooks/pymc-repeater-kiss-tnc-reenumeration.md vault/runbooks/recon-operations.md vault/runbooks/recon-service-integration.md vault/runbooks/syncthing-add-node.md vault/runbooks/toc-cortex-pve9.2-update.md vault/session-resume/SESSION-HANDOFF-meshai-test.md
5.4 KiB
| title | type | tags | aliases | related | updated | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| central — Data-Hub Spine | reference |
|
|
2026-07-13 |
central — Data-Hub Spine
Overview
central is a multi-domain real-time data-hub spine. Adapters normalize upstream sources, publish CloudEvents to NATS/JetStream, and archive to TimescaleDB/PostGIS for historical and geospatial query. It is the live data backbone for navi traffic tiles and related situational-awareness feeds.
- URL (internal): http://central.echo6.mesh:8000 (mesh-only, no public exposure)
- Host: utility CT 104 (unprivileged Ubuntu LXC)
- Repo: github.com/zvx-echo6/central (public, Python, deployed at detached HEAD, tag v0.14.5)
- Deploy path: /opt/central (venv: /opt/central/.venv, env: /etc/central/central.env, system user: central)
Host
| Attribute | Value |
|---|---|
| Container | utility CT 104 |
| Local IP | 192.168.1.104 |
| Tailscale / mesh | 100.64.0.12 → central.echo6.mesh |
| Resources | 4 cores / 12 GB RAM / 100 GB disk |
| OS | Ubuntu LXC (unprivileged) |
Architecture
The data flow is: upstream APIs → adapters (central-supervisor) → NATS/JetStream :4222 → central-archive (TimescaleDB/PostGIS :5432). The central-gui (FastAPI + HTMX, :8000) exposes the API consumed by navi via recon-vm's nginx (port 8440, ^~ /api/traffic/ → central.echo6.mesh:8000).
Systemd Services
All three units are enabled and active; deployment survives reboot. Deps: nats-server, postgresql@16-main.
| Unit | Role |
|---|---|
| central-supervisor | Adapter scheduler + CloudEvents publisher |
| central-archive | JetStream → TimescaleDB consumer |
| central-gui | FastAPI + HTMX web app + API (the :8000 listener) |
Ports
| Port | Protocol | Purpose |
|---|---|---|
| :8000 | HTTP | GUI / API (bound 0.0.0.0) |
| :4222 | TCP | NATS client connections |
| :8222 | HTTP | NATS monitoring |
| :5432 | TCP | PostgreSQL 16 + TimescaleDB/PostGIS |
Adapters (23 configured, 22 enabled)
| Domain | Sources |
|---|---|
| Traffic | ITD 511, WZDX, TomTom flow/incidents, 511 cameras |
| Wildfire | WFIGS incidents/perimeters, InciWeb, FIRMS |
| Weather / Space-weather | NWS, SWPC k-index/protons/alerts |
| Hydro | NWIS |
| Earthquakes | USGS |
| Avalanche | avalanche.org |
| Disasters | GDACS, EONET |
| Satellite | CelesTrak TLE, sat positions/orbits, satpass_predict (n2yo_visualpasses disabled 2026-06-27) |
GUI / API Surface
Authenticated app with login/sessions/CSRF, first-run setup wizard, operator management, adapter configuration, stream viewer, JetStream consumer management (/consumers — view + delete consumers; central's own archive-* durable consumers are protected/non-deletable; CSRF + audit-logged), enrichment pipeline, monitoring-area management, API key management, audit log, and manual resend.
Auth-exempt tile endpoints (used by navi, verified HTTP 200):
| Endpoint | Format |
|---|---|
| /api/traffic/flow/{z}/{x}/{y}.png | PNG tile (raster, image/png) |
| /api/traffic/flow/{z}/{x}/{y}.pbf | PBF tile (vector, application/x-protobuf) |
/health is also auth-exempt (returns {"status":"ok"}). All other /api/ endpoints redirect to /login.
Consumer — navi Integration
navi-traffic (navi's in-VM :8421 extraction service) was retired on 2026-05-26 and cut over to central. recon-vm's nginx (/etc/nginx/sites-available/navi.echo6.co, port 8440) now proxies ^~ /api/traffic/ → central.echo6.mesh:8000 with a 120s tile cache. navi-traffic:8421 is confirmed dead and disabled. Tile endpoints verified returning HTTP 200.
Dependencies
| Component | Location |
|---|---|
| NATS / JetStream | Local (central CT 104) |
| PostgreSQL 16 + TimescaleDB + PostGIS | Local (central CT 104) |
| Upstream APIs | ~20 external sources (see Adapters table) |
Data Plane
Single TimescaleDB hypertable public.events (~22 GB, ~3.19 M rows, 331 chunks, compression not enabled). JetStream ~5.86 GB / 20 GB across 12 streams.
Deploy / State Notes (as of 2026-06-29)
- Deployed HEAD: v0.14.7 (detached HEAD — the box tracks tags). All prior drift resolved: migration 036 committed,
pyproject.tomlversion current, README operational. - Deploy mechanism: manual, tag-based (
git checkout <tag>→uv sync→central-migrate→ restart). One-commandscripts/deploy.shships in-repo; full procedure in the central-deploy-cutover runbook. No CI/CD; no automated DB backup (pre-flightpg_dumpis the only migration safety net; migrations are forward-only). central-migrateenv gotcha: manual calls needcd /opt/central && set -a && . /etc/central/central.env && set +a && …(the units supply this via WorkingDirectory + EnvironmentFile).- EONET: now global as of v0.14.6 (2026-06-28) —
bypass_bbox_filter=True+ the adapterregionkey removed. NOTE: itsevents-table row count is a misleading health signal (dedup + partition expiry); use the CENTRAL_DISASTER stream as the EONET flow signal.avalanche_orgzero-events is expected (off-season gate). - Supervisor CPU ~17%→~1.4% and cursors.db 1.3 GB→496 MB after the v0.14.6 dedup/WAL fix + a VACUUM.
Last updated: 2026-06-29 — v0.14.7 deployed (consumers admin page); drift cleared, EONET global, perf fixes verified.