Packages
new_relic_agent
1.0.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/instrumented/httpoison.ex
if Code.ensure_loaded?(HTTPoison) do
defmodule NewRelic.Instrumented.HTTPoison do
use NewRelic.Tracer
@moduledoc """
To track outbound requests as part of a Distributed Trace, an additional request
header needs to be added. Simply alias this module and use `HTTPoison` as normal,
all your requests will be automatically instrumented.
```elixir
alias NewRelic.Instrumented.HTTPoison
HTTPoison.get("http://www.example.com")
```
This module mirrors the interface of `HTTPoison`
"""
defp instrument(method, url, headers) do
NewRelic.set_span(:http, url: url, method: method, component: "HTTPoison")
headers ++ NewRelic.create_distributed_trace_payload(:http)
end
@trace {:get, category: :external}
def get(url, headers \\ [], options \\ []) do
headers = instrument("GET", url, headers)
HTTPoison.get(url, headers, options)
end
@trace {:get!, category: :external}
def get!(url, headers \\ [], options \\ []) do
headers = instrument("GET", url, headers)
HTTPoison.get!(url, headers, options)
end
@trace {:put, category: :external}
def put(url, body \\ "", headers \\ [], options \\ []) do
headers = instrument("PUT", url, headers)
HTTPoison.put(url, body, headers, options)
end
@trace {:put!, category: :external}
def put!(url, body \\ "", headers \\ [], options \\ []) do
headers = instrument("PUT", url, headers)
HTTPoison.put!(url, body, headers, options)
end
@trace {:head, category: :external}
def head(url, headers \\ [], options \\ []) do
headers = instrument("HEAD", url, headers)
HTTPoison.head(url, headers, options)
end
@trace {:head!, category: :external}
def head!(url, headers \\ [], options \\ []) do
headers = instrument("HEAD", url, headers)
HTTPoison.head!(url, headers, options)
end
@trace {:post, category: :external}
def post(url, body, headers \\ [], options \\ []) do
headers = instrument("POST", url, headers)
HTTPoison.post(url, body, headers, options)
end
@trace {:post!, category: :external}
def post!(url, body, headers \\ [], options \\ []) do
headers = instrument("POST", url, headers)
HTTPoison.post!(url, body, headers, options)
end
@trace {:patch, category: :external}
def patch(url, body, headers \\ [], options \\ []) do
headers = instrument("PATCH", url, headers)
HTTPoison.patch(url, body, headers, options)
end
@trace {:patch!, category: :external}
def patch!(url, body, headers \\ [], options \\ []) do
headers = instrument("PATCH", url, headers)
HTTPoison.patch!(url, body, headers, options)
end
@trace {:delete, category: :external}
def delete(url, headers \\ [], options \\ []) do
headers = instrument("DELETE", url, headers)
HTTPoison.delete(url, headers, options)
end
@trace {:delete!, category: :external}
def delete!(url, headers \\ [], options \\ []) do
headers = instrument("DELETE", url, headers)
HTTPoison.delete!(url, headers, options)
end
@trace {:options, category: :external}
def options(url, headers \\ [], options \\ []) do
headers = instrument("OPTIONS", url, headers)
HTTPoison.options(url, headers, options)
end
@trace {:options!, category: :external}
def options!(url, headers \\ [], options \\ []) do
headers = instrument("OPTIONS", url, headers)
HTTPoison.options!(url, headers, options)
end
end
end