Packages

Sometimes you just wanna look at your spans 🤷🏻‍♂️

Current section

Files

Jump to
opentelemetry_log_exporter lib trace_builder.ex
Raw

lib/trace_builder.ex

defmodule OpenTelemetryLogExporter.TraceBuilder do
def build([]), do: []
def build(spans) do
groups = Enum.group_by(spans, & &1.parent_span_id)
root_spans = top_level_spans(groups)
Enum.map(root_spans, &associate_children(&1, 0, groups))
end
defp top_level_spans(groups) do
groups[nil] || groups |> Map.values() |> List.flatten()
end
defp associate_children(span, indent_level, groups) do
children = groups[span.span_id] || []
associated_children = Enum.map(children, &associate_children(&1, indent_level + 1, groups))
Map.merge(span, %{indent_level: indent_level, children: associated_children})
end
end