Healthcheck moved to HTTP control server

This commit is contained in:
Quentin McGaw
2020-08-31 01:57:45 +00:00
parent 7c102c0028
commit 9dcc00900e
3 changed files with 45 additions and 7 deletions

View File

@@ -3,12 +3,11 @@ package cli
import (
"flag"
"fmt"
"io/ioutil"
"net/http"
"strings"
"time"
"net"
"github.com/qdm12/gluetun/internal/constants"
"github.com/qdm12/gluetun/internal/params"
"github.com/qdm12/gluetun/internal/provider"
@@ -40,13 +39,20 @@ func ClientKey(args []string) error {
}
func HealthCheck() error {
ips, err := net.LookupIP("github.com")
client := &http.Client{Timeout: time.Second}
response, err := client.Get("http://localhost:8000/health")
if err != nil {
return fmt.Errorf("cannot resolve github.com (%s)", err)
} else if len(ips) == 0 {
return fmt.Errorf("resolved no IP addresses for github.com")
return err
}
return nil
defer response.Body.Close()
if response.StatusCode == http.StatusOK {
return nil
}
b, err := ioutil.ReadAll(response.Body)
if err != nil {
return err
}
return fmt.Errorf("HTTP status code %s with message: %s", response.Status, string(b))
}
func OpenvpnConfig() error {

27
internal/server/health.go Normal file
View File

@@ -0,0 +1,27 @@
package server
import (
"fmt"
"net/http"
)
func (s *server) handleHealth(w http.ResponseWriter) {
// TODO option to disable
// TODO use mullvad API if current provider is Mullvad
ips, err := s.lookupIP("github.com")
var errorMessage string
switch {
case err != nil:
errorMessage = fmt.Sprintf("cannot resolve github.com (%s)", err)
case len(ips) == 0:
errorMessage = "resolved no IP addresses for github.com"
default: // success
w.WriteHeader(http.StatusOK)
return
}
s.logger.Warn(errorMessage)
w.WriteHeader(http.StatusInternalServerError)
if _, err := w.Write([]byte(errorMessage)); err != nil {
s.logger.Warn(err)
}
}

View File

@@ -3,6 +3,7 @@ package server
import (
"context"
"fmt"
"net"
"net/http"
"sync"
"time"
@@ -22,6 +23,7 @@ type server struct {
restartUnbound func()
getOpenvpnSettings func() settings.OpenVPN
getPortForwarded func() uint16
lookupIP func(host string) ([]net.IP, error)
}
func New(address string, logger logging.Logger, restartOpenvpn, restartUnbound func(),
@@ -33,6 +35,7 @@ func New(address string, logger logging.Logger, restartOpenvpn, restartUnbound f
restartUnbound: restartUnbound,
getOpenvpnSettings: getOpenvpnSettings,
getPortForwarded: getPortForwarded,
lookupIP: net.LookupIP,
}
}
@@ -71,6 +74,8 @@ func (s *server) makeHandler() http.HandlerFunc {
s.handleGetPortForwarded(w)
case "/openvpn/settings":
s.handleGetOpenvpnSettings(w)
case "/health":
s.handleHealth(w)
default:
routeDoesNotExist(s.logger, w, r)
}