hs-opentelemetry-sdk-0.0.3.6: src/OpenTelemetry/Trace/Id/Generator/Default.hs
{-# LANGUAGE CPP #-}
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
{- |
Module : OpenTelemetry.Trace.Id.Generator.Default
Copyright : (c) Ian Duncan, 2021
License : BSD-3
Maintainer : Ian Duncan
Stability : experimental
Portability : non-portable (GHC extensions)
A reasonably performant out of the box implementation of random span and trace id generation.
-}
module OpenTelemetry.Trace.Id.Generator.Default (
defaultIdGenerator,
) where
import OpenTelemetry.Trace.Id.Generator (IdGenerator (..))
import System.IO.Unsafe (unsafePerformIO)
import System.Random.Stateful
{- | The default generator for trace and span ids.
@since 0.1.0.0
-}
defaultIdGenerator :: IdGenerator
defaultIdGenerator = unsafePerformIO $ do
genBase <- initStdGen
let (spanIdGen, traceIdGen) = split genBase
sg <- newAtomicGenM spanIdGen
tg <- newAtomicGenM traceIdGen
pure $
IdGenerator
{ generateSpanIdBytes = uniformByteStringM 8 sg
, generateTraceIdBytes = uniformByteStringM 16 tg
}
{-# NOINLINE defaultIdGenerator #-}