Skip to content

Commit

Permalink
Add toggle switch per node to unsubscibe from all queues
Browse files Browse the repository at this point in the history
  • Loading branch information
ananthakumaran committed Mar 13, 2022
1 parent 7794d52 commit 164c204
Show file tree
Hide file tree
Showing 6 changed files with 50 additions and 4 deletions.
4 changes: 4 additions & 0 deletions lib/exq_ui/queue.ex
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,10 @@ defmodule ExqUI.Queue do
processes
end

def send_signal(node_id, signal_name) do
Api.send_signal(api(), node_id, signal_name)
end

defp decode_jobs_with_score(jobs) do
Enum.map(jobs, fn {json, score} ->
job_with_score(json, score)
Expand Down
22 changes: 22 additions & 0 deletions lib/exq_ui_web/live/busy_live/index.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,26 @@ defmodule ExqUIWeb.BusyLive.Index do
def mount(_params, _session, socket) do
{:ok, assign(socket, %{nodes: Queue.list_nodes(), jobs: Queue.list_current_jobs()})}
end

@impl true
def handle_event(
"signal",
%{"signal" => %{"name" => "TSTP", "node_id" => node_id}},
socket
) do
:ok = Queue.send_signal(node_id, "TSTP")

nodes =
Enum.map(socket.assigns.nodes, fn node ->
if node.identity == node_id do
%{node | quiet: true}
else
node
end
end)

socket = assign(socket, :nodes, nodes)

{:noreply, socket}
end
end
9 changes: 8 additions & 1 deletion lib/exq_ui_web/live/busy_live/index.html.heex
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,14 @@
<%= for node <- @nodes do %>
<tr>
<td>
<%= node.identity %> <br />
<div class="d-flex align-items-center">
<span class="me-2"><%= node.identity %></span>
<%= form_for :signal, "#", [id: "node-#{node.identity}", phx_change: :signal, class: "mb-0 form-check form-switch form-check-inline"], fn f -> %>
<%= hidden_input(f, :name, value: "TSTP") %>
<%= hidden_input(f, :node_id, value: node.identity) %>
<%= checkbox(f, :quiet, value: !node.quiet, disabled: node.quiet, class: "form-check-input", role: "switch", title: "quiet") %>
<% end %>
</div>
<span><b>Queues: </b><%= Enum.join(node.queues, ", ") %></span>
</td>
<td><%= human_time(node.started_at) %></td>
Expand Down
2 changes: 1 addition & 1 deletion mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ defmodule ExqUI.MixProject do

defp deps do
[
{:exq, ">= 0.9.0"},
{:exq, github: "akira/exq", branch: "master"},
{:phoenix_live_view, "~> 0.16"},
{:phoenix_live_reload, "~> 1.2", only: :dev},
{:jason, "~> 1.0"},
Expand Down
4 changes: 2 additions & 2 deletions mix.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"earmark_parser": {:hex, :earmark_parser, "1.4.18", "e1b2be73eb08a49fb032a0208bf647380682374a725dfb5b9e510def8397f6f2", [:mix], [], "hexpm", "114a0e85ec3cf9e04b811009e73c206394ffecfcc313e0b346de0d557774ee97"},
"elixir_uuid": {:hex, :elixir_uuid, "1.2.1", "dce506597acb7e6b0daeaff52ff6a9043f5919a4c3315abb4143f0b00378c097", [:mix], [], "hexpm", "f7eba2ea6c3555cea09706492716b0d87397b88946e6380898c2889d68585752"},
"ex_doc": {:hex, :ex_doc, "0.26.0", "1922164bac0b18b02f84d6f69cab1b93bc3e870e2ad18d5dacb50a9e06b542a3", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "2775d66e494a9a48355db7867478ffd997864c61c65a47d31c4949459281c78d"},
"exq": {:hex, :exq, "0.16.0", "c17b73960b709885792739c8dede87133174b254ddf3c0c9a0afddfe230a69c5", [:mix], [{:elixir_uuid, ">= 1.2.0", [hex: :elixir_uuid, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:poison, ">= 1.2.0 and < 5.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:redix, ">= 0.9.0", [hex: :redix, repo: "hexpm", optional: false]}], "hexpm", "9db09532a9cab38142d01eef4621e7a8367e293d89da54f3d15fd820f26313d0"},
"exq": {:git, "https://github.com/akira/exq.git", "f80d8c9c7143e80b99091709b40efde4d90ef1e6", [branch: "master"]},
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
"floki": {:hex, :floki, "0.31.0", "f05ee8a8e6a3ced4e62beeb2c79a63bc8e12ab98fbaaf6e6a3d9b76b1278e23f", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "b05afa372f5c345a5bf240ac25ea1f0f3d5fcfd7490ac0beeb4a203f9444891e"},
"gettext": {:hex, :gettext, "0.18.2", "7df3ea191bb56c0309c00a783334b288d08a879f53a7014341284635850a6e55", [:mix], [], "hexpm", "f9f537b13d4fdd30f3039d33cb80144c3aa1f8d9698e47d7bcbcc8df93b1f5c5"},
Expand All @@ -29,7 +29,7 @@
"plug_cowboy": {:hex, :plug_cowboy, "2.5.2", "62894ccd601cf9597e2c23911ff12798a8a18d237e9739f58a6b04e4988899fe", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ea6e87f774c8608d60c8d34022a7d073bd7680a0a013f049fc62bf35efea1044"},
"plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"},
"ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"},
"redix": {:hex, :redix, "1.1.4", "d66fc83d2d4f136c838568d1ec8b0c1a72acfcecfac88a40f86f60aaee883c93", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "515eff055b7de8967e835f4de22a6cfe8311bc1b8fe72f48200238fb43f6a803"},
"redix": {:hex, :redix, "1.1.5", "6fc460d66a5c2287e83e6d73dddc8d527ff59cb4d4f298b41e03a4db8c3b2bd5", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "679afdd4c14502fe9c11387ff1cdcb33065a1cf511097da1eee407f17c7a418b"},
"telemetry": {:hex, :telemetry, "0.4.3", "a06428a514bdbc63293cd9a6263aad00ddeb66f608163bdec7c8995784080818", [:rebar3], [], "hexpm", "eb72b8365ffda5bed68a620d1da88525e326cb82a75ee61354fc24b844768041"},
"telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"},
"telemetry_poller": {:hex, :telemetry_poller, "0.5.1", "21071cc2e536810bac5628b935521ff3e28f0303e770951158c73eaaa01e962a", [:rebar3], [{:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4cab72069210bc6e7a080cec9afffad1b33370149ed5d379b81c7c5f0c663fd4"},
Expand Down
13 changes: 13 additions & 0 deletions test/exq_ui_web/live/busy_live/index_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,17 @@ defmodule ExqUIWeb.BusyLive.IndexTest do
assert html =~ ~r/790fa550-08a4-42de-93e4-8c09c867befe/
assert html =~ ~r/0aec2714-9032-4574-ae45-a2037c874d9f/
end

test "quiet", %{conn: conn} do
{:ok, view, _} = live(conn, "/busy")

html = render(view)
refute html =~ ~S(disabled="disabled")

html =
element(view, "#node-anantha-ubuntu")
|> render_change(%{})

assert html =~ ~S(disabled="disabled")
end
end

0 comments on commit 164c204

Please sign in to comment.