[bugfix/issue-172] fixing health check

This commit is contained in:
Ophélie Volga
2020-09-17 19:00:32 +02:00
parent daf028ab2b
commit 3fd56e8c36
2 changed files with 25 additions and 9 deletions

View File

@@ -8,6 +8,7 @@ import (
"github.com/labstack/echo/v4"
"github.com/thecodingmachine/gotenberg/internal/app/xhttp/pkg/context"
"github.com/thecodingmachine/gotenberg/internal/app/xhttp/pkg/resource"
"github.com/thecodingmachine/gotenberg/internal/pkg/chrome"
"github.com/thecodingmachine/gotenberg/internal/pkg/conf"
"github.com/thecodingmachine/gotenberg/internal/pkg/printer"
"github.com/thecodingmachine/gotenberg/internal/pkg/xerror"
@@ -69,7 +70,17 @@ func pingHandler(c echo.Context) error {
const op string = "xhttp.pingHandler"
ctx := context.MustCastFromEchoContext(c)
logger := ctx.XLogger()
config := ctx.Config()
logger.DebugOp(op, "handling ping request...")
if !config.DisableGoogleChrome() {
_, err := chrome.IsViable(logger)
if err != nil {
return xerror.New(op, err)
}
}
return nil
}

View File

@@ -31,7 +31,8 @@ func Start(logger xlog.Logger, ignoreCertificateErrors bool) error {
}
// if the process failed to start correctly,
// we have to restart it.
if !isViable(logger) {
isViable, _ := IsViable(logger)
if !isViable {
return restart(logger, cmd.Process, ignoreCertificateErrors)
}
return nil
@@ -117,7 +118,8 @@ func restart(logger xlog.Logger, proc *os.Process, ignoreCertificateErrors bool)
}
// if the process failed to restart correctly,
// we have to restart it again.
if !isViable(logger) {
isViable, _ := IsViable(logger)
if !isViable {
return restart(logger, cmd.Process, ignoreCertificateErrors)
}
return nil
@@ -128,12 +130,13 @@ func restart(logger xlog.Logger, proc *os.Process, ignoreCertificateErrors bool)
return nil
}
func isViable(logger xlog.Logger) bool {
// IsViable checks if Google Chrome is healthy.
func IsViable(logger xlog.Logger) (bool, error) {
const (
op string = "chrome.isViable"
op string = "chrome.IsViable"
maxViabilityTests int = 20
)
viable := func() bool {
viable := func() (bool, error) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
endpoint := "http://localhost:9222"
@@ -149,21 +152,23 @@ func isViable(logger xlog.Logger) bool {
"Google Chrome headless is not viable as endpoint returned '%v'",
err.Error(),
)
return false
return false, err
}
logger.DebugOpf(
op,
"Google Chrome headless is viable as endpoint returned '%v'",
v,
)
return true
return true, nil
}
result := false
var err error
for i := 0; i < maxViabilityTests && !result; i++ {
warmup(logger)
result = viable()
result, err = viable()
}
return result
return result, err
}
func warmup(logger xlog.Logger) {