View Source OpentelemetryProcessPropagator.Task (Opentelemetry Process Propagator v0.3.0)

OpentelemetryProcessPropagator.Task provides a set of extensions to the Task module to reduce some boilerplate in propagating OpenTelemetry contexts across process boundaries. Since these are extensions rather than a replacement of Elixir's module, this library can be aliased into a file without concern for creating spans where you do not want them.

Each Task function is replicated with two variants: *_with_span and *_with_linked_span. Each of these variations has a specific use case. The original implementation for each function automatically propagates the current context.

  • * - propagates the current context
  • *_with_span - propagates the current context and starts a new child span.
  • *_with_linked_span - propagates the current context and starts a new linked span.

Module Redefinement

This module does not redefine the Task module, instead providing a wrapper of the module, so this functionality will not globally modify the default behavior of the Task module.

Usage

defmodule MyApp do
  require OpenTelemetry.Tracer
  alias OpentelemetryProcessPropagator.Task

  def traced_task_with_existing_span do
    Task.async(fn ->
      :ok
    end)
    |> Task.await()
  end

  def traced_task_with_new_span do
    Task.async_with_span(:span_name, %{attributes: %{a: "b"}}, fn ->
      Tracer.set_attribute(:c, "d")
      :ok
    end)
    |> Task.await()
  end

  def traced_task_with_new_linked_span do
    Task.async_with_linked_span(:span_name, %{attributes: %{a: "b"}}, fn ->
      Tracer.set_attribute(:c, "d")
      :ok
    end)
    |> Task.await()
  end
end

Summary

Functions

Starts a task with the current OpenTelemetry.Ctx.t/0 that can be awaited on.

Starts a task with the current OpenTelemetry.Ctx.t/0 that can be awaited on.

Returns a stream that runs the given function fun concurrently on each element in enumerable with the current OpenTelemetry.Ctx.t/0 attached.

Returns a stream where the given function (module and function) is mapped concurrently on each element in enumerable with the current OpenTelemetry.Ctx.t/0 attached.

Returns a stream that runs the given function fun concurrently on each element in enumerable with a new linked span.

Returns a stream where the given function (module and function) is mapped concurrently on each element in enumerable with a new linked span.

Returns a stream that runs the given function fun concurrently on each element in enumerable with a new child span.

Returns a stream where the given function (module and function) is mapped concurrently on each element in enumerable with a new child span.

Starts a task with a new linked span that can be awaited on.

Starts a task with a new linked span that can be awaited on.

Starts a task with a new child span that can be awaited on.

Starts a task with a new child span that can be awaited on.

Starts a task with the current OpenTelemetry.Ctx.t/0.

Starts a task as part of a supervision tree with the given fun with the current OpenTelemetry.Ctx.t/0 attached.

Starts a task as part of a supervision tree with the given module, function, and args with the current OpenTelemetry.Ctx.t/0 attached.

Starts a task as part of a supervision tree with the given fun in a new linked span.

Starts a task as part of a supervision tree with the given module, function, and args in a new linked span.

Starts a task as part of a supervision tree with the given fun in a new child span.

Starts a task as part of a supervision tree with the given module, function, and args in a new child span.

Starts a task with a new linked span.

Starts a task with a new child span.

Functions

@spec async((() -> any())) :: Task.t()

Starts a task with the current OpenTelemetry.Ctx.t/0 that can be awaited on.

See Task.async/1 for more information.

Link to this function

async(module, function_name, args)

View Source
@spec async(module(), atom(), [term()]) :: Task.t()

Starts a task with the current OpenTelemetry.Ctx.t/0 that can be awaited on.

See Task.async/3 for more information.

Link to this function

async_stream(enumerable, fun, opts \\ [])

View Source
@spec async_stream(Enumerable.t(), (term() -> term()), keyword()) :: Enumerable.t()

Returns a stream that runs the given function fun concurrently on each element in enumerable with the current OpenTelemetry.Ctx.t/0 attached.

See Task.async_stream/3 for more information.

Link to this function

async_stream(enumerable, module, function_name, args, opts \\ [])

View Source
@spec async_stream(
  Enumerable.t(),
  module(),
  atom(),
  [term()],
  keyword()
) :: Enumerable.t()

Returns a stream where the given function (module and function) is mapped concurrently on each element in enumerable with the current OpenTelemetry.Ctx.t/0 attached.

See Task.async_stream/5 for more information.

Link to this function

async_stream_with_linked_span(enumerable, name, start_opts, fun, opts \\ [])

View Source
@spec async_stream_with_linked_span(
  Enumerable.t(),
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  (term() -> term()),
  keyword()
) :: Enumerable.t()

Returns a stream that runs the given function fun concurrently on each element in enumerable with a new linked span.

See Task.async_stream/3 for more information.

Link to this function

async_stream_with_linked_span(enumerable, name, start_opts, module, function_name, args, opts \\ [])

View Source
@spec async_stream_with_linked_span(
  Enumerable.t(),
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  module(),
  atom(),
  [term()],
  keyword()
) :: Enumerable.t()

Returns a stream where the given function (module and function) is mapped concurrently on each element in enumerable with a new linked span.

See Task.async_stream/5 for more information.

Link to this function

async_stream_with_span(enumerable, name, start_opts, fun, opts \\ [])

View Source
@spec async_stream_with_span(
  Enumerable.t(),
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  (term() -> term()),
  keyword()
) :: Enumerable.t()

Returns a stream that runs the given function fun concurrently on each element in enumerable with a new child span.

See Task.async_stream/3 for more information.

Link to this function

async_stream_with_span(enumerable, name, start_opts, module, function_name, args, opts \\ [])

View Source
@spec async_stream_with_span(
  Enumerable.t(),
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  module(),
  atom(),
  [term()],
  keyword()
) :: Enumerable.t()

Returns a stream where the given function (module and function) is mapped concurrently on each element in enumerable with a new child span.

See Task.async_stream/5 for more information.

Link to this function

async_with_linked_span(name, start_opts, fun)

View Source
@spec async_with_linked_span(
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  (() -> any())
) :: Task.t()

Starts a task with a new linked span that can be awaited on.

See Task.async/1 for more information.

Link to this function

async_with_linked_span(name, start_opts, module, function_name, args)

View Source
@spec async_with_linked_span(
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  module(),
  atom(),
  [term()]
) :: Task.t()

Starts a task with a new linked span that can be awaited on.

See Task.async/3 for more information.

Link to this function

async_with_span(name, start_opts, fun)

View Source
@spec async_with_span(
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  (() -> any())
) :: Task.t()

Starts a task with a new child span that can be awaited on.

See Task.async/1 for more information.

Link to this function

async_with_span(name, start_opts, module, function_name, args)

View Source
@spec async_with_span(
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  module(),
  atom(),
  [term()]
) :: Task.t()

Starts a task with a new child span that can be awaited on.

See Task.async/3 for more information.

See Task.await/1.

See Task.await/2.

See Task.await_many/1.

Link to this function

await_many(tasks, timeout)

View Source

See Task.await_many/2.

See Task.child_spec/1.

See Task.completed/1.

See Task.ignore/1.

See Task.shutdown/1.

See Task.shutdown/2.

@spec start((() -> any())) :: {:ok, pid()}

Starts a task with the current OpenTelemetry.Ctx.t/0.

See Task.start/1 for more information.

Link to this function

start(module, function_name, args)

View Source
@spec start(module(), atom(), [term()]) :: {:ok, pid()}

Starts a task with the current OpenTelemetry.Ctx.t/0.

See Task.start/3 for more information.

@spec start_link((() -> any())) :: {:ok, pid()}

Starts a task as part of a supervision tree with the given fun with the current OpenTelemetry.Ctx.t/0 attached.

See Task.start_link/1 for more information.

Link to this function

start_link(module, function_name, args)

View Source
@spec start_link(module(), atom(), [term()]) :: {:ok, pid()}

Starts a task as part of a supervision tree with the given module, function, and args with the current OpenTelemetry.Ctx.t/0 attached.

See Task.start_link/3 for more information.

Link to this function

start_with_linked_span(name, start_opts, fun)

View Source
@spec start_with_linked_span(
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  (() -> any())
) :: {:ok, pid()}

Starts a task with a new linked span.

See Task.start/1 for more information.

Link to this function

start_with_linked_span(name, start_opts, module, function_name, args)

View Source
@spec start_with_linked_span(
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  module(),
  atom(),
  [term()]
) :: {:ok, pid()}

Starts a task with a new linked span.

See Task.start/3 for more information.

Link to this function

start_with_span(name, start_opts, fun)

View Source
@spec start_with_span(
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  (() -> any())
) :: {:ok, pid()}

Starts a task with a new child span.

See Task.start/1 for more information.

Link to this function

start_with_span(name, start_opts, module, function_name, args)

View Source
@spec start_with_span(
  OpenTelemetry.span_name(),
  OpenTelemetry.Span.start_opts(),
  module(),
  atom(),
  [term()]
) :: {:ok, pid()}

Starts a task with a new child span.

See Task.start/3 for more information.

See Task.yield/1.

See Task.yield/2.

See Task.yield_many/1.

Link to this function

yield_many(tasks, timeout)

View Source

See Task.yield_many/2.