yeet

Generates standard messages for Dead Letter Queue


License
Apache-2.0

Documentation

Master Hex.pm Version

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}