hs-opentelemetry-api-1.0.0.0: src/OpenTelemetry/Resource/Cloud.hs
{- |
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.Attributes.Key (unkey)
import OpenTelemetry.Resource (ToResource (..), mkResourceWithSchema, semConvSchemaUrl, (.=?))
import qualified OpenTelemetry.SemanticConventions as SC
{- | A cloud infrastructure (e.g. GCP, Azure, AWS).
@since 0.0.1.0
-}
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) |
+------------------------------+-------------------------------------------------+
-}
, cloudResourceId :: Maybe Text
-- ^ Cloud provider-specific native identifier of the monitored cloud resource.
}
instance ToResource Cloud where
toResource Cloud {..} =
mkResourceWithSchema
(Just semConvSchemaUrl)
[ unkey SC.cloud_provider .=? cloudProvider
, unkey SC.cloud_account_id .=? cloudAccountId
, unkey SC.cloud_region .=? cloudRegion
, unkey SC.cloud_availabilityZone .=? cloudAvailabilityZone
, unkey SC.cloud_platform .=? cloudPlatform
, unkey SC.cloud_resourceId .=? cloudResourceId
]