Forked netzbremse service for m0sh1.cc with CNPG-backed storage. https://bremse.m0sh1.cc/
  • Go 76%
  • JavaScript 13.4%
  • CSS 5.6%
  • HTML 5%
Find a file
2026-06-02 11:43:24 +00:00
.github build: use local renovate base preset 2026-05-25 22:33:57 +02:00
.woodpecker Update dhi.io/cosign:3.0.6-alpine3.23-dev Docker digest to b55369e 2026-06-02 11:27:30 +00:00
cmd fix: restore dashboard and harden netzbremse 2026-05-27 10:39:49 +02:00
db/migrations feat: use nullable metrics to distinguish failed from zero measurements 2026-03-31 17:50:45 +02:00
internal fix: restore dashboard and harden netzbremse 2026-05-27 10:39:49 +02:00
scripts feat(measurement): capture browser diagnostics on failed runs 2026-04-30 20:44:33 +02:00
.dockerignore perf(docker): tighten context and dependency layers 2026-03-12 04:42:42 +01:00
.gitignore fix(build): commit dashboard and measurement sources 2026-03-12 04:00:25 +01:00
.releaserc.json chore(ci): make forgejo netzbremse source of truth 2026-05-14 16:40:43 +02:00
Dockerfile.dashboard Update dhi base images 2026-05-31 06:29:14 +00:00
Dockerfile.measurement Update dhi base images 2026-05-31 06:29:14 +00:00
go.mod refactor: update repository references 2026-05-18 13:37:55 +02:00
go.sum Merge remote-tracking branch 'origin/main' into sync-forgejo-github 2026-05-14 15:02:47 +02:00
package-lock.json Lock file maintenance 2026-06-01 00:38:32 +00:00
package.json Update dependency yauzl to v3.3.2 2026-05-31 16:07:26 +00:00
README.md refactor: update repository references 2026-05-18 13:37:55 +02:00
SECURITY.md refactor: update repository references 2026-05-18 13:37:55 +02:00

Netzbremse

build release

Self-hosted speed telemetry for netzbremse.de, backed by PostgreSQL.

About Netzbremse

Netzbremse ("net brake") is a campaign by AKVorrat.at investigating throttling and net-neutrality violations by Deutsche Telekom and other European ISPs. The project collects crowd-sourced speed-test data via a Cloudflare-backed browser measurement to build an evidence base for regulatory complaints.

This repository provides two service components that run the Netzbremse measurement on a schedule and present the results through a lightweight dashboard:

Component Description
measurement Headless browser worker that runs the Netzbremse speed test and writes results to PostgreSQL
dashboard Static web UI and JSON API serving measurement data from PostgreSQL

Repository layout

cmd/measurement/          Measurement worker entrypoint
cmd/dashboard/            Dashboard server entrypoint
cmd/dashboard/static/     Embedded HTML, CSS, and JS served by the dashboard
internal/                 Shared application code (config, model, postgres)
scripts/                  Puppeteer-based browser runner
db/                       SQL schema
.woodpecker/              CI and release pipelines

Configuration

Database

Variable Description
NETZBREMSE_DATABASE_URL PostgreSQL connection URI (preferred)
DATABASE_URL Fallback if the above is not set

Measurement

Variable Description
NETZBREMSE_MEASUREMENT_INTERVAL Time between runs (e.g. 1h)
NETZBREMSE_ENDPOINT Target URL (default: https://netzbremse.de/speed)
NETZBREMSE_SPEEDTEST_COMMAND Override the browser runner command
NETZBREMSE_SPEEDTEST_TIMEOUT Per-run timeout (e.g. 4m)
NETZBREMSE_IMPORT_DIR Directory to watch for legacy JSON result files

Dashboard

Variable Description
NETZBREMSE_DASHBOARD_LIMIT Max rows returned by the measurements API

Local verification

go test ./...
node --check scripts/netzbremse-browser.mjs
docker build -f Dockerfile.measurement .
docker build -f Dockerfile.dashboard .

CI and release

https://git.m0sh1.cc/m0sh1/netzbremse is the source-of-truth repository. GitHub is a push mirror for GHCR and GitHub-side automation. Pushes to main run tests and semantic-release against Forgejo. The release step needs Woodpecker secrets forgejo_username and forgejo_token with permission to push tags to the Forgejo repository; Woodpecker's clone-only netrc credentials are not available inside the Node release image. Tags (v*) trigger the full release pipeline:

  1. Build release images for linux/amd64
  2. Push to ghcr.io/yaelmoshi/netzbremse-{measurement,dashboard}
  3. Trivy scan, Cosign sign, SPDX SBOM + vuln attestations
  4. Mirror to harbor.m0sh1.cc/apps/ with Cosign + Notation signatures
  5. GitHub Actions generate CodeQL analysis and build provenance attestations

For the live GitOps deployment, ghcr.io is the source of truth. Harbor keeps a signed replica for storage and downstream reuse, but the cluster should consume ghcr.io/yaelmoshi/netzbremse-* images.

Licence

This project builds on the open measurement infrastructure published by AKVorrat. The PostgreSQL backend, dashboard, and CI pipeline are original work for m0sh1.cc.