packages feed

hs-opentelemetry-awsxray-0.1.0.0: library/OpenTelemetry/Trace/Setup.hs

-- | Initialization of a 'TracerProvider' with modified 'TracerProviderOptions'
module OpenTelemetry.Trace.Setup
  ( withTracerProvider
  ) where

import Prelude

import Control.Monad.IO.Class (MonadIO(..))
import Control.Monad.IO.Unlift (MonadUnliftIO(..))
import OpenTelemetry.Trace
  ( TracerProvider
  , TracerProviderOptions
  , createTracerProvider
  , getTracerProviderInitializationOptions
  , setGlobalTracerProvider
  )
import qualified OpenTelemetry.Trace as Trace
import UnliftIO.Exception (bracket)

withTracerProvider
  :: MonadUnliftIO m
  => (TracerProviderOptions -> TracerProviderOptions)
  -> (TracerProvider -> m a)
  -> m a
withTracerProvider setup =
  bracket (initializeGlobalTracerProvider setup) shutdownTracerProvider

initializeGlobalTracerProvider
  :: MonadIO m
  => (TracerProviderOptions -> TracerProviderOptions)
  -> m TracerProvider
initializeGlobalTracerProvider setup = liftIO $ do
  t <- initializeTracerProvider setup
  t <$ setGlobalTracerProvider t

initializeTracerProvider
  :: MonadIO m
  => (TracerProviderOptions -> TracerProviderOptions)
  -> m TracerProvider
initializeTracerProvider setup = liftIO $ do
  (processors, opts) <- getTracerProviderInitializationOptions
  createTracerProvider processors $ setup opts

shutdownTracerProvider :: MonadIO m => TracerProvider -> m ()
shutdownTracerProvider = liftIO . Trace.shutdownTracerProvider