Packages
new_relic_agent
1.27.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/instrumented/task/supervisor.ex
defmodule NewRelic.Instrumented.Task.Supervisor do
@moduledoc """
Provides a pre-instrumented convienince module to connect
non-linked `Task.Supervisor` processes to the Transaction
that called them.
You may call these functions directly, or `alias` the
`NewRelic.Instrumented.Task` module and continue to use
`Task` as normal.
Example usage:
```elixir
alias NewRelic.Instrumented.Task
Task.Supervisor.async_nolink(
MySupervisor,
[1,2],
fn n -> do_work(n) end
)
```
"""
import NewRelic.Instrumented.Task.Wrappers
defdelegate async(supervisor, fun, options \\ []),
to: Task.Supervisor
defdelegate async(supervisor, module, fun, args, options \\ []),
to: Task.Supervisor
defdelegate children(supervisor),
to: Task.Supervisor
defdelegate start_link(options),
to: Task.Supervisor
defdelegate terminate_child(supervisor, pid),
to: Task.Supervisor
# These functions _don't_ link their Task so we connect them explicitly
def async_stream(supervisor, enumerable, fun, options \\ []) do
Task.Supervisor.async_stream(supervisor, enumerable, instrument(fun), options)
end
def async_stream(supervisor, enumerable, module, function, args, options \\ []) do
{module, function, args} = instrument({module, function, args})
Task.Supervisor.async_stream(supervisor, enumerable, module, function, args, options)
end
def async_nolink(supervisor, fun, options \\ []) do
Task.Supervisor.async_nolink(supervisor, instrument(fun), options)
end
def async_nolink(supervisor, module, fun, args, options \\ []) do
{module, fun, args} = instrument({module, fun, args})
Task.Supervisor.async_nolink(supervisor, module, fun, args, options)
end
def async_stream_nolink(supervisor, enumerable, fun, options \\ []) do
Task.Supervisor.async_stream_nolink(supervisor, enumerable, instrument(fun), options)
end
def async_stream_nolink(supervisor, enumerable, module, function, args, options \\ []) do
{module, function, args} = instrument({module, function, args})
Task.Supervisor.async_stream_nolink(supervisor, enumerable, module, function, args, options)
end
def start_child(supervisor, fun, options \\ []) do
Task.Supervisor.start_child(supervisor, instrument(fun), options)
end
def start_child(supervisor, module, fun, args, options \\ []) do
{module, fun, args} = instrument({module, fun, args})
Task.Supervisor.start_child(supervisor, module, fun, args, options)
end
end