{-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE DefaultSignatures #-} ----------------------------------------------------------------------------- -- | -- 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 Data.Text (Text) import OpenTelemetry.Trace.Core ( Tracer , Span , SpanArguments(..) , inSpan'' ) import Control.Monad.IO.Unlift import GHC.Stack -- | 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