Commit graph

15 commits

Author SHA1 Message Date
d4e64f6a2d checker: implement ShareKey to mutualise pings across targets
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v0.4.0
A ping result depends only on the set of target addresses and the probe
count, never on which domain or service the addresses belong to. Implement
sdk.ObservationSharer so the host can collect a single ICMP probe per address
set (per user) instead of re-pinging once per record: with 1.2.3.4 present in
many domains under several A records, the same address was probed dozens of
times for identical data.

The share key sorts the resolved addresses and folds in the probe count;
evaluation thresholds (warningRTT, ...) are intentionally excluded as they
only affect how the shared observation is judged. Unresolvable inputs yield
an empty key so the host falls back to per-target caching.
2026-06-18 15:08:59 +09:00
fb1b1204b4 checker: raise default RTT warning threshold to 200ms
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v0.3.0
The 100ms default warning collided with ordinary cross-region internet
latency (e.g. transatlantic RTTs of ~100ms), causing spurious warnings
on healthy long-haul targets. Bump the default warning to 200ms and
factor the warning/critical defaults into package constants so the two
call sites can no longer drift.
2026-06-18 04:28:47 +09:00
ce74914599 Add CI/CD pipeline
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/tag Build is passing
v0.2.0
2026-05-10 19:17:59 +08:00
9cdf16b2b2 Include rules section 2026-04-30 08:49:43 +07:00
c7dad76034 docker: add HEALTHCHECK probing /health
The binary doubles as its own healthcheck client via the SDK's
-healthcheck flag, so the probe works in the scratch image
(no shell, no curl, no wget).
2026-04-26 18:05:47 +07:00
2aa596afd5 Address publication review feedback
Add the AGPL LICENSE file and a deployment-security note in the README
to clarify that the unauthenticated /collect endpoint must run on a
trusted network.

Fix the IPv6 reachability rule so it consults the IP actually probed:
PingTargetResult now carries ResolvedIP populated from pinger.IPAddr(),
which lets the rule classify hostname targets correctly instead of
always reporting "No IPv6 target pinged".

Tighten error handling: ipsFromService now propagates JSON errors,
ExtractMetrics wraps decode failures, the count option returns an
explicit error when out of range instead of silently clamping, and the
"all pings failed" message no longer concatenates every per-target
error. Threshold validation is factored into validateThresholdPair and
shared between the RTT and packet-loss rules.

Add unit tests covering address resolution, threshold validation, and
each rule's evaluation paths.
2026-04-26 18:05:47 +07:00
706fc2a4c1 checker: split monolithic rule into per-concern rules 2026-04-26 10:19:18 +07:00
9972ef512f checker: report rules with no targets as StatusUnknown
Skipped tests that are not problematic should be UNKNOWN rather than
INFO; "no targets to ping" is a non-evaluation, not a finding.
2026-04-26 10:19:16 +07:00
394d7e8e4c Run container as non-root user
Add USER 65534:65534 to the scratch runtime image so the checker
process does not run as root.
2026-04-26 10:19:14 +07:00
b1ebac2198 Migrate to checker-sdk-go v1.3.0 with standalone build tag
The SDK split the HTTP server scaffolding into the new
checker-sdk-go/checker/server subpackage. Update main.go to import
server and call server.New, and isolate the interactive form code
behind the standalone build tag so plugin/builtin builds skip
net/http entirely.
2026-04-26 10:19:13 +07:00
a74c8d83aa Add interactive form/report v0.1.0 2026-04-23 16:46:28 +07:00
73f5782ee3 Change Evaluate signature 2026-04-23 16:46:28 +07:00
48785e2896 checker: adopt unified ReportContext reporter signature
Follow the checker-sdk-go interface consolidation: reporter methods
now take sdk.ReportContext and read the payload via ctx.Data() instead
of the raw json.RawMessage parameter. Backed by the same underlying
logic.
2026-04-23 16:46:20 +07:00
b147fa2f31 Handle empty targets case in Evaluate with StatusUnknown 2026-04-16 04:44:03 +07:00
a2ebf17774 Initial commit 2026-04-08 02:46:26 +07:00