{-# LANGUAGE DeriveGeneric #-}
{-|
Module : Instana.SDK.Span.ExitSpan
Description : An exit span
-}
module Instana.SDK.Span.ExitSpan
( ExitSpan(..)
, parentId
, traceId
, addAnnotation
, addToErrorCount
, setServiceName
, setW3cTraceContext
, spanName
) where
import Data.Text (Text)
import GHC.Generics
import Instana.SDK.Internal.Id (Id)
import Instana.SDK.Internal.W3CTraceContext (W3CTraceContext)
import Instana.SDK.Span.EntrySpan (EntrySpan)
import qualified Instana.SDK.Span.EntrySpan as EntrySpan
import Instana.SDK.Span.SpanData (Annotation, SpanData)
import qualified Instana.SDK.Span.SpanData as SpanData
import Instana.SDK.Span.SpanType (SpanType)
import qualified Instana.SDK.Span.SpanType as SpanType
-- |An exit span.
data ExitSpan =
ExitSpan
{
-- |The parent span
parentSpan :: EntrySpan
-- |The span ID
, spanId :: Id
-- |The type of the span (SDK span or registerd span)
, spanType :: SpanType
-- |The time the span started
, timestamp :: Int
-- |An attribute for overriding the name of the service in Instana
, serviceName :: Maybe Text
-- |The number of errors that occured during processing
, errorCount :: Int
-- |Additional data for the span.
, spanData :: SpanData
-- |The W3C Trace Context. An entry span only has an associated W3C trace
-- context, if W3C trace context headers have been received. In contrast,
-- spans always have an associated W3C trace context.
, w3cTraceContext :: W3CTraceContext
} deriving (Eq, Generic, Show)
-- |The span name/type, e.g. a short string like "haskell.wai.server",
-- "haskell.http.client". For SDK spans this is always "sdk", the actual
-- name is then in span.data.sdk.name.
spanName :: ExitSpan -> Text
spanName = SpanType.spanName . spanType
-- |Accessor for the trace ID.
traceId :: ExitSpan -> Id
traceId exitSpan =
EntrySpan.traceId $ parentSpan exitSpan
-- |Parent span ID.
parentId :: ExitSpan -> Id
parentId exitSpan =
EntrySpan.spanId $ parentSpan exitSpan
-- |Add to the error count.
addToErrorCount :: Int -> ExitSpan -> ExitSpan
addToErrorCount increment exitSpan =
let
ec = errorCount exitSpan
in
exitSpan { errorCount = ec + increment }
-- |Override the name of the service for the associated call in Instana.
setServiceName :: Text -> ExitSpan -> ExitSpan
setServiceName serviceName_ exitSpan =
exitSpan { serviceName = Just serviceName_ }
-- |Attaches a W3C trace context to the span.
setW3cTraceContext :: W3CTraceContext -> ExitSpan -> ExitSpan
setW3cTraceContext w3cTraceContext_ exitSpan =
exitSpan { w3cTraceContext = w3cTraceContext_ }
-- |Add an annotation to the span's data section. For SDK spans, the annotation
-- is added to span.data.sdk.custom.tags, for registered spans it is added
-- directly to span.data.
addAnnotation :: Annotation -> ExitSpan -> ExitSpan
addAnnotation annotation exitSpan =
exitSpan { spanData = SpanData.merge annotation $ spanData exitSpan }