hs-opentelemetry-api-0.0.3.7: src/OpenTelemetry/Resource/Cloud.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE TypeFamilies #-}
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
{- |
Module : OpenTelemetry.Resource.Cloud
Copyright : (c) Ian Duncan, 2021
License : BSD-3
Description : Cloud resource detection
Maintainer : Ian Duncan
Stability : experimental
Portability : non-portable (GHC extensions)
Cloud resource detection
-}
module OpenTelemetry.Resource.Cloud (
Cloud (..),
) where
import Data.Text (Text)
import OpenTelemetry.Resource (ToResource (..), mkResource, (.=?))
-- | A cloud infrastructure (e.g. GCP, Azure, AWS).
data Cloud = Cloud
{ cloudProvider :: Maybe Text
-- ^ Name of the cloud provider.
--
-- Examples: @alibaba_cloud@
--
-- cloud.provider MUST be one of the following or, if none of the listed values apply, a custom value:
--
-- +------------------+------------------------+
-- | Value | Description |
-- +==================+========================+
-- | @alibaba_cloud@ | Alibaba Cloud |
-- +------------------+------------------------+
-- | @aws@ | Amazon Web Services |
-- +------------------+------------------------+
-- | @azure@ | Microsoft Azure |
-- +------------------+------------------------+
-- | @gcp@ | Google Cloud Platform |
-- +------------------+------------------------+
-- | @tencent_cloud@ | Tencent Cloud |
-- +------------------+------------------------+
, cloudAccountId :: Maybe Text
-- ^ The cloud account ID the resource is assigned to.
, cloudRegion :: Maybe Text
-- ^ The geographical region the resource is running.
, cloudAvailabilityZone :: Maybe Text
-- ^ Cloud regions often have multiple, isolated locations known as zones to increase availability. Availability zone represents the zone where the resource is running.
, cloudPlatform :: Maybe Text
-- ^ The cloud platform in use.
--
-- Example: @alibaba_cloud_ecs@
--
-- MUST be one of the following or, if none of the listed values apply, a custom value:
--
-- +------------------------------+-------------------------------------------------+
-- | Value | Description |
-- +==============================+=================================================+
-- | @alibaba_cloud_ecs@ | Alibaba Cloud Elastic Compute Service |
-- +------------------------------+-------------------------------------------------+
-- | @alibaba_cloud_fc@ | Alibaba Cloud Function Compute |
-- +------------------------------+-------------------------------------------------+
-- | @aws_ec2@ | AWS Elastic Compute Cloud |
-- +------------------------------+-------------------------------------------------+
-- | @aws_ecs@ | AWS Elastic Container Service |
-- +------------------------------+-------------------------------------------------+
-- | @aws_eks@ | AWS Elastic Kubernetes Service |
-- +------------------------------+-------------------------------------------------+
-- | @aws_lambda@ | AWS Lambda |
-- +------------------------------+-------------------------------------------------+
-- | @aws_elastic_beanstalk@ | AWS Elastic Beanstalk |
-- +------------------------------+-------------------------------------------------+
-- | @aws_app_runner@ | AWS App Runner |
-- +------------------------------+-------------------------------------------------+
-- | @azure_vm@ | Azure Virtual Machines |
-- +------------------------------+-------------------------------------------------+
-- | @azure_container_instances@ | Azure Container Instances |
-- +------------------------------+-------------------------------------------------+
-- | @azure_aks@ | Azure Kubernetes Service |
-- +------------------------------+-------------------------------------------------+
-- | @azure_functions@ | Azure Functions |
-- +------------------------------+-------------------------------------------------+
-- | @azure_app_service@ | Azure App Service |
-- +------------------------------+-------------------------------------------------+
-- | @gcp_compute_engine@ | Google Cloud Compute Engine (GCE) |
-- +------------------------------+-------------------------------------------------+
-- | @gcp_cloud_run@ | Google Cloud Run |
-- +------------------------------+-------------------------------------------------+
-- | @gcp_kubernetes_engine@ | Google Cloud Kubernetes Engine (GKE) |
-- +------------------------------+-------------------------------------------------+
-- | @gcp_cloud_functions@ | Google Cloud Functions (GCF) |
-- +------------------------------+-------------------------------------------------+
-- | @gcp_app_engine@ | Google Cloud App Engine (GAE) |
-- +------------------------------+-------------------------------------------------+
-- | @tencent_cloud_cvm@ | Tencent Cloud Cloud Virtual Machine (CVM) |
-- +------------------------------+-------------------------------------------------+
-- | @tencent_cloud_eks@ | Tencent Cloud Elastic Kubernetes Service (EKS) |
-- +------------------------------+-------------------------------------------------+
-- | @tencent_cloud_scf@ | Tencent Cloud Serverless Cloud Function (SCF) |
-- +------------------------------+-------------------------------------------------+
}
instance ToResource Cloud where
type ResourceSchema Cloud = 'Nothing
toResource Cloud {..} =
mkResource
[ "cloud.provider" .=? cloudProvider
, "cloud.account.id" .=? cloudAccountId
, "cloud.region" .=? cloudRegion
, "cloud.availability_zone" .=? cloudAvailabilityZone
, "cloud.platform" .=? cloudPlatform
]