Health check for SSL/TLS services (#177)

* protocol: starttls: add timeout support

Signed-off-by: Charles Decoux <charles@phowork.fr>

* protocol: add ssl support

Signed-off-by: Charles Decoux <charles@phowork.fr>
This commit is contained in:
Carlotronics
2021-09-30 22:15:17 +02:00
committed by GitHub
parent 289d834587
commit 30cb7b6ec8
4 changed files with 110 additions and 4 deletions

View File

@ -217,7 +217,8 @@ func (service *Service) call(result *Result) {
isServiceTCP := strings.HasPrefix(service.URL, "tcp://")
isServiceICMP := strings.HasPrefix(service.URL, "icmp://")
isServiceStartTLS := strings.HasPrefix(service.URL, "starttls://")
isServiceHTTP := !isServiceDNS && !isServiceTCP && !isServiceICMP && !isServiceStartTLS
isServiceTLS := strings.HasPrefix(service.URL, "tls://")
isServiceHTTP := !isServiceDNS && !isServiceTCP && !isServiceICMP && !isServiceStartTLS && !isServiceTLS
if isServiceHTTP {
request = service.buildHTTPRequest()
}
@ -225,8 +226,18 @@ func (service *Service) call(result *Result) {
if isServiceDNS {
service.DNS.query(service.URL, result)
result.Duration = time.Since(startTime)
} else if isServiceStartTLS {
result.Connected, certificate, err = client.CanPerformStartTLS(strings.TrimPrefix(service.URL, "starttls://"), service.ClientConfig)
} else if isServiceStartTLS || isServiceTLS {
var clientFunction func(address string, config *client.Config) (connected bool, certificate *x509.Certificate, err error)
var addressPrefix string
if isServiceStartTLS {
clientFunction = client.CanPerformStartTLS
addressPrefix = "starttls://"
} else if isServiceTLS {
clientFunction = client.CanPerformTLS
addressPrefix = "tls://"
}
result.Connected, certificate, err = clientFunction(strings.TrimPrefix(service.URL, addressPrefix), service.ClientConfig)
if err != nil {
result.AddError(err.Error())
return