Healthcheck moved to HTTP control server
This commit is contained in:
@@ -3,12 +3,11 @@ package cli
|
|||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"net"
|
|
||||||
|
|
||||||
"github.com/qdm12/gluetun/internal/constants"
|
"github.com/qdm12/gluetun/internal/constants"
|
||||||
"github.com/qdm12/gluetun/internal/params"
|
"github.com/qdm12/gluetun/internal/params"
|
||||||
"github.com/qdm12/gluetun/internal/provider"
|
"github.com/qdm12/gluetun/internal/provider"
|
||||||
@@ -40,13 +39,20 @@ func ClientKey(args []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func HealthCheck() 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 {
|
if err != nil {
|
||||||
return fmt.Errorf("cannot resolve github.com (%s)", err)
|
return err
|
||||||
} else if len(ips) == 0 {
|
|
||||||
return fmt.Errorf("resolved no IP addresses for github.com")
|
|
||||||
}
|
}
|
||||||
|
defer response.Body.Close()
|
||||||
|
if response.StatusCode == http.StatusOK {
|
||||||
return nil
|
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 {
|
func OpenvpnConfig() error {
|
||||||
|
|||||||
27
internal/server/health.go
Normal file
27
internal/server/health.go
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package server
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@@ -22,6 +23,7 @@ type server struct {
|
|||||||
restartUnbound func()
|
restartUnbound func()
|
||||||
getOpenvpnSettings func() settings.OpenVPN
|
getOpenvpnSettings func() settings.OpenVPN
|
||||||
getPortForwarded func() uint16
|
getPortForwarded func() uint16
|
||||||
|
lookupIP func(host string) ([]net.IP, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(address string, logger logging.Logger, restartOpenvpn, restartUnbound func(),
|
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,
|
restartUnbound: restartUnbound,
|
||||||
getOpenvpnSettings: getOpenvpnSettings,
|
getOpenvpnSettings: getOpenvpnSettings,
|
||||||
getPortForwarded: getPortForwarded,
|
getPortForwarded: getPortForwarded,
|
||||||
|
lookupIP: net.LookupIP,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,6 +74,8 @@ func (s *server) makeHandler() http.HandlerFunc {
|
|||||||
s.handleGetPortForwarded(w)
|
s.handleGetPortForwarded(w)
|
||||||
case "/openvpn/settings":
|
case "/openvpn/settings":
|
||||||
s.handleGetOpenvpnSettings(w)
|
s.handleGetOpenvpnSettings(w)
|
||||||
|
case "/health":
|
||||||
|
s.handleHealth(w)
|
||||||
default:
|
default:
|
||||||
routeDoesNotExist(s.logger, w, r)
|
routeDoesNotExist(s.logger, w, r)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user