Packages
sentry
11.0.0
13.3.0
13.2.0
13.1.0
13.0.1
13.0.0
12.0.3
12.0.2
12.0.1
12.0.0
11.0.4
11.0.3
11.0.2
11.0.1
11.0.0
10.10.0
10.9.0
10.8.1
10.8.0
10.7.1
10.7.0
10.6.2
10.6.1
10.6.0
10.5.0
10.4.0
10.3.0
10.2.1
10.2.0
10.2.0-rc.2
10.2.0-rc.1
10.1.0
10.0.3
10.0.2
10.0.1
10.0.0
9.1.0
9.0.0
8.1.0
8.0.6
8.0.5
8.0.4
8.0.3
8.0.2
8.0.1
8.0.0
8.0.0-rc.2
8.0.0-rc.1
8.0.0-rc.0
retired
7.2.5
7.2.4
7.2.3
7.2.2
7.2.1
7.2.0
7.1.0
7.0.6
7.0.5
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.4.2
6.4.1
6.4.0
6.3.0
6.2.1
6.2.0
6.1.0
6.0.5
6.0.4
6.0.3
6.0.2
6.0.1
6.0.0
5.0.1
5.0.0
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.2.0
2.1.0
2.0.2
2.0.1
2.0.0
1.1.2
1.1.1
1.1.0
1.0.0
0.3.2
0.3.1
0.3.0
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
The Official Elixir client for Sentry
Current section
Files
Jump to
Current section
Files
lib/sentry/integrations/telemetry.ex
defmodule Sentry.Integrations.Telemetry do
@moduledoc """
Sentry integration for Telemetry.
*Available since v10.10.0*.
"""
@moduledoc since: "10.10.0"
@failure_event [:telemetry, :handler, :failure]
@doc false
@spec attach() :: :ok
def attach do
_ =
:telemetry.attach(
"#{inspect(__MODULE__)}-telemetry-failures",
@failure_event,
&__MODULE__.handle_event/4,
:no_config
)
:ok
end
@doc false
@spec handle_event(
:telemetry.event_name(),
:telemetry.event_measurements(),
:telemetry.event_metadata(),
:telemetry.handler_config()
) :: :ok
def handle_event(@failure_event, _measurements, %{} = metadata, :no_config) do
stacktrace = metadata[:stacktrace] || []
handler_id = stringified_handler_id(metadata[:handler_id])
options = [
stacktrace: stacktrace,
tags: %{
telemetry_handler_id: handler_id,
event_name: inspect(metadata[:event_name])
}
]
_ =
case {metadata[:kind], metadata[:reason]} do
{:error, reason} ->
exception = Exception.normalize(:error, reason, stacktrace)
Sentry.capture_exception(exception, options)
{kind, reason} ->
options =
Keyword.merge(options,
extra: %{kind: inspect(kind), reason: inspect(reason)},
interpolation_parameters: [handler_id]
)
Sentry.capture_message("Telemetry handler %s failed", options)
end
:ok
end
defp stringified_handler_id(handler_id) when is_binary(handler_id), do: handler_id
defp stringified_handler_id(handler_id), do: inspect(handler_id)
end