docs: update README quick-start with Prometheus/Grafana and Docker publish
This commit is contained in:
parent
55b61dd0e5
commit
9e9c7eb8f1
1 changed files with 37 additions and 4 deletions
41
README.md
41
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,
|
Sub-second glass-to-glass on a LAN over WHEP, no SFU dependencies,
|
||||||
single binary, single Docker image.
|
single binary, single Docker image.
|
||||||
|
|
||||||
> **Status:** v0.2.0-dragonfork shipped 2026-05-03. Full GUI bundled
|
> **Status:** v0.2 in progress (last work 2026-05-06). Full GUI bundled
|
||||||
> (Restreamer UI + Wild Dragon WebRTC admin). Live deploy running on
|
> (Restreamer UI + Wild Dragon WebRTC admin). Prometheus + Grafana
|
||||||
> TrueNAS since 2026-04-17.
|
> observability stack shipped. Live deploy running on TrueNAS since
|
||||||
|
> 2026-04-17.
|
||||||
|
|
||||||
## What this fork adds
|
## What this fork adds
|
||||||
|
|
||||||
|
|
@ -41,6 +42,9 @@ single binary, single Docker image.
|
||||||
- **Browser-side smoke player** at `whep-player.html` — zero-dependency
|
- **Browser-side smoke player** at `whep-player.html` — zero-dependency
|
||||||
WHEP subscriber, ICE/codec/bitrate stats, JWT field, shareable
|
WHEP subscriber, ICE/codec/bitrate stats, JWT field, shareable
|
||||||
`?url=&token=` URLs.
|
`?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
|
- **Multi-viewer correctness:** per-stream peer cap, ICE-failure
|
||||||
auto-cleanup, process-stop broadcast tear-down.
|
auto-cleanup, process-stop broadcast tear-down.
|
||||||
- **Error matrix** per the design spec: `406` on codec mismatch,
|
- **Error matrix** per the design spec: `406` on codec mismatch,
|
||||||
|
|
@ -64,6 +68,9 @@ CORE_HTTP_PORT=8080
|
||||||
API_AUTH_USERNAME=admin
|
API_AUTH_USERNAME=admin
|
||||||
API_AUTH_PASSWORD=$(openssl rand -base64 24)
|
API_AUTH_PASSWORD=$(openssl rand -base64 24)
|
||||||
API_AUTH_JWT_SECRET=$(openssl rand -base64 48)
|
API_AUTH_JWT_SECRET=$(openssl rand -base64 48)
|
||||||
|
GRAFANA_ADMIN_PASSWORD=$(openssl rand -base64 24)
|
||||||
|
GRAFANA_PORT=3000
|
||||||
|
PROM_PORT=9090
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
docker compose up -d --build
|
docker compose up -d --build
|
||||||
|
|
@ -76,11 +83,21 @@ Then open in a browser (replace `<host>` with your `PUBLIC_IP`):
|
||||||
| `http://<host>:8080/` | **Restreamer UI** — manage processes, ingests, outputs |
|
| `http://<host>:8080/` | **Restreamer UI** — manage processes, ingests, outputs |
|
||||||
| `http://<host>:8080/wilddragon-webrtc.html` | **Wild Dragon WebRTC admin** — toggle `webrtc.enabled` per process, copy WHEP URL |
|
| `http://<host>:8080/wilddragon-webrtc.html` | **Wild Dragon WebRTC admin** — toggle `webrtc.enabled` per process, copy WHEP URL |
|
||||||
| `http://<host>:8080/whep-player.html` | **WHEP smoke player** — verify the WebRTC stream renders |
|
| `http://<host>:8080/whep-player.html` | **WHEP smoke player** — verify the WebRTC stream renders |
|
||||||
|
| `http://<host>:3000/` | **Grafana** — WebRTC Health dashboard (login with `GRAFANA_ADMIN_PASSWORD`) |
|
||||||
|
| `http://<host>:9090/` | **Prometheus** — raw metrics, alert rules |
|
||||||
| `http://<host>:8080/api/swagger/index.html` | **Swagger** — full API docs |
|
| `http://<host>:8080/api/swagger/index.html` | **Swagger** — full API docs |
|
||||||
|
|
||||||
The Restreamer UI doesn't yet have a WebRTC checkbox in its process
|
The Restreamer UI doesn't yet have a WebRTC checkbox in its process
|
||||||
editor — use `/wilddragon-webrtc.html` for that. Tracked in issue #15.
|
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
|
### Sample process JSON
|
||||||
|
|
||||||
```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) |
|
| 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) |
|
| 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) |
|
| 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) |
|
| TrueNAS deploy guide | [`deploy/truenas/core/README.md`](deploy/truenas/core/README.md) |
|
||||||
| Testing | [`test/TESTING.md`](test/TESTING.md) |
|
| Testing | [`test/TESTING.md`](test/TESTING.md) |
|
||||||
| Changelog (Dragon Fork) | [`CHANGELOG.md`](CHANGELOG.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
|
-run TestLatencyServerHop ./app/webrtc/... # latency p95 gate
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Load testing
|
||||||
|
|
||||||
|
```sh
|
||||||
|
go run ./test/load/sustained.go \
|
||||||
|
-url http://<host>:8080 \
|
||||||
|
-stream <processID> \
|
||||||
|
-peers 5 \
|
||||||
|
-duration 10m \
|
||||||
|
-auth "Bearer <TOKEN>" \
|
||||||
|
-out test/load/results/
|
||||||
|
```
|
||||||
|
|
||||||
|
Reports are written to `test/load/results/`. Observe the Grafana
|
||||||
|
WebRTC Health dashboard during the run.
|
||||||
|
|
||||||
## From upstream Datarhei
|
## From upstream Datarhei
|
||||||
|
|
||||||
This fork preserves everything upstream Datarhei Core does — Dragon
|
This fork preserves everything upstream Datarhei Core does — Dragon
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue