fix(health_monitor): treat some errors as unhealth instead of actual error in RawHealthMonitor

This commit is contained in:
yusing
2025-11-06 23:37:34 +08:00
parent d57d76dc65
commit bbb1b8497f

View File

@@ -3,6 +3,7 @@ package monitor
import ( import (
"net" "net"
"net/url" "net/url"
"strings"
"time" "time"
"github.com/yusing/godoxy/internal/types" "github.com/yusing/godoxy/internal/types"
@@ -33,6 +34,16 @@ func (mon *RawHealthMonitor) CheckHealth() (types.HealthCheckResult, error) {
start := time.Now() start := time.Now()
conn, err := mon.dialer.DialContext(ctx, url.Scheme, url.Host) conn, err := mon.dialer.DialContext(ctx, url.Scheme, url.Host)
if err != nil { 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 return types.HealthCheckResult{}, err
} }
defer conn.Close() defer conn.Close()