Healthcheck moved to HTTP control server
This commit is contained in:
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 (
|
||||
"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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user