Packages
new_relic_agent
1.40.1
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/harvest/telemetry_sdk/api.ex
defmodule NewRelic.Harvest.TelemetrySdk.API do
@moduledoc false
def log(logs) do
url = url(:log)
payload = {:logs, logs, generate_request_id()}
post(url, payload)
|> maybe_retry(url, payload)
end
def span(spans) do
url = url(:trace)
payload = {:spans, spans, generate_request_id()}
post(url, payload)
|> maybe_retry(url, payload)
end
def dimensional_metric(metrics) do
url = url(:metric)
payload = {:metrics, metrics, generate_request_id()}
post(url, payload)
|> maybe_retry(url, payload)
end
@success 200..299
@drop [400, 401, 403, 405, 409, 410, 411]
defp maybe_retry({:ok, %{status_code: status_code}} = result, _, _)
when status_code in @success
when status_code in @drop do
result
end
# 413 split
# 408, 500+
defp maybe_retry(_result, url, payload) do
post(url, payload)
end
defp post(url, {_, payload, request_id}) do
NewRelic.Util.HTTP.post(url, payload, headers(request_id))
end
defp url(type) do
NewRelic.Config.get(:telemetry_hosts)[type]
end
defp headers(request_id) do
[
"X-Request-Id": request_id,
"X-License-Key": NewRelic.Config.license_key(),
"User-Agent": user_agent()
]
end
defp user_agent() do
"NewRelic-Elixir-TelemetrySDK/0.1.0 " <>
"NewRelic-Elixir-Agent/#{NewRelic.Config.agent_version()}"
end
defp generate_request_id() do
NewRelic.Util.uuid4()
end
end