Packages
new_relic_agent
1.20.0
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/transaction/trace.ex
defmodule NewRelic.Transaction.Trace do
defstruct start_time: nil,
metric_name: nil,
request_url: nil,
attributes: %{},
segments: [],
duration: nil,
cat_guid: "",
reserved_for_future_use: nil,
force_persist_flag: false,
xray_session_id: nil,
synthetics_resource_id: ""
@moduledoc false
defmodule Segment do
defstruct relative_start_time: nil,
relative_end_time: nil,
metric_name: nil,
attributes: %{},
children: [],
class_name: nil,
method_name: nil,
parent_id: nil,
id: nil,
pid: nil
@moduledoc false
end
@unused_map %{}
def format_traces(traces) do
Enum.map(traces, &format_trace/1)
end
def format_trace(%__MODULE__{} = trace) do
trace_segments = format_segments(trace)
trace_details = [trace.start_time, @unused_map, @unused_map, trace_segments, trace.attributes]
[
trace.start_time,
trace.duration,
trace.metric_name,
trace.request_url,
trace_details,
trace.cat_guid,
trace.reserved_for_future_use,
trace.force_persist_flag,
trace.xray_session_id,
trace.synthetics_resource_id
]
end
def format_segments(%{
segments: [first_segment | _] = segments,
duration: duration,
metric_name: metric_name
}) do
[
0,
duration,
"ROOT",
first_segment.attributes,
[
[
0,
duration,
metric_name,
first_segment.attributes,
Enum.map(segments, &format_child_segments/1)
]
]
]
end
def format_child_segments(%Segment{} = segment) do
[
segment.relative_start_time,
segment.relative_end_time,
segment.metric_name,
segment.attributes,
Enum.map(segment.children, &format_child_segments/1),
segment.class_name,
segment.method_name
]
end
end