fix: ensure HTTP failures are properly reported and ingested (#2458) master
* fix: ensure HTTP failures are properly reported and ingested When HTTP requests fail (connection refused, DNS failures, etc.), the checker now returns a Response with error details instead of returning a Go error. This prevents the probe from stopping status reporting when services go down. Previously, returning 'Response{}, err' would cause the task to fail and stop scheduling. Now all failures are properly ingested and displayed in the dashboard. * fix: address HTTP failure reporting violations Fixed three critical issues with HTTP failure reporting: 1. Added Response.Error check to assertion evaluator to prevent false positives where transport failures could pass assertions and be marked as successful. 2. Propagated error messages to event data (Message field) so diagnostic information (connection refused, DNS failures, etc.) reaches the dashboard. 3. Updated all tests to expect nil Go error with Response.Error populated instead of expecting Go errors for transport failures. All tests now pass with the new error handling contract. * fix: handle Response.Error in ping handler for proper retry behavior The ping.go handler (PingRegionHandler) is the third call site to checker.Http and wasn't updated for the new error contract. Previously, transport failures returned a Go error, triggering retries via backoff.Retry. Now checker.Http returns nil with r.Error populated, so without this check, transport failures skip retries and fall through to ingest incomplete data to Tinybird (Status: 0, no failure indication). This fix checks r.Error after the Http call and returns an error to preserve the original retry behavior and prevent incomplete events. * fix: remove early return in ping handler to ensure transport failures are ingested The previous fix added an early return on r.Error which prevented transport failure data from being ingested to Tinybird, defeating the PR's goal of ensuring all failures are properly reported. Now transport failures (connection refused, DNS failures, timeouts) are ingested with their latency, timing, and error data, matching the checker.go pattern where errors are included in the ingested data.