{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
{-|
Module : Instana.SDK.Span.SimpleSpan
Description : A representation for spans for external use.
-}
module Instana.SDK.Span.SimpleSpan
( SimpleSpan(..)
, convert
) where
import qualified Data.Aeson as Aeson
import qualified Data.Text as T
import GHC.Generics
import qualified Instana.SDK.Internal.Id as Id
import Instana.SDK.Span.Span (SpanKind (..))
import Instana.SDK.Span.Span (Span)
import qualified Instana.SDK.Span.Span as Span
-- |A representation of the span fit for external use by clients of the SDK.
data SimpleSpan = SimpleSpan
{ traceId :: String
, spanId :: String
, parentId :: Maybe String
, spanName :: String
, timestamp :: Int
, kind :: SpanKind
, errorCount :: Int
, spanData :: Aeson.Value
} deriving (Eq, Generic, Show)
-- |Converts the internal span datastructure into the simplified format.
convert :: Span -> SimpleSpan
convert span_ =
SimpleSpan
{ traceId = Id.toString $ Span.traceId span_
, spanId = Id.toString $ Span.spanId span_
, parentId = Id.toString <$> Span.parentId span_
, spanName = T.unpack $ Span.spanName span_
, timestamp = Span.timestamp span_
, kind = Span.spanKind span_
, errorCount = Span.errorCount span_
, spanData = Span.spanData span_
}