packages feed

hs-opentelemetry-instrumentation-conduit-0.0.1.1: src/OpenTelemetry/Instrumentation/Conduit.hs

module OpenTelemetry.Instrumentation.Conduit where
import Conduit
import OpenTelemetry.Context.ThreadLocal
import OpenTelemetry.Trace.Core hiding (getTracer)
import Data.Text (Text)
import Control.Exception (throwIO, SomeException)

inSpan
  :: (MonadResource m, MonadUnliftIO m) => Tracer
  -> Text
  -> SpanArguments
  -> (Span -> ConduitM i o m a)
  -> ConduitM i o m a
inSpan t n args f = do
  ctx <- lift getContext
  bracketP
    (createSpan t ctx n args)
    (`endSpan` Nothing) $ \span_ -> do
      catchC (f span_) $ \e -> do
        liftIO $ do
          recordException span_ [] Nothing (e :: SomeException)
          throwIO e