aws-xray-client-persistent

A client for AWS X-Ray integration with Persistent.

https://github.com/freckle/aws-xray-client#readme

Version on this page:0.1.0.0
LTS Haskell 23.25:0.1.0.5
Stackage Nightly 2025-06-18:0.1.0.5
Latest on Hackage:0.1.0.5

See all snapshots aws-xray-client-persistent appears in

MIT licensed by Freckle R&D
Maintained by [email protected]
This version can be pinned in stack with:aws-xray-client-persistent-0.1.0.0@sha256:38241924a2668d4b354f5be1ff2d46288fda0ef22dbcd1e2ba612d3965227d3a,1677

Module documentation for 0.1.0.0

aws-xray-client-persistent

A Haskell client for integrating AWS X-Ray with Persistent.

To use this, you may want choose to define a helper to annotate traces


-- ...

import Data.Pool
import Database.Persist.Sql
import Network.AWS.XRayClient.Persistent

-- ...

runSqlPoolXRay
  :: (backend ~ SqlBackend, MonadUnliftIO m)
  => Text
  -- ^ Subsegment name
  --
  -- The top-level subsegment will be named @\"<this> runSqlPool\"@ and the,
  -- with a lower-level subsegment named @\"<this> query\"@.
  --
  -> XRayVaultData -- ^ Vault data to trace with
  -> ReaderT backend m a
  -> Pool backend
  -> m a
runSqlPoolXRay name vaultData action pool =
  traceXRaySubsegment' vaultData (name <> " runSqlPool") id
    $ withRunInIO
    $ \run -> withResource pool $ \backend -> do
        let
          sendTrace = atomicallyAddVaultDataSubsegment vaultData
          stdGenIORef = xrayVaultDataStdGen vaultData
          subsegmentName = name <> " query"
        run . runSqlConn action =<< liftIO
          (xraySqlBackend sendTrace stdGenIORef subsegmentName backend)

Then you can use this in your runDB definition to trace DB calls

-- ...
instance YesodPersist App where
  type YesodPersistBackend App = SqlBackend
  runDB action = do
    pool <- getsYesod appPool
    mVaultData <- vaultDataFromRequest <$> waiRequest
      
    -- ...

    maybe runSqlPool (runSqlPoolXRay "runDB") mVaultData action' pool

Changes

Unreleased

None

v0.1.0.0

First tagged release.