diff --git a/assets/js/app.js b/assets/js/app.js
index f8cdc58..03b4292 100644
--- a/assets/js/app.js
+++ b/assets/js/app.js
@@ -3,10 +3,8 @@
// its own CSS file.
import "../css/app.scss"
-import "@fontsource/inter/400.css";
import "@fontsource/inter/variable.css";
-
// webpack automatically bundles all modules in your
// entry points. Those entry points can be configured
// in "webpack.config.js".
diff --git a/lib/zcash_explorer/application.ex b/lib/zcash_explorer/application.ex
index 9e34d18..98bca5e 100644
--- a/lib/zcash_explorer/application.ex
+++ b/lib/zcash_explorer/application.ex
@@ -37,7 +37,8 @@ defmodule ZcashExplorer.Application do
warmer(module: ZcashExplorer.Metrics.NetworkSolpsWarmer, state: {}),
warmer(module: ZcashExplorer.Blocks.BlockWarmer, state: {}),
warmer(module: ZcashExplorer.Transactions.TransactionWarmer, state: {}),
- warmer(module: ZcashExplorer.Mempool.MempoolWarmer, state: {})
+ warmer(module: ZcashExplorer.Mempool.MempoolWarmer, state: {}),
+ warmer(module: ZcashExplorer.Nodes.NodeWarmer, state: {})
]}
]
diff --git a/lib/zcash_explorer/nodes/nodes_warmer.ex b/lib/zcash_explorer/nodes/nodes_warmer.ex
new file mode 100644
index 0000000..c0806eb
--- /dev/null
+++ b/lib/zcash_explorer/nodes/nodes_warmer.ex
@@ -0,0 +1,24 @@
+defmodule ZcashExplorer.Nodes.NodeWarmer do
+ use Cachex.Warmer
+
+ @doc """
+ Returns the interval for this warmer.
+ """
+ def interval,
+ do: :timer.seconds(60)
+
+ @doc """
+ Executes this cache warmer.
+ """
+ def execute(_state) do
+ Zcashex.getpeerinfo() |> handle_result()
+ end
+
+ # ignores the warmer result in case of error
+ defp handle_result({:error, _reason}),
+ do: :ignore
+
+ defp handle_result({:ok, nodes}) do
+ {:ok, [{"zcash_nodes", nodes}]}
+ end
+end
diff --git a/lib/zcash_explorer_web/live/nodes_live.ex b/lib/zcash_explorer_web/live/nodes_live.ex
new file mode 100644
index 0000000..487c0a0
--- /dev/null
+++ b/lib/zcash_explorer_web/live/nodes_live.ex
@@ -0,0 +1,53 @@
+defmodule ZcashExplorerWeb.NodesLive do
+ use Phoenix.LiveView
+
+ def render(assigns) do
+ ~L"""
+
+
+
+
+ Address |
+ Version |
+ Block Height |
+
+
+
+ <%= for node <- @zcash_nodes do %>
+
+
+ <%= node["addr"] %>
+ |
+
+ <%= node["subver"] %>
+ |
+
+ <%= node["synced_blocks"] %>
+ |
+
+ <% end %>
+
+
+
+ """
+ end
+
+ @impl true
+ def mount(_params, _session, socket) do
+ if connected?(socket), do: Process.send_after(self(), :update, 5000)
+
+ case Cachex.get(:app_cache, "zcash_nodes") do
+ {:ok, zcash_nodes} ->
+ {:ok, assign(socket, :zcash_nodes, zcash_nodes)}
+
+ {:error, _reason} ->
+ {:ok, assign(socket, :zcash_nodes, "loading...")}
+ end
+ end
+
+ def handle_info(:update, socket) do
+ Process.send_after(self(), :update, 5000)
+ {:ok, zcash_nodes} = Cachex.get(:app_cache, "zcash_nodes")
+ {:noreply, assign(socket, :zcash_nodes, zcash_nodes)}
+ end
+end
diff --git a/lib/zcash_explorer_web/live/raw_mempool_live.ex b/lib/zcash_explorer_web/live/raw_mempool_live.ex
index cac56d8..b112a99 100644
--- a/lib/zcash_explorer_web/live/raw_mempool_live.ex
+++ b/lib/zcash_explorer_web/live/raw_mempool_live.ex
@@ -17,7 +17,7 @@ defmodule ZcashExplorerWeb.RawMempoolLive do
<%= for tx <- @raw_mempool do %>
-
+ |
<%= tx["txid"] %>
diff --git a/lib/zcash_explorer_web/router.ex b/lib/zcash_explorer_web/router.ex
index d9feaec..f9138a5 100644
--- a/lib/zcash_explorer_web/router.ex
+++ b/lib/zcash_explorer_web/router.ex
@@ -30,6 +30,7 @@ defmodule ZcashExplorerWeb.Router do
live "/index/recent_blocks", RecentBlocksLive
live "/index/recent_transactions", RecentTransactionsLive
live "/live/raw_mempool", RawMempoolLive
+ live "/live/nodes", NodesLive
get "/broadcast", PageController, :broadcast
post "/broadcast", PageController, :do_broadcast
get "/payment-disclosure", PageController, :disclosure
diff --git a/lib/zcash_explorer_web/templates/layout/app.html.eex b/lib/zcash_explorer_web/templates/layout/app.html.eex
index 1c513c3..4b119a6 100644
--- a/lib/zcash_explorer_web/templates/layout/app.html.eex
+++ b/lib/zcash_explorer_web/templates/layout/app.html.eex
@@ -11,7 +11,7 @@
- Block Explorer
+ Block Explorer ( beta )
@@ -50,8 +50,12 @@ Heroicon name: outline/x" x-state:on="Menu open" x-state:off="Menu closed" class
- Blocks
+
+ Mempool
+ Blocks
+
+
@@ -65,6 +69,7 @@ Heroicon name: outline/x" x-state:on="Menu open" x-state:off="Menu closed" class
@@ -79,12 +84,18 @@ Heroicon name: outline/x" x-state:on="Menu open" x-state:off="Menu closed" class
|