hs-opentelemetry-api-0.0.3.7: src/OpenTelemetry/Trace/Monad.hs
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
{- |
Module : OpenTelemetry.Trace.Monad
Copyright : (c) Ian Duncan, 2021
License : BSD-3
Description : Higher-level tracing API
Maintainer : Ian Duncan
Stability : experimental
Portability : non-portable (GHC extensions)
The recommended tracing interface for application developers
See OpenTelemetry.Trace for an interface that's
more lower-level, but more flexible.
-}
module OpenTelemetry.Trace.Monad (
inSpan,
inSpan',
OpenTelemetry.Trace.Monad.inSpan'',
-- Interacting with the span in the current context
-- , getSpan
-- , updateName
-- , addAttribute
-- , addAttributes
-- , getAttributes
-- , addEvent
-- , NewEvent (..)
-- Fundamental monad instances
MonadTracer (..),
) where
import Control.Monad.IO.Unlift
import Control.Monad.Identity (IdentityT)
import Control.Monad.Reader (ReaderT)
import Control.Monad.Trans (MonadTrans (lift))
import Data.Text (Text)
import GHC.Stack
import OpenTelemetry.Trace.Core (
Span,
SpanArguments (..),
Tracer,
inSpan'',
)
-- | This is generally scoped by Monad stack to do different things
class Monad m => MonadTracer m where
getTracer :: m Tracer
inSpan ::
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
Text ->
SpanArguments ->
m a ->
m a
inSpan n args m = OpenTelemetry.Trace.Monad.inSpan'' callStack n args (const m)
inSpan' ::
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
Text ->
SpanArguments ->
(Span -> m a) ->
m a
inSpan' = OpenTelemetry.Trace.Monad.inSpan'' callStack
inSpan'' ::
(MonadUnliftIO m, MonadTracer m, HasCallStack) =>
CallStack ->
Text ->
SpanArguments ->
(Span -> m a) ->
m a
inSpan'' cs n args f = do
t <- getTracer
OpenTelemetry.Trace.Core.inSpan'' t cs n args f
instance MonadTracer m => MonadTracer (IdentityT m) where
getTracer = lift getTracer
instance {-# OVERLAPPABLE #-} MonadTracer m => MonadTracer (ReaderT r m) where
getTracer = lift getTracer