Troubleshooting
speedtest binary not found
The Docker image bundles the Ookla CLI at /usr/local/bin/speedtest, so this
only affects source builds. Install the
Speedtest CLI and make sure speedtest is
on the $PATH of the environment running the app. Binary resolution happens only
inside the runner. A run that fails immediately with a not-found error is this.
(The TCP-connect ping runner needs no binary.)
Database connection errors
Confirm DATABASE_URL is correct and reachable, and that migrations have run:
mix ecto.migrate
Under Docker, check that the Postgres container is up and on the same network as
Baudflow. If ECTO_IPV6=true is set, make sure Postgres actually listens on IPv6.
A ping schedule reads 100% packet loss
The ping runner opens TCP connections to host:port and treats a completed
handshake as a latency sample. If the target doesn’t accept TCP on the configured
port, every connect fails and reads as 100% loss. Defaults target 1.1.1.1:443
(Cloudflare), which always speaks TCP. Point a schedule at a different
target_host / target_port (or ping_target / ping_port globally) at
something that accepts the connection.
Tests pass locally but fail in CI
CI runs the full gate: mix lint plus the suite against a fresh Postgres
service container. just precommit is a fast loop that skips lint, so it can
be green locally while CI is red. Run the CI-equivalent gate before pushing:
just check.
Port 4000 already in use
Stop the conflicting process, or set a different PORT.
No data flowing
- Verify a schedule is enabled and its cron is valid; a bad cron on one row is logged and skipped, not fatal.
- Check the Oban queues. Workers stay decoupled, so a stuck queue in one stage won’t surface in another.
- Make sure the scheduler is enqueueing: look for
SchedulerWorkerjobs.
Disk filling up
Measurements store the full raw result JSON. Lower retention_days if history is
growing faster than you want; the CleanupWorker prunes daily at 03:00.