{-# LANGUAGE CPP #-}

{- |
 Module      :  OpenTelemetry.Resource.Telemetry
 Copyright   :  (c) Ian Duncan, 2021
 License     :  BSD-3
 Description :  Information about the telemetry SDK used to capture data recorded
 by the instrumentation libraries.
 Maintainer  :  Ian Duncan
 Stability   :  experimental
 Portability :  non-portable (GHC extensions)
-}
module OpenTelemetry.Resource.Telemetry where

import Data.Text (Text)
import OpenTelemetry.Attributes.Key (unkey)
import OpenTelemetry.Resource
import qualified OpenTelemetry.SemanticConventions as SC


-- - id: cpp
--   value: "cpp"
-- - id: dotnet
--   value: "dotnet"
-- - id: erlang
--   value: "erlang"
-- - id: go
--   value: "go"
-- - id: java
--   value: "java"
-- - id: nodejs
--   value: "nodejs"
-- - id: php
--   value: "php"
-- - id: python
--   value: "python"
-- - id: ruby
--   value: "ruby"
-- - id: webjs
--   value: "webjs"
-- other allowed

{- | The telemetry SDK used to capture data recorded by the instrumentation libraries.

@since 0.0.1.0
-}
data Telemetry = Telemetry
  { Telemetry -> Text
telemetrySdkName :: Text
  -- ^ The name of the telemetry SDK as defined above.
  , Telemetry -> Maybe Text
telemetrySdkLanguage :: Maybe Text
  -- ^ The name of the telemetry SDK as defined above.
  , Telemetry -> Maybe Text
telemetrySdkVersion :: Maybe Text
  -- ^ The version string of the telemetry SDK.
  , Telemetry -> Maybe Text
telemetryDistroName :: Maybe Text
  -- ^ The name of the telemetry auto instrumentation provider, if used.
  , Telemetry -> Maybe Text
telemetryDistroVersion :: Maybe Text
  -- ^ The version string of the telemetry auto instrumentation provider, if used.
  }


instance ToResource Telemetry where
  toResource :: Telemetry -> Resource
toResource Telemetry {Maybe Text
Text
telemetrySdkName :: Telemetry -> Text
telemetrySdkLanguage :: Telemetry -> Maybe Text
telemetrySdkVersion :: Telemetry -> Maybe Text
telemetryDistroName :: Telemetry -> Maybe Text
telemetryDistroVersion :: Telemetry -> Maybe Text
telemetrySdkName :: Text
telemetrySdkLanguage :: Maybe Text
telemetrySdkVersion :: Maybe Text
telemetryDistroName :: Maybe Text
telemetryDistroVersion :: Maybe Text
..} =
    Maybe Text -> [Maybe (Text, Attribute)] -> Resource
mkResourceWithSchema
      (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
semConvSchemaUrl)
      [ AttributeKey Text -> Text
forall a. AttributeKey a -> Text
unkey AttributeKey Text
SC.telemetry_sdk_name Text -> Text -> Maybe (Text, Attribute)
forall a. ToAttribute a => Text -> a -> Maybe (Text, Attribute)
.= Text
telemetrySdkName
      , AttributeKey Text -> Text
forall a. AttributeKey a -> Text
unkey AttributeKey Text
SC.telemetry_sdk_language Text -> Maybe Text -> Maybe (Text, Attribute)
forall a.
ToAttribute a =>
Text -> Maybe a -> Maybe (Text, Attribute)
.=? Maybe Text
telemetrySdkLanguage
      , AttributeKey Text -> Text
forall a. AttributeKey a -> Text
unkey AttributeKey Text
SC.telemetry_sdk_version Text -> Maybe Text -> Maybe (Text, Attribute)
forall a.
ToAttribute a =>
Text -> Maybe a -> Maybe (Text, Attribute)
.=? Maybe Text
telemetrySdkVersion
      , AttributeKey Text -> Text
forall a. AttributeKey a -> Text
unkey AttributeKey Text
SC.telemetry_distro_name Text -> Maybe Text -> Maybe (Text, Attribute)
forall a.
ToAttribute a =>
Text -> Maybe a -> Maybe (Text, Attribute)
.=? Maybe Text
telemetryDistroName
      , AttributeKey Text -> Text
forall a. AttributeKey a -> Text
unkey AttributeKey Text
SC.telemetry_distro_version Text -> Maybe Text -> Maybe (Text, Attribute)
forall a.
ToAttribute a =>
Text -> Maybe a -> Maybe (Text, Attribute)
.=? Maybe Text
telemetryDistroVersion
      ]