From bbb1b8497ff12749e8d11084616c646e8f9950df Mon Sep 17 00:00:00 2001 From: yusing Date: Thu, 6 Nov 2025 23:37:34 +0800 Subject: [PATCH] fix(health_monitor): treat some errors as unhealth instead of actual error in RawHealthMonitor --- internal/watcher/health/monitor/raw.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/internal/watcher/health/monitor/raw.go b/internal/watcher/health/monitor/raw.go index c7f97c9b..7d1bc3df 100644 --- a/internal/watcher/health/monitor/raw.go +++ b/internal/watcher/health/monitor/raw.go @@ -3,6 +3,7 @@ package monitor import ( "net" "net/url" + "strings" "time" "github.com/yusing/godoxy/internal/types" @@ -33,6 +34,16 @@ func (mon *RawHealthMonitor) CheckHealth() (types.HealthCheckResult, error) { start := time.Now() conn, err := mon.dialer.DialContext(ctx, url.Scheme, url.Host) if err != nil { + errMsg := err.Error() + if strings.Contains(errMsg, "connection refused") || + strings.Contains(errMsg, "connection reset by peer") || + strings.Contains(errMsg, "connection closed") { + return types.HealthCheckResult{ + Latency: time.Since(start), + Healthy: false, + Detail: err.Error(), + }, nil + } return types.HealthCheckResult{}, err } defer conn.Close()