Packages
new_relic_agent
1.8.0
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/transaction.ex
defmodule NewRelic.Transaction do
@moduledoc """
Transaction Reporting
To enable Transaction reporting, you must instrument your Plug pipeline with a single line.
The `NewRelic.Transaction` macro injects the required plugs to wire up automatic
Transaction reporting.
Be sure to `use` this as early in your Plug pipeline as possible to ensure the most
accurate response times.
```elixir
defmodule MyApp do
use Plug.Router
use NewRelic.Transaction
# ...
end
```
"""
defmacro __using__(_) do
quote do
plug(NewRelic.Transaction.Plug)
plug(NewRelic.DistributedTrace.Plug)
use NewRelic.Transaction.ErrorHandler
end
end
@doc """
If you send a custom error response in your own `Plug.ErrorHandler`,
you **MUST** manually alert the agent of the error!
```elixir
defmodule MyPlug do
# ...
use Plug.ErrorHandler
def handle_errors(conn, error) do
NewRelic.Transaction.handle_errors(conn, error)
send_resp(conn, 500, "Oops!")
end
end
```
"""
def handle_errors(conn, error) do
NewRelic.DistributedTrace.Tracker.cleanup(self())
NewRelic.Transaction.Plug.add_stop_attrs(conn)
NewRelic.Transaction.Reporter.fail(error)
NewRelic.Transaction.Reporter.complete()
end
@doc false
def start_transaction(category, name) do
NewRelic.Transaction.Reporter.start_other_transaction(category, name)
NewRelic.DistributedTrace.generate_new_context()
|> NewRelic.DistributedTrace.track_transaction(transport_type: "Other")
end
@doc false
def ignore_transaction() do
NewRelic.Transaction.Reporter.ignore_transaction()
NewRelic.DistributedTrace.Tracker.cleanup(self())
end
end