Packages
Real-time performance dashboard for Phoenix
Retired package: Release invalid - Generates wrong route helpers
Current section
43 Versions
Jump to
Current section
43 Versions
Compare versions
9
files changed
+42
additions
-34
deletions
| @@ -1,5 +1,9 @@ | |
| 1 1 | # CHANGELOG |
| 2 2 | |
| 3 | + ## v0.3.4 (2020-10-27) |
| 4 | + |
| 5 | + * Only add node to the URL if explicitly required to improve reliability in non-clustered environments |
| 6 | + |
| 3 7 | ## v0.3.3 (2020-10-24) |
| 4 8 | |
| 5 9 | * Only show Calls/Outliers in Ecto Stats if extension is enabled |
| @@ -78,4 +78,4 @@ | |
| 78 78 | {<<"optional">>,true}, |
| 79 79 | {<<"repository">>,<<"hexpm">>}, |
| 80 80 | {<<"requirement">>,<<"~> 0.4.1 or ~> 0.5">>}]]}. |
| 81 | - {<<"version">>,<<"0.3.3">>}. |
| 81 | + {<<"version">>,<<"0.3.4">>}. |
| @@ -126,8 +126,8 @@ defmodule Phoenix.LiveDashboard.NavBarComponent do | |
| 126 126 | end |
| 127 127 | |
| 128 128 | defp render_item_link(socket, page, item, current, id) do |
| 129 | - params = maybe_put([nav: id], :info, page.params[:info]) |
| 130 | - path = live_dashboard_path(socket, page.route, page.node, params) |
| 129 | + # The nav ignores all params, except the current node if any |
| 130 | + path = live_dashboard_path(socket, page.route, page.node, page.params, nav: id) |
| 131 131 | class = "nav-link#{if current == id, do: " active"}" |
| 132 132 | |
| 133 133 | case item[:method] do |
| @@ -136,9 +136,6 @@ defmodule Phoenix.LiveDashboard.NavBarComponent do | |
| 136 136 | end |
| 137 137 | end |
| 138 138 | |
| 139 | - defp maybe_put(keyword, _key, nil), do: keyword |
| 140 | - defp maybe_put(keyword, key, value), do: [{key, value} | keyword] |
| 141 | - |
| 142 139 | defp render_content(socket, page, component_or_fun) do |
| 143 140 | case component_or_fun do |
| 144 141 | {component, component_assigns} -> |
| @@ -7,11 +7,15 @@ defmodule Phoenix.LiveDashboard.Helpers do | |
| 7 7 | @doc """ |
| 8 8 | Computes a route path to the given route, node, and params. |
| 9 9 | """ |
| 10 | - def live_dashboard_path(socket, route, node, params) do |
| 10 | + def live_dashboard_path(socket, route, node, old_params, new_params) when is_atom(node) do |
| 11 11 | apply( |
| 12 12 | socket.router.__helpers__(), |
| 13 13 | :live_dashboard_path, |
| 14 | - [socket, :page, node, route, params] |
| 14 | + if node == node() and is_nil(old_params["node"]) do |
| 15 | + [socket, :page, route, new_params] |
| 16 | + else |
| 17 | + [socket, :page, node, route, new_params] |
| 18 | + end |
| 15 19 | ) |
| 16 20 | end |
| 17 21 | |
| @@ -19,15 +23,15 @@ defmodule Phoenix.LiveDashboard.Helpers do | |
| 19 23 | Computes a router path to the current page. |
| 20 24 | """ |
| 21 25 | def live_dashboard_path(socket, %{route: route, node: node, params: params}) do |
| 22 | - live_dashboard_path(socket, route, node, params) |
| 26 | + live_dashboard_path(socket, route, node, params, params) |
| 23 27 | end |
| 24 28 | |
| 25 29 | @doc """ |
| 26 30 | Computes a router path to the current page with merged params. |
| 27 31 | """ |
| 28 | - def live_dashboard_path(socket, %{route: route, node: node, params: params}, extra) do |
| 29 | - params = Enum.into(extra, params, fn {k, v} -> {Atom.to_string(k), v} end) |
| 30 | - live_dashboard_path(socket, route, node, params) |
| 32 | + def live_dashboard_path(socket, %{route: route, node: node, params: old_params}, extra) do |
| 33 | + new_params = Enum.into(extra, old_params, fn {k, v} -> {Atom.to_string(k), v} end) |
| 34 | + live_dashboard_path(socket, route, node, old_params, new_params) |
| 31 35 | end |
| 32 36 | |
| 33 37 | @doc """ |
| @@ -21,7 +21,7 @@ defmodule Phoenix.LiveDashboard.PageLive do | |
| 21 21 | timer: nil |
| 22 22 | |
| 23 23 | @impl true |
| 24 | - def mount(%{"node" => _, "page" => page} = params, %{"pages" => pages} = session, socket) do |
| 24 | + def mount(%{"page" => page} = params, %{"pages" => pages} = session, socket) do |
| 25 25 | case Enum.find(pages, :error, fn {key, _} -> Atom.to_string(key) == page end) do |
| 26 26 | {_id, {module, page_session}} -> |
| 27 27 | assign_mount(socket, module, pages, page_session, params, session) |
| @@ -57,18 +57,20 @@ defmodule Phoenix.LiveDashboard.PageLive do | |
| 57 57 | end |
| 58 58 | |
| 59 59 | defp assign_params(socket, params) do |
| 60 | - update_page(socket, params: params, info: info(params), route: route(params)) |
| 60 | + update_page(socket, params: params, info: params["info"], route: route(params)) |
| 61 61 | end |
| 62 62 | |
| 63 63 | defp route(%{"page" => page}), do: String.to_existing_atom(page) |
| 64 64 | |
| 65 | - defp info(%{"info" => info} = params), do: {info, Map.delete(params, "info")} |
| 66 | - defp info(%{}), do: nil |
| 67 | - |
| 68 65 | defp assign_node(socket, params) do |
| 69 | - param_node = Map.fetch!(params, "node") |
| 66 | + found_node = |
| 67 | + if param_node = params["node"] do |
| 68 | + Enum.find(nodes(), &(Atom.to_string(&1) == param_node)) |
| 69 | + else |
| 70 | + node() |
| 71 | + end |
| 70 72 | |
| 71 | - if found_node = Enum.find(nodes(), &(Atom.to_string(&1) == param_node)) do |
| 73 | + if found_node do |
| 72 74 | if connected?(socket) do |
| 73 75 | :net_kernel.monitor_nodes(true, node_type: :all) |
| 74 76 | end |
| @@ -210,9 +212,10 @@ defmodule Phoenix.LiveDashboard.PageLive do | |
| 210 212 | |
| 211 213 | defp live_info(_socket, %{info: nil}), do: nil |
| 212 214 | |
| 213 | - defp live_info(socket, %{info: {title, params}, node: node} = page) do |
| 215 | + defp live_info(socket, %{info: title, node: node, params: params} = page) do |
| 214 216 | if component = extract_info_component(title) do |
| 215 | - path = &live_dashboard_path(socket, page.route, &1, Enum.into(&2, params)) |
| 217 | + params = Map.delete(params, "info") |
| 218 | + path = &live_dashboard_path(socket, page.route, &1, params, Enum.into(&2, params)) |
| 216 219 | |
| 217 220 | live_modal(socket, component, |
| 218 221 | id: title, |
| @@ -266,7 +269,7 @@ defmodule Phoenix.LiveDashboard.PageLive do | |
| 266 269 | page = socket.assigns.page |
| 267 270 | |
| 268 271 | if node && node != page.node do |
| 269 | - to = live_dashboard_path(socket, page.route, node, page.params) |
| 272 | + to = live_dashboard_path(socket, page.route, node, page.params, page.params) |
| 270 273 | {:noreply, push_redirect(socket, to: to)} |
| 271 274 | else |
| 272 275 | {:noreply, redirect_to_current_node(socket)} |
| @@ -297,7 +300,7 @@ defmodule Phoenix.LiveDashboard.PageLive do | |
| 297 300 | |
| 298 301 | defp maybe_link(socket, page, {:enabled, text, route}) do |
| 299 302 | live_redirect(text, |
| 300 | - to: live_dashboard_path(socket, route, page.node, []), |
| 303 | + to: live_dashboard_path(socket, route, page.node, page.params, []), |
| 301 304 | class: "menu-item" |
| 302 305 | ) |
| 303 306 | end |
| @@ -335,7 +338,7 @@ defmodule Phoenix.LiveDashboard.PageLive do | |
| 335 338 | end |
| 336 339 | |
| 337 340 | defp redirect_to_current_node(socket) do |
| 338 | - push_redirect(socket, to: live_dashboard_path(socket, :home, node(), [])) |
| 341 | + push_redirect(socket, to: live_dashboard_path(socket, :home, node(), %{}, %{})) |
| 339 342 | end |
| 340 343 | |
| 341 344 | defp update_page(socket, assigns) do |
Loading more files…