neiam
/lambent_ex
Lambent Aether 5
public · Issues · Pulls 1 · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
Log in to mark this repository.
link peristence too now, diff icons for vibe check
abf0ff7 · gmorell · 2023-01-10 23:14
Files changed
modified
config/dev.exs
+1
−1
@@ -9,7 +9,7 @@ import Config
| 9 | 9 | config :lambent_ex, LambentExWeb.Endpoint, |
| 10 | 10 | # Binding to loopback ipv4 address prevents access from other machines. |
| 11 | 11 | # Change to `ip: {0, 0, 0, 0}` to allow access from other machines. |
| 12 | − http: [ip: {127, 0, 0, 1}, port: 4000], | |
| 12 | + http: [ip: {0, 0, 0, 0}, port: 4000], | |
| 13 | 13 | check_origin: false, |
| 14 | 14 | code_reloader: true, |
| 15 | 15 | debug_errors: true, |
modified
lib/lambent_ex/link.ex
+16
−3
@@ -15,7 +15,7 @@ defmodule LambentEx.Link do
| 15 | 15 | |
| 16 | 16 | def init(opts) do |
| 17 | 17 | Process.send_after(self(), :publish, 50) |
| 18 | − {:ok, opts} = Keyword.validate(opts, [:source, :target, :name]) | |
| 18 | + {:ok, opts} = Keyword.validate(opts, [:source, :target, :name, :persist]) | |
| 19 | 19 | Phoenix.PubSub.subscribe(@pubsub_name, @pubsub_topic <> opts[:source]) |
| 20 | 20 | Phoenix.PubSub.subscribe(@pubsub_name, @pubsub_pfx_on <> opts[:target]) |
| 21 | 21 |
@@ -24,7 +24,9 @@ defmodule LambentEx.Link do
| 24 | 24 | target: opts[:target], |
| 25 | 25 | name: opts[:name], |
| 26 | 26 | enabled: true, |
| 27 | − started: DateTime.utc_now | |
| 27 | + started: DateTime.utc_now, | |
| 28 | + persist: opts[:persist] || false, | |
| 29 | + full_opts: opts | |
| 28 | 30 | } |
| 29 | 31 | |
| 30 | 32 | neighbor_on(state) |
@@ -47,6 +49,10 @@ defmodule LambentEx.Link do
| 47 | 49 | via_tuple("link-#{id}") |> GenServer.cast(:do_toggle) |
| 48 | 50 | end |
| 49 | 51 | |
| 52 | + def persist(id) do | |
| 53 | + via_tuple("link-#{id}") |> GenServer.cast(:persist) | |
| 54 | + end | |
| 55 | + | |
| 50 | 56 | def quit(id) do |
| 51 | 57 | via_tuple("link-#{id}") |> GenServer.cast(:quit) |
| 52 | 58 | end |
@@ -56,7 +62,9 @@ defmodule LambentEx.Link do
| 56 | 62 | name: state[:name], |
| 57 | 63 | source: state[:source], |
| 58 | 64 | target: state[:target], |
| 59 | − enabled: state[:enabled] | |
| 65 | + enabled: state[:enabled], | |
| 66 | + persist: state[:persist], | |
| 67 | + opts: state[:full_opts] |> Keyword.update(:persist, true, fn _ -> state[:persist] end), | |
| 60 | 68 | } |
| 61 | 69 | end |
| 62 | 70 |
@@ -106,4 +114,9 @@ defmodule LambentEx.Link do
| 106 | 114 | LambentEx.LinkSupervisor.abort_child(self()) |
| 107 | 115 | {:noreply, state} |
| 108 | 116 | end |
| 117 | + | |
| 118 | + @impl true | |
| 119 | + def handle_cast(:persist, state) do | |
| 120 | + {:noreply, state |> Map.put(:persist, !state.persist)} | |
| 121 | + end | |
| 109 | 122 | end |
modified
lib/lambent_ex/meta.ex
+40
−1
@@ -10,10 +10,13 @@ defmodule LambentEx.Meta do
| 10 | 10 | # File.cd("..") |
| 11 | 11 | |
| 12 | 12 | Phoenix.PubSub.subscribe(@pubsub_name, "machines_idx") |
| 13 | + Phoenix.PubSub.subscribe(@pubsub_name, "links_idx") | |
| 13 | 14 | Process.send_after(self(), :machine_flush, 5000) |
| 15 | + Process.send_after(self(), :link_flush, 5000) | |
| 14 | 16 | ml = MapSet.new() |
| 17 | + ll = MapSet.new() | |
| 15 | 18 | |
| 16 | − {:ok, %{table: table, machines: ml}} | |
| 19 | + {:ok, %{table: table, machines: ml, links: ll}} | |
| 17 | 20 | end |
| 18 | 21 | |
| 19 | 22 | def start_link(arg) do |
@@ -58,6 +61,18 @@ defmodule LambentEx.Meta do
| 58 | 61 | end |
| 59 | 62 | end |
| 60 | 63 | |
| 64 | + def get_saved_links do | |
| 65 | + case :dets.lookup(@table, "links") do | |
| 66 | + [] -> [] | |
| 67 | + [{_key, value}] -> | |
| 68 | + value | |
| 69 | + end | |
| 70 | + end | |
| 71 | + | |
| 72 | + def links_clear() do | |
| 73 | + :dets.delete(@table, "links") | |
| 74 | + end | |
| 75 | + | |
| 61 | 76 | def machines_clear() do |
| 62 | 77 | :dets.delete(@table, "machs") |
| 63 | 78 | end |
@@ -73,6 +88,18 @@ defmodule LambentEx.Meta do
| 73 | 88 | end |
| 74 | 89 | end |
| 75 | 90 | |
| 91 | + def handle_info(:link_flush, state) do | |
| 92 | + Process.send_after(self(), :link_flush, 5000) | |
| 93 | + IO.puts("flushen") | |
| 94 | + IO.inspect(state.links) | |
| 95 | + if state.links |> MapSet.size() == 0 do | |
| 96 | + {:noreply, state} | |
| 97 | + else | |
| 98 | + :dets.insert(@table, {"links", state.links}) | |
| 99 | + {:noreply, state} | |
| 100 | + end | |
| 101 | + end | |
| 102 | + | |
| 76 | 103 | def handle_info({:machines_pub, machine}, state) do |
| 77 | 104 | case machine[:persist] do |
| 78 | 105 | true -> |
@@ -84,4 +111,16 @@ defmodule LambentEx.Meta do
| 84 | 111 | %{state | machines: MapSet.delete(state.machines, machine |> Map.put(:persist, true) |> Map.put(:opts, machine[:opts] |> Keyword.update(:persist, true, fn _ -> true end)))}} |
| 85 | 112 | end |
| 86 | 113 | end |
| 114 | + | |
| 115 | + def handle_info({:links_pub, link}, state) do | |
| 116 | + case link[:persist] do | |
| 117 | + true -> | |
| 118 | + {:noreply, %{state | links: MapSet.put(state.links, link)}} | |
| 119 | + | |
| 120 | + false -> | |
| 121 | + # IO.inspect(machine) | |
| 122 | + {:noreply, | |
| 123 | + %{state | links: MapSet.delete(state.links, link |> Map.put(:persist, true) |> Map.put(:opts, link[:opts] |> Keyword.update(:persist, true, fn _ -> true end)))}} | |
| 124 | + end | |
| 125 | + end | |
| 87 | 126 | end |
modified
lib/lambent_ex/supervision/link.ex
+13
−1
@@ -16,9 +16,21 @@ defmodule LambentEx.LinkSupervisor do
| 16 | 16 | |
| 17 | 17 | @impl true |
| 18 | 18 | def init(init_arg) do |
| 19 | − DynamicSupervisor.init( | |
| 19 | + r = DynamicSupervisor.init( | |
| 20 | 20 | strategy: :one_for_one, |
| 21 | 21 | extra_arguments: [init_arg] |
| 22 | 22 | ) |
| 23 | + | |
| 24 | + Task.start(fn -> | |
| 25 | + LambentEx.Meta.get_saved_links() | |
| 26 | + |> Enum.map(fn l -> | |
| 27 | + IO.inspect(l[:opts]) | |
| 28 | + spec = {LambentEx.Link, l[:opts]} | |
| 29 | + # | |
| 30 | + DynamicSupervisor.start_child(__MODULE__, spec) |> IO.inspect | |
| 31 | + end) | |
| 32 | + end) | |
| 33 | + | |
| 34 | + r | |
| 23 | 35 | end |
| 24 | 36 | end |
modified
lib/lambent_ex_web/live/links/index.ex
+8
−3
@@ -66,9 +66,14 @@ defmodule LambentExWeb.LinksLive.Index do
| 66 | 66 | {:noreply, socket} |
| 67 | 67 | end |
| 68 | 68 | |
| 69 | − def handle_event("quit", params, socket) do | |
| 70 | − LambentEx.Link.quit(params["tgt"]) | |
| 71 | − links = socket.assigns.links |> Map.delete(params["tgt"]) | |
| 69 | + def handle_event("quit", %{"tgt" => tgt}, socket) do | |
| 70 | + LambentEx.Link.quit(tgt) | |
| 71 | + links = socket.assigns.links |> Map.delete(tgt) | |
| 72 | 72 | {:noreply, socket |> assign(:links, links)} |
| 73 | 73 | end |
| 74 | + | |
| 75 | + def handle_event("persist", %{"tgt" => tgt}, socket) do | |
| 76 | + LambentEx.Link.persist(tgt) | |
| 77 | + {:noreply, socket} | |
| 78 | + end | |
| 74 | 79 | end |
modified
lib/lambent_ex_web/live/links/index.html.heex
+11
−2
@@ -41,11 +41,20 @@ on_cancel={JS.navigate(~p"/cfg/links")}>
| 41 | 41 | <td><%= v[:target] %></td> |
| 42 | 42 | <td> |
| 43 | 43 | <%= if v[:enabled] == true do %> |
| 44 | − <input type="checkbox" phx-click="toggle" phx-value-tgt={k} class="toggle" checked /> | |
| 44 | + <input type="checkbox" phx-click="toggle" phx-value-tgt={k} class="toggle mb-4" checked /> | |
| 45 | 45 | <% else %> |
| 46 | − <input type="checkbox" phx-click="toggle" phx-value-tgt={k} class="toggle" /> | |
| 46 | + <input type="checkbox" phx-click="toggle" phx-value-tgt={k} class="toggle mb-4" /> | |
| 47 | 47 | <% end %> |
| 48 | 48 |   |
| 49 | + <%= if v[:persist] == true do %> | |
| 50 | + <a class="btn btn-success btn-circle" phx-click="persist" phx-value-tgt={v[:name]}> | |
| 51 | + <i class="fa-solid fa-2x fa-thumbtack"></i> | |
| 52 | + </a> | |
| 53 | + <% else %> | |
| 54 | + <a class="btn btn-success btn-outline btn-circle" phx-click="persist" phx-value-tgt={v[:name]}> | |
| 55 | + <i class="fa-solid fa-2x fa-thumbtack"></i> | |
| 56 | + </a> | |
| 57 | + <% end %> | |
| 49 | 58 | <a class="btn btn-error btn-outline btn-circle" phx-click="quit" phx-value-tgt={k}> |
| 50 | 59 | <i class="fa-solid fa-2x fa-xmark"></i> |
| 51 | 60 | </a> |
Parents: 5329761