added domain support and more verbose logging and better tls determination
This commit is contained in:
26
main.go
26
main.go
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"crypto/tls"
|
||||||
"flag"
|
"flag"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
@@ -15,6 +16,7 @@ type Config struct {
|
|||||||
StaticIP string
|
StaticIP string
|
||||||
Port string
|
Port string
|
||||||
UseHTTPS bool
|
UseHTTPS bool
|
||||||
|
Domain string
|
||||||
NormalInterval time.Duration
|
NormalInterval time.Duration
|
||||||
FailInterval time.Duration
|
FailInterval time.Duration
|
||||||
Timeout time.Duration
|
Timeout time.Duration
|
||||||
@@ -105,6 +107,7 @@ func parseFlags() *Config {
|
|||||||
flag.StringVar(&cfg.StaticIP, "ip", "", "Static IP to check")
|
flag.StringVar(&cfg.StaticIP, "ip", "", "Static IP to check")
|
||||||
flag.StringVar(&cfg.Port, "port", "80", "Port to check")
|
flag.StringVar(&cfg.Port, "port", "80", "Port to check")
|
||||||
flag.BoolVar(&cfg.UseHTTPS, "https", false, "Use HTTPS")
|
flag.BoolVar(&cfg.UseHTTPS, "https", false, "Use HTTPS")
|
||||||
|
flag.StringVar(&cfg.Domain, "domain", "", "Domain for HTTPS SNI/Host")
|
||||||
flag.DurationVar(&cfg.NormalInterval, "interval", 120*time.Second, "Normal check interval")
|
flag.DurationVar(&cfg.NormalInterval, "interval", 120*time.Second, "Normal check interval")
|
||||||
flag.DurationVar(&cfg.FailInterval, "fail-interval", 10*time.Second, "Interval during failure detection")
|
flag.DurationVar(&cfg.FailInterval, "fail-interval", 10*time.Second, "Interval during failure detection")
|
||||||
flag.DurationVar(&cfg.Timeout, "timeout", 5*time.Second, "HTTP timeout")
|
flag.DurationVar(&cfg.Timeout, "timeout", 5*time.Second, "HTTP timeout")
|
||||||
@@ -139,18 +142,37 @@ func checkHealth(cfg *Config) bool {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cfg.UseHTTPS && cfg.Domain != "" {
|
||||||
|
transport.TLSClientConfig = &tls.Config{
|
||||||
|
ServerName: cfg.Domain,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
client := &http.Client{
|
client := &http.Client{
|
||||||
Transport: transport,
|
Transport: transport,
|
||||||
Timeout: cfg.Timeout,
|
Timeout: cfg.Timeout,
|
||||||
}
|
}
|
||||||
|
|
||||||
req, _ := http.NewRequestWithContext(ctx, "GET", scheme+"://"+cfg.StaticIP+cfg.HealthURL, nil)
|
host := cfg.StaticIP
|
||||||
|
if cfg.UseHTTPS && cfg.Domain != "" {
|
||||||
|
host = cfg.Domain
|
||||||
|
}
|
||||||
|
|
||||||
|
req, _ := http.NewRequestWithContext(ctx, "GET", scheme+"://"+host+cfg.HealthURL, nil)
|
||||||
|
|
||||||
|
if cfg.UseHTTPS && cfg.Domain != "" {
|
||||||
|
req.Host = cfg.Domain
|
||||||
|
}
|
||||||
|
|
||||||
resp, err := client.Do(req)
|
resp, err := client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer func() {
|
||||||
|
if err := resp.Body.Close(); err != nil && cfg.Verbose {
|
||||||
|
log.Println("body close:", err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
return resp.StatusCode == 200
|
return resp.StatusCode == 200
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user