Current section

Files

Jump to
dbus lib dbus health.ex
Raw

lib/dbus/health.ex

defmodule Dbus.Health do
alias Dbus.Redis, as: R
alias Dbus.Db, as: DB
alias Dbus.Common, as: C
alias Dbus.Queue, as: Q
def num_total(topic), do: R.q!(["GET", DB.total_id(topic)]) |> C.to_i
def num_processed(topic), do: R.q!(["GET", DB.num_processed_id(topic)]) |> C.to_i
def num_failed(topic), do: R.q!(["GET", DB.num_failed_id(topic)]) |> C.to_i
def processed(topic), do: R.q!(["LRANGE", DB.recent_processed_id(topic), 0, -1]) |> C.deserialize_all
def failed(topic), do: R.q!(["LRANGE", DB.recent_failed_id(topic), 0, -1]) |> C.deserialize_all
def tick(), do: Q.topics |> Enum.map(&tick/1)
def tick(topic), do: _tick(topic, last_total(topic), last_size(topic))
defp _tick(topic, old_total, old_size) do
new_total = num_total(topic)
new_size = Q.size(topic)
pub = new_total - old_total
sub = pub - (new_size - old_size)
R.q!(["RPUSH", DB.tock_id(topic), %{size: new_size, pub: pub, sub: sub} |> C.serialize])
R.q!(["SET", DB.last_total_id(topic), new_total])
R.q!(["SET", DB.last_size_id(topic), new_size])
end
def tock(), do: Q.topics |> Enum.map(&({&1, tock(&1)})) |> Enum.into(%{})
def tock(topic), do: R.q!(["LRANGE", DB.tock_id(topic), 0, -1]) |> C.deserialize_all
defp last_total(topic), do: R.q!(["GET", DB.last_total_id(topic)]) |> C.to_i
defp last_size(topic), do: R.q!(["GET", DB.last_size_id(topic)]) |> C.to_i
end