opentelemetry-0.0.0.0: src/OpenTelemetry/Explicit.hs
module OpenTelemetry.Explicit
( startRootSpan,
startChildSpan,
endSpan,
setTag,
addEvent,
createOpenTelemetryClient,
)
where
import qualified Data.Text as T
import GHC.Conc
import OpenTelemetry.Common
import System.Clock
import System.Random
data Client
= Client
{ cTracer :: Tracer ThreadId,
cSpanExporter :: Exporter Span
}
startRootSpan :: Client -> T.Text -> IO Span
startRootSpan _tracer name = do
timestamp <- now64
sid <- randomIO
pure $! Span (SpanContext (SId sid) (TId sid)) name timestamp 0 mempty OK
startChildSpan :: Client -> Span -> T.Text -> IO Span
startChildSpan _tracer parent name = do
timestamp <- now64
sid <- randomIO
pure $! Span (SpanContext (SId sid) (spanTraceId parent)) name timestamp 0 mempty OK
endSpan :: Client -> Span -> IO ()
endSpan _tracer sp = do
timestamp <- now64
pure $! sp {spanFinishedAt = timestamp}
pure ()
setTag :: Monad m => Client -> Span -> T.Text -> value -> m ()
setTag _tracer _span _key _value = pure ()
addEvent :: Monad m => Client -> Span -> T.Text -> m ()
addEvent _tracer _span _name = pure ()
createOpenTelemetryClient :: Exporter Span -> IO Client
createOpenTelemetryClient e = do
t <- createTracer
pure $ Client t e