Current section

Files

Jump to
roger_ui lib web partitions_plug.ex
Raw

lib/web/partitions_plug.ex

defmodule RogerUI.Web.PartitionsPlug do
@moduledoc """
Handles endpoints for processing partition 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.PartitionsPlug.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 PartitionsPlug
"""
@roger_api Application.get_env(:roger_ui, :roger_api, RogerUI.RogerApi)
import Plug.Conn
alias RogerUI.Web.Helpers.{Page, Response, Request, Filter}
alias RogerUI.Partitions
use Plug.Router
plug(:match)
plug(:dispatch)
get "/:page_size/:page_number" do
conn = Request.fill_params(conn)
params = Request.normalize_params(conn)
partitions =
@roger_api.partitions()
|> Partitions.normalize()
|> Enum.sort_by(&Map.get(&1, "partition_name"))
|> Filter.call("partition_name", params.filter)
|> Page.extract("partitions", params.page_size, params.page_number)
Response.json(conn, partitions)
end
options("/", do: Response.no_content(conn, 207))
delete "/" do
conn = Request.fill_params(conn)
params = Request.normalize_params(conn)
params.partitions
|> selected_partitions(params)
|> Enum.each(fn j ->
@roger_api.cancel_partition(j["partition_name"], j["job_id"])
end)
Response.no_content(conn)
end
defp selected_partitions([], params) do
@roger_api.partitions()
|> Enum.sort_by(&Map.get(&1, :id))
|> Filter.call(:module, params.filter)
end
defp selected_partitions(partitions, _), do: partitions
end
end