Packages
raygun
0.1.6
0.4.0
0.3.2
0.3.1
0.3.0
0.2.0
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.45
0.0.44
0.0.43
0.0.42
0.0.41
0.0.40
0.0.39
0.0.38
0.0.37
0.0.36
0.0.35
0.0.34
0.0.33
0.0.32
0.0.31
0.0.30
0.0.29
0.0.28
0.0.27
0.0.26
0.0.25
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Send errors in your application to Raygun. Raygun captures all your application errors in one place. It can be used as a Plug, via Logger and/or programmatically.
Current section
Files
Jump to
Current section
Files
lib/raygun/plug.ex
defmodule Raygun.Plug.State do
@moduledoc """
This wraps an agent used at compile time to save a function passed in by the
router so it can be used before compiling the remaining macros.
"""
@mix_env Atom.to_string(Mix.env)
def start_link do
Agent.start_link(fn -> nil end, name: __MODULE__)
end
def set(value) do
Agent.update(__MODULE__, fn (_x) -> value end)
end
def get do
Agent.get(__MODULE__, fn(x) -> x end)
end
end
defmodule Raygun.Plug do
@moduledoc """
This plug is designed to wrap calls in a router (commonly in Phoenix) so that
any exceptions will be sent to Raygun.
"""
defmacro __using__(opts) do
Raygun.Plug.State.start_link
Raygun.Plug.State.set(opts)
quote location: :keep do
@before_compile Raygun.Plug
end
end
def get_user(conn, env) do
if env do
Keyword.get(env, :user).(conn)
end
end
@doc """
Whenever an error occurs, capture the stacktrace and exception to send to Raygun.
"""
defmacro __before_compile__(_env) do
quote location: :keep do
defoverridable [call: 2]
@app_using_raygun_version Mix.Project.config[:version]
def call(conn, opts) do
try do
super(conn, opts)
rescue
exception ->
stacktrace = System.stacktrace
Raygun.report_plug(conn, stacktrace, exception,
vsn: Raygun.Util.get_key(:raygun, :vsn) |> List.to_string,
version: @app_using_raygun_version,
user: Raygun.Plug.get_user(conn, unquote(Raygun.Plug.State.get)))
reraise exception, stacktrace
end
end
end
end
end