Packages
new_relic_agent
1.0.5
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/span/event.ex
defmodule NewRelic.Span.Event do
defstruct type: "Span",
trace_id: nil,
# Distributed Trace ID
# = trace_id from Transaction
guid: nil,
# Segment Identifier:
parent_id: nil,
# Segment's Parent's GUID =
# id of incoming DT payload
# OR `guid` of parent segment
transaction_id: nil,
# Transaction's guid
sampled: nil,
priority: nil,
timestamp: nil,
# Segment start in unix timestamp milliseconds
duration: nil,
# Segment elapsed in seconds
name: nil,
category: nil,
# http | datastore | generic
entry_point: false,
# Included if span is First segment
category_attributes: %{}
@moduledoc false
def format_events(spans) do
Enum.map(spans, &format_event/1)
end
def format_event(%__MODULE__{} = span) do
intrinsics =
%{
type: span.type,
traceId: span.trace_id,
guid: span.guid,
parentId: span.parent_id,
transactionId: span.transaction_id,
sampled: span.sampled,
priority: span.priority,
timestamp: span.timestamp,
duration: span.duration,
name: span.name,
category: span.category
}
|> merge_category_attributes(span.category_attributes)
intrinsics =
case span.entry_point do
true -> Map.merge(intrinsics, %{"nr.entryPoint": true})
false -> intrinsics
end
[
intrinsics,
_user = %{},
_agent = %{}
]
end
def merge_category_attributes(%{category: "http"} = span, category_attributes) do
{category, custom} = Map.split(category_attributes, [:url, :method, :component])
span
|> Map.merge(%{
"http.url": category[:url] || "url",
"http.method": category[:method] || "method",
component: category[:component] || "component",
"span.kind": "client"
})
|> Map.merge(custom)
end
def merge_category_attributes(%{category: "datastore"} = span, category_attributes) do
{category, custom} =
Map.split(category_attributes, [:statement, :instance, :address, :hostname, :component])
span
|> Map.merge(%{
"db.statement": category[:statement] || "statement",
"db.instance": category[:instance] || "instance",
"peer.address": category[:address] || "address",
"peer.hostname": category[:hostname] || "hostname",
component: category[:component] || "component",
"span.kind": "client"
})
|> Map.merge(custom)
end
def merge_category_attributes(span, category_attributes),
do: Map.merge(span, category_attributes)
end