refactor: make observation messages pure (#3250)
removes the observation messages from the Logger
This commit is contained in:
@@ -1,29 +1,37 @@
|
||||
{-# LANGUAGE LambdaCase #-}
|
||||
{-|
|
||||
Module : PostgREST.Observation
|
||||
Description : Module for observability types
|
||||
-}
|
||||
module PostgREST.Observation
|
||||
( Observation(..)
|
||||
, observationMessage
|
||||
) where
|
||||
|
||||
import qualified Data.ByteString.Lazy as LBS
|
||||
import qualified Data.Text.Encoding as T
|
||||
import qualified Hasql.Pool as SQL
|
||||
import qualified Network.Socket as NS
|
||||
import PostgREST.SchemaCache (SchemaCache)
|
||||
import Numeric (showFFloat)
|
||||
import qualified PostgREST.Error as Error
|
||||
import PostgREST.SchemaCache (SchemaCache, showSummary)
|
||||
|
||||
import Protolude
|
||||
import Protolude.Partial (fromJust)
|
||||
|
||||
data Observation
|
||||
= AdminStartObs (Maybe Int)
|
||||
| AppStartObs ByteString
|
||||
| AppServerStartObs ByteString
|
||||
| AppServerPortObs NS.PortNumber
|
||||
| AppServerUnixObs FilePath
|
||||
| AppDBConnectAttemptObs
|
||||
| AppExitFatalObs Text
|
||||
| AppExitDBNoRecoveryObs
|
||||
| AppDBConnectedObs Text
|
||||
| AppSCacheFatalErrorObs SQL.UsageError Text
|
||||
| AppSCacheNormalErrorObs SQL.UsageError
|
||||
| AppSCacheLoadSuccessObs SchemaCache Double
|
||||
| DBConnectAttemptObs
|
||||
| ExitFatalObs Text
|
||||
| ExitDBNoRecoveryObs
|
||||
| DBConnectedObs Text
|
||||
| SchemaCacheFatalErrorObs SQL.UsageError Text
|
||||
| SchemaCacheNormalErrorObs SQL.UsageError
|
||||
| SchemaCacheQueriedObs Double
|
||||
| SchemaCacheLoadedObs SchemaCache
|
||||
| ConnectionRetryObs Int
|
||||
| ConnectionPgVersionErrorObs SQL.UsageError
|
||||
| DBListenerStart Text
|
||||
@@ -37,3 +45,61 @@ data Observation
|
||||
| QueryRoleSettingsErrorObs SQL.UsageError
|
||||
| QueryErrorCodeHighObs SQL.UsageError
|
||||
| PoolAcqTimeoutObs SQL.UsageError
|
||||
|
||||
observationMessage :: Observation -> Text
|
||||
observationMessage = \case
|
||||
AdminStartObs port ->
|
||||
"Admin server listening on port " <> show (fromIntegral (fromJust port) :: Integer)
|
||||
AppServerStartObs ver ->
|
||||
"Starting PostgREST " <> T.decodeUtf8 ver <> "..."
|
||||
AppServerPortObs port ->
|
||||
"Listening on port " <> show port
|
||||
AppServerUnixObs sock ->
|
||||
"Listening on unix socket " <> show sock
|
||||
DBConnectAttemptObs ->
|
||||
"Attempting to connect to the database..."
|
||||
ExitFatalObs reason ->
|
||||
"Fatal error encountered. " <> reason
|
||||
ExitDBNoRecoveryObs ->
|
||||
"Automatic recovery disabled, exiting."
|
||||
DBConnectedObs ver ->
|
||||
"Successfully connected to " <> ver
|
||||
SchemaCacheFatalErrorObs usageErr hint ->
|
||||
"A fatal error ocurred when loading the schema cache. " <> hint <> ". " <> jsonMessage usageErr
|
||||
SchemaCacheNormalErrorObs usageErr ->
|
||||
"An error ocurred when loading the schema cache. " <> jsonMessage usageErr
|
||||
SchemaCacheQueriedObs resultTime ->
|
||||
"Schema cache queried in " <> showMillis resultTime <> " milliseconds"
|
||||
SchemaCacheLoadedObs sCache ->
|
||||
"Schema cache loaded " <> showSummary sCache
|
||||
ConnectionRetryObs delay ->
|
||||
"Attempting to reconnect to the database in " <> (show delay::Text) <> " seconds..."
|
||||
ConnectionPgVersionErrorObs usageErr ->
|
||||
jsonMessage usageErr
|
||||
DBListenerStart channel -> do
|
||||
"Listening for notifications on the " <> channel <> " channel"
|
||||
DBListenerFailNoRecoverObs ->
|
||||
"Automatic recovery disabled, exiting."
|
||||
DBListenerFailRecoverObs channel ->
|
||||
"Retrying listening for notifications on the " <> channel <> " channel.."
|
||||
ConfigReadErrorObs ->
|
||||
"An error ocurred when trying to query database settings for the config parameters"
|
||||
ConfigReadErrorFatalObs usageErr hint ->
|
||||
hint <> ". " <> jsonMessage usageErr
|
||||
ConfigReadErrorNotFatalObs usageErr ->
|
||||
jsonMessage usageErr
|
||||
QueryRoleSettingsErrorObs usageErr ->
|
||||
"An error ocurred when trying to query the role settings. " <> jsonMessage usageErr
|
||||
QueryErrorCodeHighObs usageErr ->
|
||||
jsonMessage usageErr
|
||||
ConfigInvalidObs err ->
|
||||
"Failed reloading config: " <> err
|
||||
ConfigSucceededObs ->
|
||||
"Config reloaded"
|
||||
PoolAcqTimeoutObs usageErr ->
|
||||
jsonMessage usageErr
|
||||
where
|
||||
showMillis :: Double -> Text
|
||||
showMillis x = toS $ showFFloat (Just 1) (x * 1000) ""
|
||||
|
||||
jsonMessage err = T.decodeUtf8 . LBS.toStrict . Error.errorPayload $ Error.PgError False err
|
||||
|
||||
Reference in New Issue
Block a user