Current section
Files
Jump to
Current section
Files
lib/web/queues_plug.ex
defmodule RogerUI.Web.QueuesPlug do
@moduledoc """
Handles endpoints for processing queues API calls
Queues are managed in the UI trough API calls. These queues are presented, filtred, paused, resume, purged, among others operations
by handlers herein described with Plug
"""
require Logger
alias RogerUI.Web.QueuesPlug.Router
def init(opts), do: opts
def call(conn, opts) do
Router.call(conn, Router.init(opts))
end
defmodule Router do
@moduledoc """
Plug Router extension for QueuesPlug
"""
@roger_api Application.get_env(:roger_ui, :roger_api, RogerUI.RogerApi)
import Plug.Conn
alias RogerUI.Web.Helpers.{Page, Response, Request, Filter}
alias RogerUI.Queues
use Plug.Router
plug(:match)
plug(:dispatch)
defp filtered_queues(filter) do
@roger_api.partitions()
|> Queues.nodes_to_queues()
|> Filter.call("qualified_queue_name", filter)
end
defp selected_queues([], filter), do: filtered_queues(filter)
defp selected_queues(queues, _), do: queues
defp action_over_queues(conn, action) do
conn = Request.fill_params(conn)
queues = Map.get(conn.params, "queues", [])
filter = Map.get(conn.params, "filter", "")
queues
|> selected_queues(filter)
|> Enum.each(fn q ->
action.(q["partition_name"], Queues.normalize_name(q["queue_name"]))
end)
Response.no_content(conn, 207)
end
get "/:page_size/:page_number" do
conn = Request.fill_params(conn)
page_size = String.to_integer(page_size)
page_number = String.to_integer(page_number)
filter = Map.get(conn.params, "filter", "")
queues =
filter
|> filtered_queues()
|> Page.extract("queues", page_size, page_number)
Response.json(conn, queues)
end
options("/pause", do: Response.no_content(conn, 207))
put("/pause", do: action_over_queues(conn, &@roger_api.queue_pause/2))
options("/resume", do: Response.no_content(conn, 207))
put("/resume", do: action_over_queues(conn, &@roger_api.queue_resume/2))
options("/purge", do: Response.no_content(conn, 207))
put("/purge", do: action_over_queues(conn, &@roger_api.purge_queue/2))
end
end