Packages
new_relic_agent
1.40.2
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.ex
defmodule NewRelic.Instrumented.Task do
@moduledoc """
Provides a pre-instrumented convienince module to connect
non-linked `Task` processes to the Transaction that called them.
You may call these functions directly, or `alias` the module
and continue to use `Task` as normal.
Example usage:
```elixir
alias NewRelic.Instrumented.Task
Task.async_stream([1,2], fn n -> do_work(n) end)
```
"""
import NewRelic.Instrumented.Task.Wrappers
defdelegate async(fun),
to: Task
defdelegate async(module, function_name, args),
to: Task
defdelegate await(task, timeout \\ 5000),
to: Task
if Code.ensure_loaded?(Task) && Kernel.function_exported?(Task, :await_many, 2) do
defdelegate await_many(tasks, timeout \\ 5000),
to: Task
end
defdelegate child_spec(arg),
to: Task
defdelegate shutdown(task, timeout \\ 5000),
to: Task
defdelegate start_link(fun),
to: Task
defdelegate start_link(module, function_name, args),
to: Task
defdelegate yield(task, timeout \\ 5000),
to: Task
defdelegate yield_many(task, timeout \\ 5000),
to: Task
# These functions _don't_ link their Task so we connect them explicitly
def start(fun) do
Task.start(instrument(fun))
end
def start(module, function_name, args) do
{module, function_name, args} = instrument({module, function_name, args})
Task.start(module, function_name, args)
end
def async_stream(enumerable, fun, options \\ []) do
Task.async_stream(enumerable, instrument(fun), options)
end
def async_stream(enumerable, module, function_name, args, options \\ []) do
{module, function_name, args} = instrument({module, function_name, args})
Task.async_stream(enumerable, module, function_name, args, options)
end
end