diff --git a/CHANGELOG.md b/CHANGELOG.md index a0f86cecd..4498090c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. From versio ## Unreleased +### Fixed + +- Fix admin server not logging cause of failure by @taimoorzaeem in #5012 + ## [14.13] - 2026-06-04 ### Fixed diff --git a/src/PostgREST/Admin.hs b/src/PostgREST/Admin.hs index 99733a699..429983e38 100644 --- a/src/PostgREST/Admin.hs +++ b/src/PostgREST/Admin.hs @@ -11,7 +11,8 @@ import Control.Monad.Extra (whenJust) import Network.Socket hiding (addrFamily) import Network.Socket.ByteString -import PostgREST.AppState (AppState) +import PostgREST.AppState (AppState, getConfig) +import PostgREST.Config (AppConfig (..)) import PostgREST.MediaType (MediaType (..), toContentType) import PostgREST.Metrics (metricsToText) import PostgREST.Network (resolveSocketToAddress) @@ -24,13 +25,22 @@ import Protolude runAdmin :: AppState -> Maybe NS.Socket -> NS.Socket -> Warp.Settings -> IO () runAdmin appState maybeAdminSocket socketREST settings = do + conf <- getConfig appState whenJust maybeAdminSocket $ \adminSocket -> do address <- resolveSocketToAddress adminSocket - observer $ AdminStartObs address - void . forkIO $ Warp.runSettingsSocket settings adminSocket adminApp + void . forkIO $ handle (onError adminSocket) $ + Warp.runSettingsSocket (adminServerSettings conf address) adminSocket adminApp where adminApp = admin appState socketREST observer = AppState.getObserver appState + adminServerSettings config addr = + settings + & Warp.setBeforeMainLoop (observer $ AdminStartObs addr) + & maybe identity Warp.setPort (configAdminServerPort config) + + onError adminSock ex = do + observer $ AdminServerCrashedObs ex + NS.close adminSock -- we close the socket so request doesn't hang -- | PostgREST admin application admin :: AppState.AppState -> NS.Socket -> Wai.Application diff --git a/src/PostgREST/Logger.hs b/src/PostgREST/Logger.hs index 39d04e9a0..4c6f0aafc 100644 --- a/src/PostgREST/Logger.hs +++ b/src/PostgREST/Logger.hs @@ -160,6 +160,8 @@ observationMessage :: Observation -> Text observationMessage = \case AdminStartObs address -> "Admin server listening on " <> address + AdminServerCrashedObs ex -> + "FAILURE: Admin server crashed unexpectedly: " <> (showOnSingleLine '\t' . show) ex AppStartObs ver -> "Starting PostgREST " <> T.decodeUtf8 ver <> "..." AppServerAddressObs address -> diff --git a/src/PostgREST/Observation.hs b/src/PostgREST/Observation.hs index 1bf6c0e61..e04e8f065 100644 --- a/src/PostgREST/Observation.hs +++ b/src/PostgREST/Observation.hs @@ -23,6 +23,7 @@ import Protolude hiding (toList) data Observation = AdminStartObs Text + | AdminServerCrashedObs SomeException | AppStartObs ByteString | AppServerAddressObs Text | ExitUnsupportedPgVersion PgVersion PgVersion