{-# 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 { Cloud -> Maybe Text 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 | -- +------------------+------------------------+ , Cloud -> Maybe Text cloudAccountId :: Maybe Text -- ^ The cloud account ID the resource is assigned to. , Cloud -> Maybe Text cloudRegion :: Maybe Text -- ^ The geographical region the resource is running. , Cloud -> Maybe Text 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. , Cloud -> Maybe Text 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 -> Resource (ResourceSchema Cloud) toResource Cloud {Maybe Text cloudProvider :: Cloud -> Maybe Text cloudAccountId :: Cloud -> Maybe Text cloudRegion :: Cloud -> Maybe Text cloudAvailabilityZone :: Cloud -> Maybe Text cloudPlatform :: Cloud -> Maybe Text cloudProvider :: Maybe Text cloudAccountId :: Maybe Text cloudRegion :: Maybe Text cloudAvailabilityZone :: Maybe Text cloudPlatform :: Maybe Text ..} = [Maybe (Text, Attribute)] -> Resource 'Nothing forall (r :: Maybe Symbol). [Maybe (Text, Attribute)] -> Resource r mkResource [ Text "cloud.provider" Text -> Maybe Text -> Maybe (Text, Attribute) forall a. ToAttribute a => Text -> Maybe a -> Maybe (Text, Attribute) .=? Maybe Text cloudProvider , Text "cloud.account.id" Text -> Maybe Text -> Maybe (Text, Attribute) forall a. ToAttribute a => Text -> Maybe a -> Maybe (Text, Attribute) .=? Maybe Text cloudAccountId , Text "cloud.region" Text -> Maybe Text -> Maybe (Text, Attribute) forall a. ToAttribute a => Text -> Maybe a -> Maybe (Text, Attribute) .=? Maybe Text cloudRegion , Text "cloud.availability_zone" Text -> Maybe Text -> Maybe (Text, Attribute) forall a. ToAttribute a => Text -> Maybe a -> Maybe (Text, Attribute) .=? Maybe Text cloudAvailabilityZone , Text "cloud.platform" Text -> Maybe Text -> Maybe (Text, Attribute) forall a. ToAttribute a => Text -> Maybe a -> Maybe (Text, Attribute) .=? Maybe Text cloudPlatform ]