Delay systemd notify ready until first successful healthcheck
This commit is contained in:
parent
369c2227a0
commit
8ade1a1bb1
@ -32,6 +32,7 @@ jwt-encoding: HS256
|
|||||||
maximum-content-length: 52428800
|
maximum-content-length: 52428800
|
||||||
health-check-interval: "_env:HEALTHCHECK_INTERVAL:60"
|
health-check-interval: "_env:HEALTHCHECK_INTERVAL:60"
|
||||||
health-check-http: "_env:HEALTHCHECK_HTTP:true"
|
health-check-http: "_env:HEALTHCHECK_HTTP:true"
|
||||||
|
health-check-delay-notify: "_env:HEALTHCHECK_DELAY_NOTIFY:true"
|
||||||
|
|
||||||
log-settings:
|
log-settings:
|
||||||
detailed: "_env:DETAILED_LOGGING:false"
|
detailed: "_env:DETAILED_LOGGING:false"
|
||||||
|
|||||||
@ -64,7 +64,7 @@ import qualified Yesod.Core.Types as Yesod (Logger(..))
|
|||||||
|
|
||||||
import qualified Data.HashMap.Strict as HashMap
|
import qualified Data.HashMap.Strict as HashMap
|
||||||
|
|
||||||
import Control.Lens
|
import Utils.Lens
|
||||||
|
|
||||||
import Data.Proxy
|
import Data.Proxy
|
||||||
|
|
||||||
@ -315,8 +315,16 @@ makeLogWare app = do
|
|||||||
warpSettings :: UniWorX -> Settings
|
warpSettings :: UniWorX -> Settings
|
||||||
warpSettings foundation = defaultSettings
|
warpSettings foundation = defaultSettings
|
||||||
& setBeforeMainLoop (runAppLoggingT foundation $ do
|
& setBeforeMainLoop (runAppLoggingT foundation $ do
|
||||||
$logInfoS "setup" "Ready"
|
let notifyReady = do
|
||||||
void $ liftIO Systemd.notifyReady
|
$logInfoS "setup" "Ready"
|
||||||
|
void $ liftIO Systemd.notifyReady
|
||||||
|
if
|
||||||
|
| foundation ^. _appHealthCheckDelayNotify
|
||||||
|
-> void . fork $ do
|
||||||
|
atomically $ readTVar (foundation ^. _appHealthReport) >>= guard . maybe False ((== HealthSuccess) . classifyHealthReport . snd)
|
||||||
|
notifyReady
|
||||||
|
| otherwise
|
||||||
|
-> notifyReady
|
||||||
)
|
)
|
||||||
& setHost (foundation ^. _appHost)
|
& setHost (foundation ^. _appHost)
|
||||||
& setPort (foundation ^. _appPort)
|
& setPort (foundation ^. _appPort)
|
||||||
|
|||||||
@ -944,7 +944,7 @@ deriveJSON defaultOptions
|
|||||||
, omitNothingFields = True
|
, omitNothingFields = True
|
||||||
} ''HealthReport
|
} ''HealthReport
|
||||||
|
|
||||||
data HealthStatus = HealthFailure | HealthWarning | HealthSuccess
|
data HealthStatus = HealthFailure | HealthSuccess
|
||||||
deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic, Typeable)
|
deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic, Typeable)
|
||||||
|
|
||||||
instance Universe HealthStatus
|
instance Universe HealthStatus
|
||||||
|
|||||||
@ -48,9 +48,6 @@ import qualified Ldap.Client as Ldap
|
|||||||
import Utils hiding (MessageStatus(..))
|
import Utils hiding (MessageStatus(..))
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
|
|
||||||
import Data.Maybe (fromJust)
|
|
||||||
import qualified Data.Char as Char
|
|
||||||
|
|
||||||
import qualified Network.HaskellNet.Auth as HaskellNet (UserName, Password, AuthType(..))
|
import qualified Network.HaskellNet.Auth as HaskellNet (UserName, Password, AuthType(..))
|
||||||
import qualified Network.Socket as HaskellNet (PortNumber(..), HostName)
|
import qualified Network.Socket as HaskellNet (PortNumber(..), HostName)
|
||||||
import qualified Network
|
import qualified Network
|
||||||
@ -111,8 +108,10 @@ data AppSettings = AppSettings
|
|||||||
, appMaximumContentLength :: Maybe Word64
|
, appMaximumContentLength :: Maybe Word64
|
||||||
, appJwtExpiration :: Maybe NominalDiffTime
|
, appJwtExpiration :: Maybe NominalDiffTime
|
||||||
, appJwtEncoding :: JwtEncoding
|
, appJwtEncoding :: JwtEncoding
|
||||||
|
|
||||||
, appHealthCheckInterval :: NominalDiffTime
|
, appHealthCheckInterval :: NominalDiffTime
|
||||||
, appHealthCheckHTTP :: Bool
|
, appHealthCheckHTTP :: Bool
|
||||||
|
, appHealthCheckDelayNotify :: Bool
|
||||||
|
|
||||||
, appInitialLogSettings :: LogSettings
|
, appInitialLogSettings :: LogSettings
|
||||||
|
|
||||||
@ -280,7 +279,7 @@ deriveFromJSON
|
|||||||
|
|
||||||
deriveJSON
|
deriveJSON
|
||||||
defaultOptions
|
defaultOptions
|
||||||
{ constructorTagModifier = over (ix 1) Char.toLower . fromJust . stripPrefix "Level"
|
{ constructorTagModifier = camelToPathPiece' 1
|
||||||
, sumEncoding = UntaggedValue
|
, sumEncoding = UntaggedValue
|
||||||
}
|
}
|
||||||
''LogLevel
|
''LogLevel
|
||||||
@ -382,6 +381,7 @@ instance FromJSON AppSettings where
|
|||||||
|
|
||||||
appHealthCheckInterval <- o .: "health-check-interval"
|
appHealthCheckInterval <- o .: "health-check-interval"
|
||||||
appHealthCheckHTTP <- o .: "health-check-http"
|
appHealthCheckHTTP <- o .: "health-check-http"
|
||||||
|
appHealthCheckDelayNotify <- o .: "health-check-delay-notify"
|
||||||
|
|
||||||
appSessionTimeout <- o .: "session-timeout"
|
appSessionTimeout <- o .: "session-timeout"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user