Skip to content

Instantly share code, notes, and snippets.

@denvera
Created March 6, 2018 10:05
Show Gist options
  • Save denvera/88bf236fc6b930ed82f9dde112668855 to your computer and use it in GitHub Desktop.
Save denvera/88bf236fc6b930ed82f9dde112668855 to your computer and use it in GitHub Desktop.
Parse out death count and queue from Elixir AMQP headers
# headers from headers: key of meta parameter to consumer function
# Returns {death_count, last_queue_name}
def get_death_info([headers: headers] = h) do
x_death_tables = Enum.find(headers, fn e ->
elem(e, 0) == "x-death"
end) |> elem(2)
{deaths, last_queue} = Enum.reduce(x_death_tables, {0, ""}, fn {:table, attrs} = e, acc ->
IO.puts(inspect(attrs))
in_acc = Enum.reduce(attrs, {0, ""}, fn e, acc ->
case e do
{"count", _, n} -> {n + elem(acc,0), elem(acc, 1)}
{"queue", _, queue} -> {elem(acc, 0), queue}
_ -> acc
end
end)
{elem(acc, 0) + elem(in_acc, 0), elem(in_acc, 1)}
end)
{deaths, last_queue}
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment