module Yam.Server( actuatorEndpoint , ActuatorEndpoint ) where import Salak import Servant import Yam.App import Yam.Logger import Yam.Prelude import Yam.Server.Health import Yam.Server.Refresh import Yam.Swagger data ActuatorConfig = ActuatorConfig { enabled :: Bool , refresh :: Bool , health :: Bool } instance FromProp ActuatorConfig where fromProp = ActuatorConfig <$> "enabled" .?= False <*> "refresh.enabled" .?= True <*> "health.enabled" .?= True type ActuatorEndpoint = SwaggerTag "actuator" "Actuator API" :> "actuator" :> ( RefreshEndpoint :<|> HealthEndpoint ) endpoint :: HasLogger cxt => ActuatorConfig -> IO HealthResult -> IO ReloadResult -> ServerT ActuatorEndpoint (AppV cxt IO) endpoint ActuatorConfig{..} hr rr = refreshEndpoint rr refresh :<|> healthEndpoint hr health actuatorEndpoint :: HasLogger cxt => IO HealthResult -> RunSalak (Bool, ServerT ActuatorEndpoint (AppV cxt IO)) actuatorEndpoint hr = do ac@ActuatorConfig{..} <- require "actuator" (enabled,) <$> liftSalak (exec $ return . endpoint ac hr)