From 6deddd038feb01386143aa0351aa9897d6003de2 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Thu, 4 Nov 2021 13:16:53 +0100 Subject: [PATCH] internal: start embedded outpost directly after backend is healthy instead of waiting Signed-off-by: Jens Langhammer --- authentik/lib/default.yml | 1 + authentik/root/settings.py | 27 ++++++++++++++------------- cmd/server/main.go | 10 +++++----- internal/gounicorn/gounicorn.go | 12 ++++++++---- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/authentik/lib/default.yml b/authentik/lib/default.yml index 0613f82c5..d1488b6aa 100644 --- a/authentik/lib/default.yml +++ b/authentik/lib/default.yml @@ -68,6 +68,7 @@ outposts: cookie_domain: null disable_update_check: false +disable_startup_analytics: false avatars: env://AUTHENTIK_AUTHENTIK__AVATARS?gravatar geoip: "./GeoLite2-City.mmdb" diff --git a/authentik/root/settings.py b/authentik/root/settings.py index 2966136c1..2b07dee85 100644 --- a/authentik/root/settings.py +++ b/authentik/root/settings.py @@ -437,19 +437,20 @@ if _ERROR_REPORTING: "Error reporting is enabled", env=CONFIG.y("error_reporting.environment", "customer"), ) -get_http_session().post( - "https://goauthentik.io/api/event", - json={ - "domain": "authentik", - "name": "pageview", - "url": f"http://localhost/{env}", - "referrer": f"{__version__} ({build_hash})", - }, - headers={ - "User-Agent": sha512(SECRET_KEY.encode("ascii")).hexdigest()[:16], - "Content-Type": "text/plain", - }, -) +if not CONFIG.y_bool("disable_startup_analytics", False): + get_http_session().post( + "https://goauthentik.io/api/event", + json={ + "domain": "authentik", + "name": "pageview", + "url": f"http://localhost/{env}", + "referrer": f"{__version__} ({build_hash})", + }, + headers={ + "User-Agent": sha512(SECRET_KEY.encode("ascii")).hexdigest()[:16], + "Content-Type": "text/plain", + }, + ) # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.1/howto/static-files/ diff --git a/cmd/server/main.go b/cmd/server/main.go index 1a83f391a..54d83d111 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -56,15 +56,17 @@ func main() { g := gounicorn.NewGoUnicorn() ws := web.NewWebServer(g) + g.HealthyCallback = func() { + if !config.G.Web.DisableEmbeddedOutpost { + go attemptProxyStart(ws, u) + } + } defer g.Kill() defer ws.Shutdown() go web.RunMetricsServer() for { go attemptStartBackend(g) ws.Start() - if !config.G.Web.DisableEmbeddedOutpost { - go attemptProxyStart(ws, u) - } <-ex running = false @@ -88,8 +90,6 @@ func attemptStartBackend(g *gounicorn.GoUnicorn) { func attemptProxyStart(ws *web.WebServer, u *url.URL) { maxTries := 100 attempt := 0 - // Sleep to wait for the app server to start - time.Sleep(30 * time.Second) for { log.WithField("logger", "authentik").Debug("attempting to init outpost") ac := ak.NewAPIController(*u, config.G.SecretKey) diff --git a/internal/gounicorn/gounicorn.go b/internal/gounicorn/gounicorn.go index 3485ead23..ebe3890ae 100644 --- a/internal/gounicorn/gounicorn.go +++ b/internal/gounicorn/gounicorn.go @@ -11,6 +11,8 @@ import ( ) type GoUnicorn struct { + HealthyCallback func() + log *log.Entry p *exec.Cmd started bool @@ -21,10 +23,11 @@ type GoUnicorn struct { func NewGoUnicorn() *GoUnicorn { logger := log.WithField("logger", "authentik.router.unicorn") g := &GoUnicorn{ - log: logger, - started: false, - killed: false, - alive: false, + log: logger, + started: false, + killed: false, + alive: false, + HealthyCallback: func() {}, } g.initCmd() return g @@ -76,6 +79,7 @@ func (g *GoUnicorn) healthcheck() { for range time.Tick(time.Second) { if check() { g.log.Info("backend is alive, backing off with healthchecks") + g.HealthyCallback() break } g.log.Debug("backend not alive yet")