packages feed

hs-opentelemetry-api-1.0.0.0: src/OpenTelemetry/Resource/Container.hs

{- |
 Module      :  OpenTelemetry.Resource.Container
 Copyright   :  (c) Ian Duncan, 2021
 License     :  BSD-3
 Description :  Detect & provide resource info about a container
 Maintainer  :  Ian Duncan
 Stability   :  experimental
 Portability :  non-portable (GHC extensions)
-}
module OpenTelemetry.Resource.Container where

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


{- | A container instance.

@since 0.0.1.0
-}
data Container = Container
  { containerName :: Maybe Text
  {- ^ Container name used by container runtime.

  Examples: 'opentelemetry-autoconf'
  -}
  , containerId :: Maybe Text
  -- ^ Container ID. Usually a UUID, as for example used to identify Docker containers. The UUID might be abbreviated.
  , containerRuntime :: Maybe Text
  -- ^ The container runtime managing this container.
  , containerImageName :: Maybe Text
  -- ^ Name of the image the container was built on.
  , containerImageTag :: Maybe Text
  -- ^ Container image tag.
  , containerImageId :: Maybe Text
  -- ^ Runtime-specific image identifier (e.g., digest).
  , ociManifestDigest :: Maybe Text
  -- ^ The digest of the OCI image manifest.
  , containerImageRepoDigests :: Maybe [Text]
  -- ^ Repo digests of the container image.
  }


instance ToResource Container where
  toResource Container {..} =
    mkResourceWithSchema
      (Just semConvSchemaUrl)
      [ unkey SC.container_name .=? containerName
      , unkey SC.container_id .=? containerId
      , unkey SC.container_runtime_name .=? containerRuntime
      , unkey SC.container_runtime .=? containerRuntime
      , unkey SC.container_image_name .=? containerImageName
      , unkey SC.container_image_id .=? containerImageId
      , unkey SC.container_image_tags .=? ((: []) <$> containerImageTag)
      , unkey SC.oci_manifest_digest .=? ociManifestDigest
      , unkey SC.container_image_repoDigests .=? containerImageRepoDigests
      ]