Packages
appsignal_phoenix
2.0.4
2.8.1
2.8.0
2.7.0
2.6.0
2.5.1
2.5.0
2.4.1
2.4.0
2.3.9
2.3.8
2.3.7
2.3.6
2.3.5
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.1
2.2.0
2.1.3
2.1.2
2.1.1
2.1.0
2.0.14
2.0.13
2.0.12
2.0.11
2.0.10
2.0.9
2.0.8
retired
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-beta.6
2.0.0-beta.5
2.0.0-beta.4
2.0.0-beta.3
2.0.0-beta.2
2.0.0-beta.1
2.0.0-alpha.4
2.0.0-alpha.3
2.0.0-alpha.2
2.0.0-alpha.1
AppSignal's Phoenix instrumentation instruments calls to Phoenix applications to gain performance insights and error reporting
Current section
Files
Jump to
Current section
Files
lib/appsignal_phoenix/event_handler.ex
defmodule Appsignal.Phoenix.EventHandler do
@tracer Application.get_env(:appsignal, :appsignal_tracer, Appsignal.Tracer)
@span Application.get_env(:appsignal, :appsignal_span, Appsignal.Span)
@moduledoc false
require Logger
def attach do
handlers = %{
[:phoenix, :endpoint, :start] => &phoenix_endpoint_start/4,
[:phoenix, :endpoint, :stop] => &phoenix_endpoint_stop/4
}
for {event, fun} <- handlers do
case :telemetry.attach({__MODULE__, event}, event, fun, :ok) do
:ok ->
Logger.debug("Appsignal.Phoenix.EventHandler attached to #{inspect(event)}")
:ok
{:error, _} = error ->
Logger.warn(
"Appsignal.Phoenix.EventHandler not attached to #{inspect(event)}: #{inspect(error)}"
)
error
end
end
end
def phoenix_endpoint_start(
_event,
_measurements,
%{conn: %Plug.Conn{private: %{phoenix_endpoint: endpoint}}},
_config
) do
parent = @tracer.current_span()
"http_request"
|> @tracer.create_span(parent)
|> @span.set_name("#{module_name(endpoint)}.call/2")
|> @span.set_attribute("appsignal:category", "call.phoenix_endpoint")
end
defp phoenix_endpoint_stop(_event, _measurements, _metadata, _config) do
@tracer.close_span(@tracer.current_span())
end
defp module_name("Elixir." <> module), do: module
defp module_name(module) when is_binary(module), do: module
defp module_name(module), do: module |> to_string() |> module_name()
end