11 Commits
Author SHA1 Message Date
eSlider 2a6b50929c docs: align wire-spec and mark implemented vs proposed
CI & Release / Verify simulator (push) Successful in 18s
CI & Release / Trivy scan (push) Successful in 18s
CI & Release / Semantic Release (push) Successful in 6s
Keep the 45-byte pose frame consistent across docs, simulator, and
prototype, clarify MinIO is not peer sync, and state clearly that the
repo is a from-scratch platform sketch with options rather than mandates.
2026-07-17 12:16:39 +01:00
eSlider ea062af86a perf: bound lake scans and add platform Grafana dashboard
CI & Release / Verify simulator (push) Successful in 11s
CI & Release / Trivy scan (push) Successful in 9s
CI & Release / Semantic Release (push) Successful in 5s
Explorer and exporter were scanning the full Parquet lake every 1–5s
(~2000 files, 200MB+), driving ~2.2 CPU cores. Limit metrics to the
last N flights, cache DuckDB views and the partition tree, slow live
polls to 2s, and keep drones alive after seal to stop restart churn.

Add node-exporter, scan-duration metrics, and a Swarm Platform Grafana
dashboard for node CPU/memory and scan health.
2026-07-08 21:19:53 +01:00
eSlider 669e8ff005 fix: run simulator image as non-root user (Trivy DS-0002)
CI & Release / Verify simulator (push) Successful in 11s
CI & Release / Trivy scan (push) Successful in 9s
CI & Release / Semantic Release (push) Successful in 4s
Add swarm uid 10001 in both build stages so Trivy config scan passes
and containers do not run as root. Mounted /data volumes should be
world-writable or owned by uid 10001 (var/t1 from Ansible is 0777).
2026-07-08 20:20:19 +01:00
eSlider cb4664f5ee feat: add IaC layer with shared var/t1 and var/t3 data paths
Ansible provisions the k3d cluster and Flux controllers; Terraform
modules deploy the simulated fleet and ground warehouse. Compose and
k3d share var/t1 (live lake) and var/t3 (warehouse). The prototype
gains a live mode fed by the explorer read-only SQL API.
2026-07-08 20:17:32 +01:00
eSlider d58569b25c test: add pytest suite and gate Docker builds on it
Unit tests cover the SQL gate, broadcast codec, Hive writer layout,
and flight kinematics. CI runs pytest first; the simulator image build
runs tests in a dedicated stage before the final layer.
2026-07-08 20:17:18 +01:00
eSlider eef6623f39 fix(simulator): disable Grafana phone-home for air-gap hygiene
CI & Release / Verify simulator (push) Successful in 7s
CI & Release / Trivy scan (push) Successful in 9s
CI & Release / Semantic Release (push) Successful in 2s
Grafana was checking grafana.com for updates and sending usage
reporting by default - the only outbound traffic in the whole stack.
Verified empty latestVersion and no established external connections
from any container after the change.
2026-07-08 14:56:43 +01:00
eSlider a07460b2af fix(simulator): add pytz for TIMESTAMPTZ fetch in explorer queries 2026-07-08 13:47:53 +01:00
eSlider 59acffc068 feat(simulator): web data-plane explorer
Single-page view over the Parquet lake: live partition tree with
rolled-up sizes and a SQL console gated by the same read-only rules
as the peer query channel. Ships in the monitoring profile.
2026-07-08 13:45:52 +01:00
eSlider e45a34e086 docs: promote no-debug-API principle; make monitoring ports configurable
Bench and flight share one query channel, so debugging exercises the
production path daily. Grafana/Prometheus/exporter host ports become
env-overridable for shared hosts.
2026-07-08 13:36:29 +01:00
eSlider 8f98a0c994 feat(simulator): Grafana monitoring over generated Parquet
Monitoring compose profile: dependency-free Prometheus exporter that
scans the Parquet output with DuckDB (rows, detections, pose frames,
battery, RSSI, link distance, bytes on disk), Prometheus scrape config
and a provisioned Grafana dashboard. Demonstrates the observability
doctrine: fleet statistics derived from the data platform itself.
2026-07-08 13:27:53 +01:00
eSlider 3deaa382e1 feat(simulator): virtual drone fleet data generator
One process per drone: seeded patrol kinematics, sensor streams at
realistic rates, detection events, hot current/ blocks sealed into
Hive-partitioned Parquet, and the compact UDP state broadcast with
peer RSSI derivation. Scales via docker compose --scale.
2026-07-08 13:12:34 +01:00