Connectivity testing tool for the Anvil homelab
  • Go 98.6%
  • Makefile 1.4%
Find a file
David Segonds 335212f208
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
feat: add per-host aggregate metrics (passed/total)
2026-06-05 17:53:22 +02:00
.planning Initial commit: canyouhearme connectivity testing tool 2026-06-05 16:17:09 +02:00
cmd/canyouhearme feat: add traceroute, textfile metrics, verbose mode, short flags, TOML config 2026-06-05 17:22:36 +02:00
deploy feat: add traceroute, textfile metrics, verbose mode, short flags, TOML config 2026-06-05 17:22:36 +02:00
internal feat: add per-host aggregate metrics (passed/total) 2026-06-05 17:53:22 +02:00
.gitignore Initial commit: canyouhearme connectivity testing tool 2026-06-05 16:17:09 +02:00
.woodpecker.yml feat: add traceroute, textfile metrics, verbose mode, short flags, TOML config 2026-06-05 17:22:36 +02:00
AGENTS.md docs: add metrics section to README and AGENTS 2026-06-05 17:24:27 +02:00
canyouhearme.toml feat: add traceroute, textfile metrics, verbose mode, short flags, TOML config 2026-06-05 17:22:36 +02:00
go.mod feat: add traceroute, textfile metrics, verbose mode, short flags, TOML config 2026-06-05 17:22:36 +02:00
go.sum feat: add traceroute, textfile metrics, verbose mode, short flags, TOML config 2026-06-05 17:22:36 +02:00
Makefile Initial commit: canyouhearme connectivity testing tool 2026-06-05 16:17:09 +02:00
README.md docs: add metrics section to README and AGENTS 2026-06-05 17:24:27 +02:00

canyouhearme

Connectivity testing tool for the Anvil homelab. Runs on the metal hosts themselves and asks: from this host right now, what can I reach, and via what path?

Checks

Check What it tests
TCP Raw network reachability to each host's IPs (port 22)
SSH SSH daemon available on port 22
HTTP Service endpoints responding with 2xx/3xx
DNS Domain names for all services resolve
Mesh All 8 Tailscale nodes reachable via 100.64.x.x
Trace Network path via ICMP traceroute (planned)

Usage

canyouhearme                          # full check
canyouhearme --quick                  # one TCP + one HTTP per host
canyouhearme --hosts amber,brick      # specific hosts
canyouhearme --checks tcp,ssh         # specific checks
canyouhearme --format json            # machine-readable output
canyouhearme --verbose                # per-path detail

Metrics

Writes to node_exporter's textfile collector (matching rcheck/dedup pattern). Default: /var/lib/node_exporter/textfile_collector/canyouhearme.prom.

Metric Labels
canyouhearme_check_up host, check, path
canyouhearme_check_duration_secs host, check, path
canyouhearme_tailscale_available
canyouhearme_mesh_peers_up
canyouhearme_trace_hops target_host, path
canyouhearme_trace_final_rtt_ms target_host, path

Override directory: --metrics-dir /custom/path or CANYOUHEARME_METRICS_DIR.

Build

make build          # CGO_ENABLED=0 static binary
make cross          # linux/amd64, linux/arm64, darwin/arm64
make test           # go test ./...
make lint           # go vet + gofmt

Config

Built-in inventory covers all 8 Anvil hosts. No config file required. Override via TOML at /etc/canyouhearme/canyouhearme.toml or via flags and env vars. See .planning/SPEC.md for full details.