Current section

Files

Jump to
opencensus_elixir lib opencensus span.ex
Raw

lib/opencensus/span.ex

defmodule Opencensus.Span do
@moduledoc """
Elixir convenience translation of `:opencensus.span`.
Most likely to be of use while writing unit tests, or packages that deal with spans.
Less likely to be of use while writing application code.
"""
alias Opencensus.SpanContext
require Record
@fields Record.extract(:span, from_lib: "opencensus/include/opencensus.hrl")
Record.defrecordp(:span, @fields)
defstruct Keyword.keys(@fields)
@doc "Get a span struct given a record."
@spec from(:opencensus.span()) :: %__MODULE__{}
def from(record) when Record.is_record(record, :span), do: struct!(__MODULE__, span(record))
@doc "Load a span from ETS. Only works until it has been sent."
@spec load(:opencensus.span_ctx() | integer() | :undefined) :: %__MODULE__{} | nil
def load(span_id_or_ctx)
def load(:undefined), do: nil
def load(span_id) when is_integer(span_id) do
case :ets.lookup(:oc_span_tab, span_id) do
[record] -> from(record)
[] -> nil
end
end
def load(span_ctx) when is_tuple(span_ctx) do
span_ctx |> SpanContext.from() |> Map.get(:span_id) |> load()
end
end