mirror of
https://github.com/plausible/analytics.git
synced 2024-12-26 11:02:52 +03:00
07b714a143
* update Sentry * Sentry.HTTPClient.child_spec is now optional * Sentry.EventFilter is deprecated * update sentry to 10.2.0 * fix dialyzer warnings
73 lines
1.8 KiB
Elixir
73 lines
1.8 KiB
Elixir
defmodule PlausibleWeb.Live.SentryContext do
|
|
@moduledoc """
|
|
This module tries to supply LiveViews with some common Sentry context
|
|
(without it, there is practically none).
|
|
|
|
Use via `use PlausibleWeb.Live.SentryContext` in your LiveView module,
|
|
or preferably via `use PlausibleWeb, :live_view`.
|
|
|
|
In case you have multiple LiveViews, there is `use PlausibleWeb, live_view: :no_sentry_context`
|
|
exposed that allows you to skip using this module. This is because
|
|
only the root LiveView has access to `connect_info` and an exception will be
|
|
thrown otherwise.
|
|
"""
|
|
|
|
defmacro __using__(_) do
|
|
quote do
|
|
on_mount PlausibleWeb.Live.SentryContext
|
|
end
|
|
end
|
|
|
|
def on_mount(:default, _params, session, socket) do
|
|
if Phoenix.LiveView.connected?(socket) do
|
|
peer = Phoenix.LiveView.get_connect_info(socket, :peer_data)
|
|
uri = Phoenix.LiveView.get_connect_info(socket, :uri)
|
|
|
|
user_agent =
|
|
Phoenix.LiveView.get_connect_info(socket, :user_agent)
|
|
|
|
request_context =
|
|
%{
|
|
url: socket.host_uri,
|
|
env: %{
|
|
"REMOTE_ADDR" => get_ip(peer),
|
|
"REMOTE_PORT" => peer && peer.port,
|
|
"SEVER_NAME" => uri && uri.host
|
|
}
|
|
}
|
|
|
|
request_context =
|
|
if user_agent do
|
|
Map.merge(request_context, %{
|
|
headers: %{
|
|
"User-Agent" => user_agent
|
|
}
|
|
})
|
|
else
|
|
request_context
|
|
end
|
|
|
|
Sentry.Context.set_request_context(request_context)
|
|
|
|
user_id = session["current_user_id"]
|
|
|
|
if user_id do
|
|
Sentry.Context.set_user_context(%{
|
|
id: user_id
|
|
})
|
|
end
|
|
end
|
|
|
|
{:cont, socket}
|
|
end
|
|
|
|
defp get_ip(%{address: addr}) do
|
|
case :inet.ntoa(addr) do
|
|
{:error, _} -> ""
|
|
address -> to_string(address)
|
|
end
|
|
end
|
|
|
|
defp get_ip(_), do: ""
|
|
end
|