YEET
Generates standard messages for Dead Letter Queue
Installation
If available in Hex, the package can be installed
by adding yeet
to your list of dependencies in mix.exs
:
def deps do
[
{:yeet, "~> 1.0.5"}
]
end
Usage
Yeet.format_message(app_name, original_message, options \\ [])
Options:
- stacktrace: generated by the language
- exit_code: Often there are errors/exceptions inside exits. Exits are often wrapped by the caller and provide stacktraces too.
- error: decided by app for error tracing
- reason: human useful description of error
- timestamp: time marker, defaults to now
Example Output Message Shape
%{
app: "forklift",
original_message: "{\"topic\": "\streaming-raw\", ...}",
stacktrace: " :erlang./(1, 0)",
exit_code: "%RuntimeError{message: \"Error\"}",
error: "FORKLIFT-PARSE"
reason: "Failed to parse message",
timestamp: #DateTime<2018-09-11 11:11:00Z>
}
Example generation snippets
Stacktrace
iex(1)> System.stacktrace
[
{:erl_anno, :anno_info, [{1, 18, 1}], [file: 'erl_anno.erl', line: 375]},
{IEx.Evaluator, :loop, 1, [file: 'lib/iex/evaluator.ex', line: 103]}
...
...
]
iex(2)> Process.info(self(), :current_stacktrace)
{:current_stacktrace,
[
{Process, :info, 2, [file: 'lib/process.ex', line: 767]},
{:erl_eval, :do_apply, 6, [file: 'erl_eval.erl', line: 680]},
{:elixir, :eval_forms, 4, [file: 'src/elixir.erl', line: 258]},
{IEx.Evaluator, :handle_eval, 5, [file: 'lib/iex/evaluator.ex', line: 257]},
{IEx.Evaluator, :do_eval, 3, [file: 'lib/iex/evaluator.ex', line: 237]},
{IEx.Evaluator, :eval, 3, [file: 'lib/iex/evaluator.ex', line: 215]},
{IEx.Evaluator, :loop, 1, [file: 'lib/iex/evaluator.ex', line: 103]}
]}
Exit Codes
exit_code =
try do
raise "Error"
rescue
e -> e
end
Timestamp
iex(3)> DateTime.from_iso8601("2018-09-11 11:11:00Z")
{:ok, #DateTime<2018-09-11 11:11:00Z>, 0}