fix(healthcheck): Support ipv6 healthchecks

Currently we are doing fmt.sprintf on hostname and port which will not properly handle ipv6 addresses, instead of changing pangolin to send bracketed address a simply net.join can do this for us since we dont need to parse a formatted string
This commit is contained in:
Laurence
2026-03-18 13:37:31 +00:00
parent de4353f2e6
commit 8fda35db4f

View File

@@ -5,7 +5,9 @@ import (
"crypto/tls" "crypto/tls"
"encoding/json" "encoding/json"
"fmt" "fmt"
"net"
"net/http" "net/http"
"strconv"
"strings" "strings"
"sync" "sync"
"time" "time"
@@ -365,11 +367,12 @@ func (m *Monitor) performHealthCheck(target *Target) {
target.LastCheck = time.Now() target.LastCheck = time.Now()
target.LastError = "" target.LastError = ""
// Build URL // Build URL (use net.JoinHostPort to properly handle IPv6 addresses with ports)
url := fmt.Sprintf("%s://%s", target.Config.Scheme, target.Config.Hostname) host := target.Config.Hostname
if target.Config.Port > 0 { if target.Config.Port > 0 {
url = fmt.Sprintf("%s:%d", url, target.Config.Port) host = net.JoinHostPort(target.Config.Hostname, strconv.Itoa(target.Config.Port))
} }
url := fmt.Sprintf("%s://%s", target.Config.Scheme, host)
if target.Config.Path != "" { if target.Config.Path != "" {
if !strings.HasPrefix(target.Config.Path, "/") { if !strings.HasPrefix(target.Config.Path, "/") {
url += "/" url += "/"