Packages
new_relic_agent
1.26.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/reporter.ex
defmodule NewRelic.Transaction.Reporter do
alias NewRelic.Transaction
# This GenServer collects and reports Transaction related data
# - Transaction Events
# - Transaction Metrics
# - Span Events
# - Transaction Errors
# - Transaction Traces
# - Custom Attributes
@moduledoc false
def add_attributes(attrs) when is_list(attrs) do
attrs
|> NewRelic.Util.deep_flatten()
|> NewRelic.Util.coerce_attributes()
|> Transaction.Sidecar.add()
end
def incr_attributes(attrs) do
Transaction.Sidecar.incr(attrs)
end
def set_transaction_name(custom_name) when is_binary(custom_name) do
Transaction.Sidecar.add(custom_name: custom_name)
end
def start_transaction(:web) do
Transaction.ErlangTrace.trace()
Transaction.Sidecar.track(:web)
end
def start_transaction(:other) do
unless Transaction.Sidecar.tracking?() do
Transaction.ErlangTrace.trace()
Transaction.Sidecar.track(:other)
end
end
def stop_transaction(:web) do
Transaction.Sidecar.complete()
end
def stop_transaction(:other) do
Transaction.Sidecar.add(end_time_mono: System.monotonic_time())
Transaction.Sidecar.complete()
end
def ignore_transaction() do
Transaction.Sidecar.ignore()
:ok
end
def exclude_from_transaction() do
Transaction.Sidecar.exclude()
:ok
end
def get_transaction() do
%{
sidecar: Transaction.Sidecar.get_sidecar(),
parent:
case NewRelic.DistributedTrace.read_current_span() do
nil -> self()
{label, ref} -> {self(), label, ref}
end
}
end
def connect_to_transaction(tx_ref) do
Transaction.Sidecar.connect(tx_ref)
:ok
end
def disconnect_from_transaction() do
Transaction.Sidecar.disconnect()
:ok
end
def error(error) do
Transaction.Sidecar.add(transaction_error: {:error, error})
end
def fail(%{kind: kind, reason: reason, stack: stack}) do
if NewRelic.Config.feature?(:error_collector) do
Transaction.Sidecar.add(
error: true,
error_kind: kind,
error_reason: inspect(reason),
error_stack: inspect(stack)
)
else
Transaction.Sidecar.add(error: true)
end
end
def add_trace_segment(segment) do
Transaction.Sidecar.append(function_segments: segment)
end
def track_metric(metric) do
Transaction.Sidecar.append(transaction_metrics: metric)
end
def track_spawn(parent, child, timestamp) do
Transaction.Sidecar.track_spawn(parent, child, timestamp)
end
end