class ElasticAPM::Metadata::CloudInfo
@api private
def fetch!
def fetch! case config.cloud_provider when "aws" fetch_aws when "gcp" fetch_gcp when "azure" fetch_azure when "auto" fetch_aws || fetch_gcp || fetch_azure when "none" nil else error("Unknown setting for cloud_provider '#{config.cloud_provider}'") end self end
def fetch_aws
def fetch_aws resp = @client.get(AWS_URI) return unless resp.status == 200 return unless (metadata = JSON.parse(resp.body)) 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
def fetch_azure
def fetch_azure resp = @client.headers("Metadata" => "true").get(AZURE_URI) return unless resp.status == 200 return unless (metadata = JSON.parse(resp.body)) 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
def fetch_gcp
def fetch_gcp resp = @client.headers("Metadata-Flavor" => "Google").get(GCP_URI) return unless resp.status == 200 return unless (metadata = JSON.parse(resp.body)) zone = metadata["instance"]["zone"]&.split("/")&.at(-1) self.provider = "gcp" self.instance_id = metadata["instance"]["id"] self.instance_name = metadata["instance"]["name"] self.project_id = metadata["project"]["numericProjectId"] self.project_name = metadata["project"]["projectId"] self.availability_zone = zone self.region = zone.split("-")[0..-2].join("-") self.machine_type = metadata["instance"]["machineType"] rescue HTTP::TimeoutError, HTTP::ConnectionError nil end
def initialize(config)
def initialize(config) @config = config @client = HTTP.timeout(connect: 0.1, read: 0.1) end