aws-xray-client-persistent: A client for AWS X-Ray integration with Persistent.

[ library, mit, unclassified ] [ Propose Tags ]

Works with `aws-xray-client` to enable X-Ray tracing with Persistent.


[Skip to Readme]

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.0.4, 0.1.0.5
Change log CHANGELOG.md
Dependencies aws-xray-client (>=0.1.0.2), base (>=4.11.1.0 && <5), conduit (>=1.3.1), containers (>=0.5.11.0), lens (>=4.16.1), persistent (>=2.8.2), random (>=1.1), text (>=1.2.3.1), time (>=1.8.0.2) [details]
License MIT
Copyright 2021 Renaissance Learning Inc
Author Freckle R&D
Maintainer engineering@freckle.com
Home page https://github.com/freckle/aws-xray-client#readme
Bug tracker https://github.com/freckle/aws-xray-client/issues
Source repo head: git clone https://github.com/freckle/aws-xray-client
Uploaded by PatrickBrisbin at 2022-04-06T15:45:30Z
Distributions LTSHaskell:0.1.0.5, NixOS:0.1.0.5, Stackage:0.1.0.5
Downloads 499 total (20 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2022-04-06 [all 1 reports]

Readme for aws-xray-client-persistent-0.1.0.5

[back to package description]

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