diff --git a/README.md b/README.md index f2e212d..ab6de31 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,10 @@ publisher (OBS / FFmpeg / SRT) ──▶ datarhei Core ──▶ WebRTC peers Sub-second glass-to-glass on a LAN over WHEP, no SFU dependencies, single binary, single Docker image. -> **Status:** v0.2.0-dragonfork shipped 2026-05-03. Full GUI bundled -> (Restreamer UI + Wild Dragon WebRTC admin). Live deploy running on -> TrueNAS since 2026-04-17. +> **Status:** v0.2 in progress (last work 2026-05-06). Full GUI bundled +> (Restreamer UI + Wild Dragon WebRTC admin). Prometheus + Grafana +> observability stack shipped. Live deploy running on TrueNAS since +> 2026-04-17. ## What this fork adds @@ -41,6 +42,9 @@ single binary, single Docker image. - **Browser-side smoke player** at `whep-player.html` — zero-dependency WHEP subscriber, ICE/codec/bitrate stats, JWT field, shareable `?url=&token=` URLs. +- **Prometheus observability** — eleven `dragonfork_webrtc_*` metrics + (RED-method counters/histograms + state gauges). Grafana health + dashboard with 5 rows and 4 pre-loaded alert rules. - **Multi-viewer correctness:** per-stream peer cap, ICE-failure auto-cleanup, process-stop broadcast tear-down. - **Error matrix** per the design spec: `406` on codec mismatch, @@ -64,6 +68,9 @@ CORE_HTTP_PORT=8080 API_AUTH_USERNAME=admin API_AUTH_PASSWORD=$(openssl rand -base64 24) API_AUTH_JWT_SECRET=$(openssl rand -base64 48) +GRAFANA_ADMIN_PASSWORD=$(openssl rand -base64 24) +GRAFANA_PORT=3000 +PROM_PORT=9090 EOF docker compose up -d --build @@ -76,11 +83,21 @@ Then open in a browser (replace `` with your `PUBLIC_IP`): | `http://:8080/` | **Restreamer UI** — manage processes, ingests, outputs | | `http://:8080/wilddragon-webrtc.html` | **Wild Dragon WebRTC admin** — toggle `webrtc.enabled` per process, copy WHEP URL | | `http://:8080/whep-player.html` | **WHEP smoke player** — verify the WebRTC stream renders | +| `http://:3000/` | **Grafana** — WebRTC Health dashboard (login with `GRAFANA_ADMIN_PASSWORD`) | +| `http://:9090/` | **Prometheus** — raw metrics, alert rules | | `http://:8080/api/swagger/index.html` | **Swagger** — full API docs | The Restreamer UI doesn't yet have a WebRTC checkbox in its process editor — use `/wilddragon-webrtc.html` for that. Tracked in issue #15. +### Pulling a pre-built image (after first tag is published) + +```sh +# Update .env, then: +docker compose pull # pulls pre-built multi-arch image +docker compose up -d # no --build needed +``` + ### Sample process JSON ```json @@ -119,7 +136,8 @@ SDI + file audio), use the `video_map` and `audio_map` fields: | Design spec | [`docs/design/2026-04-16-datarhei-dragon-fork-webrtc-design.md`](docs/design/2026-04-16-datarhei-dragon-fork-webrtc-design.md) | | M1 (PoC) plan | [`docs/design/2026-04-16-datarhei-dragon-fork-m1-webrtc-poc.md`](docs/design/2026-04-16-datarhei-dragon-fork-m1-webrtc-poc.md) | | M2 (Core integration) spec | [`docs/design/2026-04-17-datarhei-dragon-fork-m2-webrtc-core-integration.md`](docs/design/2026-04-17-datarhei-dragon-fork-m2-webrtc-core-integration.md) | -| Prometheus metrics design (deferred) | [`docs/design/2026-05-03-datarhei-dragon-fork-webrtc-prometheus-metrics-design.md`](docs/design/2026-05-03-datarhei-dragon-fork-webrtc-prometheus-metrics-design.md) | +| Prometheus metrics design | [`docs/design/2026-05-03-datarhei-dragon-fork-webrtc-prometheus-metrics-design.md`](docs/design/2026-05-03-datarhei-dragon-fork-webrtc-prometheus-metrics-design.md) | +| Upstream rebase policy | [`docs/REBASE.md`](docs/REBASE.md) | | TrueNAS deploy guide | [`deploy/truenas/core/README.md`](deploy/truenas/core/README.md) | | Testing | [`test/TESTING.md`](test/TESTING.md) | | Changelog (Dragon Fork) | [`CHANGELOG.md`](CHANGELOG.md) | @@ -136,6 +154,21 @@ go test -tags latency -timeout 90s -count=1 \ -run TestLatencyServerHop ./app/webrtc/... # latency p95 gate ``` +## Load testing + +```sh +go run ./test/load/sustained.go \ + -url http://:8080 \ + -stream \ + -peers 5 \ + -duration 10m \ + -auth "Bearer " \ + -out test/load/results/ +``` + +Reports are written to `test/load/results/`. Observe the Grafana +WebRTC Health dashboard during the run. + ## From upstream Datarhei This fork preserves everything upstream Datarhei Core does — Dragon