{-# LANGUAGE DeriveGeneric #-}
{-|
Module : Instana.SDK.Span.EntrySpan
Description : An entry span
-}
module Instana.SDK.Span.EntrySpan
( EntrySpan(..)
, addData
, addToErrorCount
, correlationId
, correlationType
, errorCount
, parentId
, serviceName
, setCorrelationId
, setCorrelationType
, setServiceName
, setSynthetic
, spanData
, spanId
, spanName
, synthetic
, timestamp
, traceId
) where
import Data.Aeson (Value)
import Data.Text (Text)
import GHC.Generics
import Instana.SDK.Internal.Id (Id)
import Instana.SDK.Span.NonRootEntry (NonRootEntry)
import qualified Instana.SDK.Span.NonRootEntry as NonRootEntry
import Instana.SDK.Span.RootEntry (RootEntry)
import qualified Instana.SDK.Span.RootEntry as RootEntry
-- |An entry span.
data EntrySpan =
RootEntrySpan RootEntry
| NonRootEntrySpan NonRootEntry
deriving (Eq, Generic, Show)
-- |Accessor for the trace ID.
traceId :: EntrySpan -> Id
traceId entrySpan =
case entrySpan of
RootEntrySpan entry -> RootEntry.spanAndTraceId entry
NonRootEntrySpan entry -> NonRootEntry.traceId entry
-- |Accessor for the span ID.
spanId :: EntrySpan -> Id
spanId entrySpan =
case entrySpan of
RootEntrySpan entry -> RootEntry.spanAndTraceId entry
NonRootEntrySpan entry -> NonRootEntry.spanId entry
-- |Parent span ID.
parentId :: EntrySpan -> Maybe Id
parentId entrySpan =
case entrySpan of
RootEntrySpan _ -> Nothing
NonRootEntrySpan entry -> Just $ NonRootEntry.parentId entry
-- |Name of span.
spanName :: EntrySpan -> Text
spanName entrySpan =
case entrySpan of
RootEntrySpan entry -> RootEntry.spanName entry
NonRootEntrySpan entry -> NonRootEntry.spanName entry
-- |Start time.
timestamp :: EntrySpan -> Int
timestamp entrySpan =
case entrySpan of
RootEntrySpan entry -> RootEntry.timestamp entry
NonRootEntrySpan entry -> NonRootEntry.timestamp entry
-- |Error count (error that occured while this span has been active).
errorCount :: EntrySpan -> Int
errorCount entrySpan =
case entrySpan of
RootEntrySpan entry -> RootEntry.errorCount entry
NonRootEntrySpan entry -> NonRootEntry.errorCount entry
-- |Add to the error count.
addToErrorCount :: Int -> EntrySpan -> EntrySpan
addToErrorCount increment entrySpan =
case entrySpan of
RootEntrySpan entry ->
RootEntrySpan $ RootEntry.addToErrorCount increment entry
NonRootEntrySpan entry ->
NonRootEntrySpan $ NonRootEntry.addToErrorCount increment entry
-- |An optional attribute for overriding the name of the service in Instana.
serviceName :: EntrySpan -> Maybe Text
serviceName entrySpan =
case entrySpan of
RootEntrySpan entry -> RootEntry.serviceName entry
NonRootEntrySpan entry -> NonRootEntry.serviceName entry
-- |Override the name of the service for the associated call in Instana.
setServiceName :: Text -> EntrySpan -> EntrySpan
setServiceName serviceName_ entrySpan =
case entrySpan of
RootEntrySpan entry ->
RootEntrySpan $ RootEntry.setServiceName serviceName_ entry
NonRootEntrySpan entry ->
NonRootEntrySpan $ NonRootEntry.setServiceName serviceName_ entry
-- |The website monitoring correlation type.
correlationType :: EntrySpan -> Maybe Text
correlationType entrySpan =
case entrySpan of
RootEntrySpan entry -> RootEntry.correlationType entry
NonRootEntrySpan _ -> Nothing
-- |Set the website monitoring correlation type. This should only be set on
-- root entry spans. It will be silently ignored for other types of spans.
setCorrelationType :: Text -> EntrySpan -> EntrySpan
setCorrelationType correlationType_ entrySpan =
case entrySpan of
RootEntrySpan entry ->
RootEntrySpan $ RootEntry.setCorrelationType correlationType_ entry
NonRootEntrySpan _ ->
entrySpan
-- |The website monitoring correlation ID.
correlationId :: EntrySpan -> Maybe Text
correlationId entrySpan =
case entrySpan of
RootEntrySpan entry -> RootEntry.correlationId entry
NonRootEntrySpan _ -> Nothing
-- |Set the website monitoring correlation ID. This should only be set on
-- root entry spans. It will be silently ignored for other types of spans.
setCorrelationId :: Text -> EntrySpan -> EntrySpan
setCorrelationId correlationId_ entrySpan =
case entrySpan of
RootEntrySpan entry ->
RootEntrySpan $ RootEntry.setCorrelationId correlationId_ entry
NonRootEntrySpan _ ->
entrySpan
-- |The synthetic flag.
synthetic :: EntrySpan -> Bool
synthetic entrySpan =
case entrySpan of
RootEntrySpan entry -> RootEntry.synthetic entry
NonRootEntrySpan entry -> NonRootEntry.synthetic entry
-- |Set the synthetic flag. This should only be set on entry spans. It will be
-- silently ignored for other types of spans.
setSynthetic :: Bool -> EntrySpan -> EntrySpan
setSynthetic synthetic_ entrySpan =
case entrySpan of
RootEntrySpan entry ->
RootEntrySpan $ RootEntry.setSynthetic synthetic_ entry
NonRootEntrySpan entry ->
NonRootEntrySpan $ NonRootEntry.setSynthetic synthetic_ entry
-- |Optional additional span data.
spanData :: EntrySpan -> Value
spanData entrySpan =
case entrySpan of
RootEntrySpan entry -> RootEntry.spanData entry
NonRootEntrySpan entry -> NonRootEntry.spanData entry
-- |Add a value to the span's data section.
addData :: Value -> EntrySpan -> EntrySpan
addData value entrySpan =
case entrySpan of
RootEntrySpan entry ->
RootEntrySpan $ RootEntry.addData value entry
NonRootEntrySpan entry ->
NonRootEntrySpan $ NonRootEntry.addData value entry