{-# LANGUAGE DeriveGeneric #-}
module Instana.SDK.Span.ExitSpan
( ExitSpan(..)
, parentId
, traceId
, addData
, addToErrorCount
) where
import Data.Aeson (Value)
import qualified Data.Aeson.Extra.Merge as AesonExtra
import Data.Text (Text)
import GHC.Generics
import Instana.SDK.Internal.Id (Id)
import Instana.SDK.Span.EntrySpan (EntrySpan)
import qualified Instana.SDK.Span.EntrySpan as EntrySpan
data ExitSpan =
ExitSpan
{
parentSpan :: EntrySpan
, spanId :: Id
, spanName :: Text
, timestamp :: Int
, errorCount :: Int
, spanData :: Value
} deriving (Eq, Generic, Show)
traceId :: ExitSpan -> Id
traceId exitSpan =
EntrySpan.traceId $ parentSpan exitSpan
parentId :: ExitSpan -> Id
parentId exitSpan =
EntrySpan.spanId $ parentSpan exitSpan
addToErrorCount :: Int -> ExitSpan -> ExitSpan
addToErrorCount increment exitSpan =
let
ec = errorCount exitSpan
in
exitSpan { errorCount = ec + increment }
addData :: Value -> ExitSpan -> ExitSpan
addData newData exitSpan =
let
currentData = spanData exitSpan
mergedData = AesonExtra.lodashMerge currentData newData
in
exitSpan { spanData = mergedData }