-- | 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