class ElasticAPM::Metadata::CloudInfo
@api private
Constants
- AWS_URI
- AZURE_URI
- GCP_URI
Attributes
account_id[RW]
account_name[RW]
availability_zone[RW]
config[R]
instance_id[RW]
instance_name[RW]
machine_type[RW]
project_id[RW]
project_name[RW]
provider[RW]
region[RW]
Public Class Methods
new(config)
click to toggle source
# File lib/elastic_apm/metadata/cloud_info.rb, line 32 def initialize(config) @config = config @client = HTTP.timeout(connect: 0.1, read: 0.1) end
Public Instance Methods
fetch!()
click to toggle source
rubocop:disable Metrics/CyclomaticComplexity
# File lib/elastic_apm/metadata/cloud_info.rb, line 53 def fetch! case config.cloud_provider when "aws" fetch_aws when "gcp" fetch_gcp when "azure" fetch_azure || read_azure_app_services when "auto" fetch_aws || fetch_gcp || fetch_azure || read_azure_app_services when "none" nil else error("Unknown setting for cloud_provider '#{config.cloud_provider}'") end self end
Private Instance Methods
fetch_aws()
click to toggle source
rubocop:enable Metrics/CyclomaticComplexity
# File lib/elastic_apm/metadata/cloud_info.rb, line 75 def fetch_aws resp = @client.get(AWS_URI) return unless resp.status == 200 return unless (metadata = JSON.parse(resp.body.to_s)) self.provider = "aws" self.account_id = metadata["accountId"] self.instance_id = metadata["instanceId"] self.availability_zone = metadata["availabilityZone"] self.machine_type = metadata["instanceType"] self.region = metadata["region"] rescue HTTP::TimeoutError, HTTP::ConnectionError nil end
fetch_azure()
click to toggle source
# File lib/elastic_apm/metadata/cloud_info.rb, line 113 def fetch_azure resp = @client.headers("Metadata" => "true").get(AZURE_URI) return unless resp.status == 200 return unless (metadata = JSON.parse(resp.body.to_s)) self.provider = 'azure' self.account_id = metadata["subscriptionId"] self.instance_id = metadata["vmId"] self.instance_name = metadata["name"] self.project_name = metadata["resourceGroupName"] self.availability_zone = metadata["zone"] self.machine_type = metadata["vmSize"] self.region = metadata["location"] rescue HTTP::TimeoutError, HTTP::ConnectionError nil end
fetch_gcp()
click to toggle source
# File lib/elastic_apm/metadata/cloud_info.rb, line 91 def fetch_gcp resp = @client.headers("Metadata-Flavor" => "Google").get(GCP_URI) return unless resp.status == 200 return unless (metadata = JSON.parse(resp.body.to_s)) self.provider = "gcp" self.project_id = metadata["project"]["projectId"] return unless metadata['instance'] zone = metadata["instance"]["zone"]&.split("/")&.at(-1) self.availability_zone = zone self.region = zone.split("-")[0..-2].join("-") self.instance_id = metadata["instance"]["id"].to_s self.instance_name = metadata["instance"]["name"] self.machine_type = metadata["instance"]["machineType"]&.split("/")&.at(-1) rescue HTTP::TimeoutError, HTTP::ConnectionError nil end
parse_azure_app_services_owner_name(owner_name)
click to toggle source
# File lib/elastic_apm/metadata/cloud_info.rb, line 151 def parse_azure_app_services_owner_name(owner_name) id, rest = owner_name.split('+') *_, region = rest.split('-') region.gsub!(/webspace.*$/, '') [id, region] end
read_azure_app_services()
click to toggle source
# File lib/elastic_apm/metadata/cloud_info.rb, line 131 def read_azure_app_services owner_name, instance_id, site_name, resource_group = ENV.values_at( 'WEBSITE_OWNER_NAME', 'WEBSITE_INSTANCE_ID', 'WEBSITE_SITE_NAME', 'WEBSITE_RESOURCE_GROUP' ) return unless owner_name && instance_id && site_name && resource_group self.provider = 'azure' self.instance_id = instance_id self.instance_name = site_name self.project_name = resource_group self.account_id, self.region = parse_azure_app_services_owner_name(owner_name) end