Packages

A simple Airbrake/Errbit library for Elixir/Phoenix projects. Currently only supports error/exception notifications via a Plug.

Current section

Files

Jump to
airbrakify lib airbrakify parser.ex
Raw

lib/airbrakify/parser.ex

defmodule Airbrakify.Parser do
def parse_error(conn, %{kind: _kind, reason: reason, stack: stack}) do
%{type: error_type, message: error_message} = parse_reason(reason)
%{
errors: [parse_stacktrace(error_type, error_message, stack)],
context: %{
notifier: %{
name: "Airbrakify",
version: app_version,
url: "https://github.com/Diamond/airbrakify"
},
environment: Mix.env,
language: "Elixir #{System.version}",
rootDirectory: System.cwd
},
environment: environment_variables,
session: conn.private[:plug_session],
params: conn.params
}
end
def parse_stacktrace(type, message, stack) do
%{
type: type,
message: message,
backtrace: Enum.map(stack, fn line ->
{module, function, arity, [file: file, line: line]} = line
%{file: to_string(file), line: line, function: "(#{module}) #{function}/#{arity}"}
end)
}
end
def parse_reason(reason) do
case reason do
{struct, data} ->
%{type: inspect(struct.__struct__), message: inspect(struct) <> "//" <> inspect(data)}
struct ->
%{type: inspect(struct.__struct__), message: inspect(struct)}
end
end
def app_version do
case :application.get_key(:airbrakify, :vsn) do
{:ok, version} -> version
_ -> "n/a"
end
end
def environment_variables do
System.get_env
end
end