Packages
new_relic_agent
1.16.6
1.40.3
1.40.2
1.40.1
1.40.0
1.39.0
1.38.0
1.37.0
1.36.0
1.35.0
1.34.0
1.33.0
1.32.0
1.31.1
1.31.0
1.30.0
1.29.0
1.28.0
1.27.8
1.27.7
1.27.6
1.27.5
1.27.4
1.27.3
1.27.2
1.27.1
1.27.0
1.26.0
1.25.3
1.25.2
1.25.1
1.25.0
1.24.5
1.24.4
1.24.3
1.24.2
1.24.1
1.24.0
1.24.0-rc.10
1.24.0-rc.9
1.24.0-rc.8
1.24.0-rc.7
1.23.6
1.23.5
1.23.4
1.23.3
1.23.2
1.23.1
1.23.0
1.23.0-rc.6
1.23.0-rc.5
1.23.0-rc.4
1.23.0-rc.3
1.23.0-rc.2
1.23.0-rc.1
1.22.6
1.22.5
1.22.4
1.22.3
1.22.2
1.22.1
1.22.0
1.21.2
1.21.1
1.21.0
1.21.0-rc.3
1.21.0-rc.1
1.20.0
1.20.0-rc.1
1.19.7
1.19.6
1.19.5
1.19.4
1.19.3
1.19.2
1.19.1
1.19.0
1.18.5
1.18.4
1.18.3
1.18.2
1.18.1
1.18.0
1.18.0-rc.5
1.18.0-rc.4
1.18.0-rc.2
1.18.0-rc.1
1.17.1
1.17.0
1.17.0-rc.4
1.17.0-rc.3
1.17.0-rc.2
1.17.0-rc.1
1.17.0-rc.0
1.16.7
1.16.6
1.16.5
1.16.4
1.16.3
1.16.2
1.16.1
1.16.0
1.16.0-rc.2
1.16.0-rc.1
1.16.0-rc.0
1.15.0
1.15.0-rc.3
1.15.0-rc.2
1.15.0-rc.1
1.14.0
1.13.1
1.13.0
1.12.0
1.11.0
1.10.2
1.10.1
1.10.0
1.9.12
1.9.11
1.9.10
1.9.9
1.9.8
1.9.7
1.9.6
1.9.5
1.9.4
1.9.3
1.9.2
1.9.1
1.9.0
1.8.0
1.7.0
1.6.2
1.6.1
1.6.0
1.5.0
1.4.0
1.3.2
1.3.1
1.3.0
1.2.1
1.2.0
1.1.0
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
New Relic's Open-Source Elixir Agent
Current section
Files
Jump to
Current section
Files
lib/new_relic/util/vendor.ex
defmodule NewRelic.Util.Vendor do
@moduledoc false
def maybe_add_vendors(util, options \\ []) do
%{}
|> maybe_add_aws(options)
|> maybe_add_kubernetes()
|> case do
vendors when map_size(vendors) == 0 -> util
vendors -> Map.put(util, :vendors, vendors)
end
end
@aws_url "http://169.254.169.254/2016-09-02/dynamic/instance-identity/document"
def maybe_add_aws(vendors, options \\ []) do
Keyword.get(options, :aws_url, @aws_url)
|> aws_vendor_hash()
|> case do
nil -> vendors
aws_hash -> Map.put(vendors, :aws, aws_hash)
end
end
def maybe_add_kubernetes(vendors) do
System.get_env("KUBERNETES_SERVICE_HOST")
|> case do
nil -> vendors
value -> Map.put(vendors, :kubernetes, %{kubernetes_service_host: value})
end
end
@aws_vendor_data ["availabilityZone", "instanceId", "instanceType"]
def aws_vendor_hash(url) do
case :httpc.request(:get, {~c(#{url}), []}, [{:timeout, 100}], []) do
{:ok, {{_, 200, 'OK'}, _headers, body}} ->
case Jason.decode(body) do
{:ok, data} -> Map.take(data, @aws_vendor_data)
_ -> nil
end
_error ->
nil
end
rescue
exception ->
NewRelic.log(:error, "Failed to fetch AWS metadata. #{inspect(exception)}")
nil
end
end