From 9353a85231b201757bf89318955a606f19a4bbfc Mon Sep 17 00:00:00 2001 From: Moxley Stratton Date: Tue, 27 Jun 2023 07:26:59 -0700 Subject: [PATCH 1/9] Update to latest phoenix_live_dashboard, and others --- config/config.exs | 2 +- lib/phoenix_profiler/dashboard.ex | 210 ++++++++++-------- mix.exs | 9 +- mix.lock | 29 +-- .../integrations/phoenix_profiler_test.exs | 4 +- 5 files changed, 142 insertions(+), 112 deletions(-) diff --git a/config/config.exs b/config/config.exs index 6c1ed38..2492cde 100644 --- a/config/config.exs +++ b/config/config.exs @@ -1,4 +1,4 @@ -use Mix.Config +import Config config :phoenix, :json_library, Jason diff --git a/lib/phoenix_profiler/dashboard.ex b/lib/phoenix_profiler/dashboard.ex index c89aa44..1c39dc2 100644 --- a/lib/phoenix_profiler/dashboard.ex +++ b/lib/phoenix_profiler/dashboard.ex @@ -104,7 +104,7 @@ if Code.ensure_loaded?(Phoenix.LiveDashboard) do end @impl true - def render_page(assigns) do + def render(assigns) do if assigns[:error] do render_error(assigns) else @@ -116,10 +116,20 @@ if Code.ensure_loaded?(Phoenix.LiveDashboard) do name: name, render: fn -> render_endpoint_or_error(assigns) end, method: :redirect} end - nav_bar(items: items) + profiler_nav_bar(items: items) end end + defp profiler_nav_bar(assigns) do + ~H""" + <.live_nav_bar id={@id} page={@page}> + <:item name={name} :for={{name, item} <- @items}> + <%= item[:render].() %> + + + """ + end + defp render_endpoint_or_error(assigns) do if assigns[:error] do render_error(assigns) @@ -165,16 +175,14 @@ if Code.ensure_loaded?(Phoenix.LiveDashboard) do end defp render_profile_nav(assigns) do - nav_bar( - items: [ - request: [ - name: "Request / Response", - render: fn -> render_panel(:request, assigns) end - ] - ], - nav_param: :panel, - extra_params: [:nav, :token] - ) + # TODO Where does name: "Request / Response" go? + ~H""" + <.live_nav_bar id={@id} page={@page}> + <:item name="items"> + <%= render_panel(:request, assigns) %> + + + """ end defp render_todo do @@ -184,93 +192,111 @@ if Code.ensure_loaded?(Phoenix.LiveDashboard) do defp render_panel(:request, assigns) do conn = assigns.profile.conn - nav_bar( - items: [ - path_params: [ - name: "Path Params", - render: fn -> render_params_table(conn, :path_params) end - ], - query_params: [ - name: "Query Params", - render: fn -> render_params_table(conn, :query_params) end - ], - body_params: [ - name: "Body Params", - render: fn -> render_params_table(conn, :body_params) end - ], - request_headers: [ - name: "Request Headers", - render: fn -> render_params_table(conn, :req_headers, "Request Headers") end - ], - request_cookies: [ - name: "Request Cookies", - render: fn -> render_params_table(conn, :req_cookies, "Request Cookies") end - ], - session: [ - name: "Session", - render: fn -> render_todo() end - ], - response_headers: [ - name: "Response Headers", - render: fn -> - render_params_table(conn, :resp_headers, "Response Headers") - end - ], - response_cookies: [ - name: "Response Cookies", - render: fn -> - render_params_table(conn, :resp_cookies, "Response Cookies") - end - ], - flashes: [ - name: "Flashes", - render: fn -> render_todo() end - ] + items = [ + path_params: [ + name: "Path Params", + render: fn -> render_params_table(conn, :path_params) end + ], + query_params: [ + name: "Query Params", + render: fn -> render_params_table(conn, :query_params) end + ], + body_params: [ + name: "Body Params", + render: fn -> render_params_table(conn, :body_params) end + ], + request_headers: [ + name: "Request Headers", + render: fn -> render_params_table(conn, :req_headers, "Request Headers") end + ], + request_cookies: [ + name: "Request Cookies", + render: fn -> render_params_table(conn, :req_cookies, "Request Cookies") end + ], + session: [ + name: "Session", + render: fn -> render_todo() end + ], + response_headers: [ + name: "Response Headers", + render: fn -> + render_params_table(conn, :resp_headers, "Response Headers") + end + ], + response_cookies: [ + name: "Response Cookies", + render: fn -> + render_params_table(conn, :resp_cookies, "Response Cookies") + end ], - nav_param: :tab, - extra_params: [:nav, :panel, :token] - ) + flashes: [ + name: "Flashes", + render: fn -> render_todo() end + ] + ] + + assigns = Map.put(assigns, :items, items) + + ~H""" + <.live_nav_bar id={@id} page={@page}> + <:item name={name} :for={{name, item} <- @items}> + <%= item[:render].() %> + + + """ end defp render_profiles_table(assigns) do - table( - columns: columns(), - id: :phxprof_requests_table, - row_attrs: &row_attrs/1, - row_fetcher: fn params, node -> fetch_profiles(params, assigns.endpoint, node) end, - rows_name: "requests", - title: "Requests" - ) + ~H""" + <.live_table + id="phxprof_requests_table" + title="Requests" + page={@page} + row_attrs={&row_attrs/1} + row_fetcher={fn params, node -> fetch_profiles(params, assigns.endpoint, node) end} + rows_name="requests" + > + <:col + :for={col <- columns()} + field={col.field} + header={col.header} + sortable={col.sortable} + :let={value} + > + <%= if(col.format, do: col.format.(value), else: value) %> + + + """ end defp render_params_table(conn, field, title \\ nil) do - table( - id: :"#{field}_table", - columns: [ - %{ - field: :key, - sortable: :asc - }, - %{ - field: :value, - sortable: nil - } - ], - row_fetcher: fn %{sort_by: sort_by, sort_dir: sort_dir}, _node -> - rows = - case Map.get(conn, field) do - %Plug.Conn.Unfetched{} -> - [] - - params when is_map(params) or is_list(params) -> - params = for {key, value} <- params, do: %{key: pp(key), value: pp(value)} - Utils.sort_by(params, fn params -> params[sort_by] end, sort_dir) - end - - {rows, length(rows)} - end, - title: title || Phoenix.Naming.humanize(field) - ) + row_fetcher = fn %{sort_by: sort_by, sort_dir: sort_dir}, _node -> + rows = + case Map.get(conn, field) do + %Plug.Conn.Unfetched{} -> + [] + + params when is_map(params) or is_list(params) -> + params = for {key, value} <- params, do: %{key: pp(key), value: pp(value)} + Utils.sort_by(params, fn params -> params[sort_by] end, sort_dir) + end + + {rows, length(rows)} + end + + assigns = %{conn: conn, field: field, title: title, row_fetcher: row_fetcher, page: conn} + + ~H""" + <.live_table + id={"#{@field}_table"} + title={@title || Phoenix.Naming.humanize(@field)} + page={@page} + row_fetcher={@row_fetcher} + > + <:col field={:key} sortable={:asc} /> + <:col field={:value} /> + + """ end # for printing diff --git a/mix.exs b/mix.exs index 3ab2ccf..ebcc75f 100644 --- a/mix.exs +++ b/mix.exs @@ -9,7 +9,7 @@ defmodule PhoenixProfiler.MixProject do app: :phoenix_profiler, version: @version, elixir: "~> 1.8", - compilers: [:phoenix] ++ Mix.compilers(), + compilers: Mix.compilers(), elixirc_paths: elixirc_paths(Mix.env()), package: package(), deps: deps(), @@ -41,15 +41,16 @@ defmodule PhoenixProfiler.MixProject do phoenix() ++ [ {:phoenix_html, ">= 3.2.0 and < 4.0.0"}, - {:phoenix_live_view, "~> 0.18.0 or ~> 0.17.0 or ~> 0.16.0"}, - {:phoenix_live_dashboard, "~> 0.7.0 or ~> 0.6.0 or ~> 0.5.0", optional: true}, + {:phoenix_live_view, "~> 0.19.0 or ~> 0.18.0 or ~> 0.17.0 or ~> 0.16.0"}, + {:phoenix_live_dashboard, "~> 0.8", optional: true}, # Dev Dependencies {:phoenix_live_reload, "~> 1.3", only: :dev}, + {:phoenix_view, "~> 2.0", only: :test, optional: true}, {:plug_cowboy, "~> 2.0", only: :dev}, {:jason, "~> 1.0", only: [:dev, :test, :docs]}, {:ex_doc, "~> 0.25", only: :docs}, {:esbuild, "~> 0.2", runtime: false, only: :dev}, - {:floki, ">= 0.26.0", only: :test} + {:floki, ">= 0.26.0", only: :test}, ] end diff --git a/mix.lock b/mix.lock index f5e3d38..9952be5 100644 --- a/mix.lock +++ b/mix.lock @@ -1,8 +1,8 @@ %{ "castore": {:hex, :castore, "0.1.18", "deb5b9ab02400561b6f5708f3e7660fc35ca2d51bfc6a940d2f513f89c2975fc", [:mix], [], "hexpm", "61bbaf6452b782ef80b33cdb45701afbcf0a918a45ebe7e73f1130d661e66a06"}, - "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, + "cowboy": {:hex, :cowboy, "2.10.0", "ff9ffeff91dae4ae270dd975642997afe2a1179d94b1887863e43f681a203e26", [:make, :rebar3], [{:cowlib, "2.12.1", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "3afdccb7183cc6f143cb14d3cf51fa00e53db9ec80cdcd525482f5e99bc41d6b"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, - "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, + "cowlib": {:hex, :cowlib, "2.12.1", "a9fa9a625f1d2025fe6b462cb865881329b5caff8f1854d1cbc9f9533f00e1e1", [:make, :rebar3], [], "hexpm", "163b73f6367a7341b33c794c4e88e7dbfe6498ac42dcd69ef44c5bc5507c8db0"}, "earmark_parser": {:hex, :earmark_parser, "1.4.26", "f4291134583f373c7d8755566122908eb9662df4c4b63caa66a0eabe06569b0a", [:mix], [], "hexpm", "48d460899f8a0c52c5470676611c01f64f3337bad0b26ddab43648428d94aabc"}, "esbuild": {:hex, :esbuild, "0.5.0", "d5bb08ff049d7880ee3609ed5c4b864bd2f46445ea40b16b4acead724fb4c4a3", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "f183a0b332d963c4cfaf585477695ea59eef9a6f2204fdd0efa00e099694ffe5"}, "ex_doc": {:hex, :ex_doc, "0.28.5", "3e52a6d2130ce74d096859e477b97080c156d0926701c13870a4e1f752363279", [:mix], [{:earmark_parser, "~> 1.4.19", [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", "d2c4b07133113e9aa3e9ba27efb9088ba900e9e51caa383919676afdf09ab181"}, @@ -13,19 +13,22 @@ "makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"}, "makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"}, "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, - "mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"}, + "mime": {:hex, :mime, "2.0.5", "dc34c8efd439abe6ae0343edbb8556f4d63f178594894720607772a041b04b02", [:mix], [], "hexpm", "da0d64a365c45bc9935cc5c8a7fc5e49a0e0f9932a761c55d6c52b142780a05c"}, "nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"}, - "phoenix": {:hex, :phoenix, "1.6.12", "f8f8ac077600f84419806dd53114b2e77aedde7a502e74181a7d886355aa0643", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "2d6cf5583c9c20f7103c40e6014ef802d96553b8e5d6585ad6e627bd5ddb0d12"}, - "phoenix_html": {:hex, :phoenix_html, "3.2.0", "1c1219d4b6cb22ac72f12f73dc5fad6c7563104d083f711c3fcd8551a1f4ae11", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "36ec97ba56d25c0136ef1992c37957e4246b649d620958a1f9fa86165f8bc54f"}, - "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.7.0", "9b5ab242e52c33596b132beaf97dccb9e59f7af941f41a22d0fa2465d0b63ab1", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.18.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "374d65e87e1e83528ea30852e34d4ad3022ddb92d642d43ec0b4e3c112046036"}, + "phoenix": {:hex, :phoenix, "1.7.6", "61f0625af7c1d1923d582470446de29b008c0e07ae33d7a3859ede247ddaf59a", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "f6b4be7780402bb060cbc6e83f1b6d3f5673b674ba73cc4a7dd47db0322dfb88"}, + "phoenix_html": {:hex, :phoenix_html, "3.3.1", "4788757e804a30baac6b3fc9695bf5562465dd3f1da8eb8460ad5b404d9a2178", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "bed1906edd4906a15fd7b412b85b05e521e1f67c9a85418c55999277e553d0d3"}, + "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.0", "0b3158b5b198aa444473c91d23d79f52fb077e807ffad80dacf88ce078fa8df2", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "87785a54474fed91a67a1227a741097eb1a42c2e49d3c0d098b588af65cd410d"}, "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.3.3", "3a53772a6118d5679bf50fc1670505a290e32a1d195df9e069d8c53ab040c054", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "766796676e5f558dbae5d1bdb066849673e956005e3730dfd5affd7a6da4abac"}, - "phoenix_live_view": {:hex, :phoenix_live_view, "0.18.0", "8705283efbc623df6290d5f8cb233afa9bcdcfc969749ce6e313877108f65887", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6 or ~> 1.7", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "545f11c15d595595690da16c4f607417bfb1862e518c07c9f78c754ac186cd7d"}, - "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"}, - "phoenix_view": {:hex, :phoenix_view, "1.1.2", "1b82764a065fb41051637872c7bd07ed2fdb6f5c3bd89684d4dca6e10115c95a", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "7ae90ad27b09091266f6adbb61e1d2516a7c3d7062c6789d46a7554ec40f3a56"}, - "plug": {:hex, :plug, "1.13.6", "187beb6b67c6cec50503e940f0434ea4692b19384d47e5fdfd701e93cadb4cc2", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "02b9c6b9955bce92c829f31d6284bf53c591ca63c4fb9ff81dfd0418667a34ff"}, - "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.3", "8f77d13aeb32bfd9e654cb68f0af517b371fb34c56c9f2b58fe3df1235c1251a", [:mix], [], "hexpm", "b5672099c6ad5c202c45f5a403f21a3411247f164e4a8fab056e5cd8a290f4a2"}, + "phoenix_live_view": {:hex, :phoenix_live_view, "0.19.3", "3918c1b34df8ac71a9a636806ba5b7f053349a0392b312e16f35b0bf4d070aab", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "545626887948495fd8ea23d83b75bd7aaf9dc4221563e158d2c4b52ea1dd7e00"}, + "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, + "phoenix_template": {:hex, :phoenix_template, "1.0.1", "85f79e3ad1b0180abb43f9725973e3b8c2c3354a87245f91431eec60553ed3ef", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "157dc078f6226334c91cb32c1865bf3911686f8bcd6bcff86736f6253e6993ee"}, + "phoenix_view": {:hex, :phoenix_view, "2.0.2", "6bd4d2fd595ef80d33b439ede6a19326b78f0f1d8d62b9a318e3d9c1af351098", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "a929e7230ea5c7ee0e149ffcf44ce7cf7f4b6d2bfe1752dd7c084cdff152d36f"}, + "plug": {:hex, :plug, "1.14.2", "cff7d4ec45b4ae176a227acd94a7ab536d9b37b942c8e8fa6dfc0fff98ff4d80", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "842fc50187e13cf4ac3b253d47d9474ed6c296a8732752835ce4a86acdf68d13"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.6.1", "9a3bbfceeb65eff5f39dab529e5cd79137ac36e913c02067dba3963a26efe9b2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "de36e1a21f451a18b790f37765db198075c25875c64834bcc82d90b309eb6613"}, + "plug_crypto": {:hex, :plug_crypto, "1.2.5", "918772575e48e81e455818229bf719d4ab4181fcbf7f85b68a35620f78d89ced", [:mix], [], "hexpm", "26549a1d6345e2172eb1c233866756ae44a9609bd33ee6f99147ab3fd87fd842"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, - "telemetry": {:hex, :telemetry, "1.1.0", "a589817034a27eab11144ad24d5c0f9fab1f58173274b1e9bae7074af9cbee51", [:rebar3], [], "hexpm", "b727b2a1f75614774cff2d7565b64d0dfa5bd52ba517f16543e6fc7efcc0df48"}, + "telemetry": {:hex, :telemetry, "1.2.1", "68fdfe8d8f05a8428483a97d7aab2f268aaff24b49e0f599faa091f1d4e7f61c", [:rebar3], [], "hexpm", "dad9ce9d8effc621708f99eac538ef1cbe05d6a874dd741de2e689c47feafed5"}, "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"}, + "websock": {:hex, :websock, "0.5.2", "b3c08511d8d79ed2c2f589ff430bd1fe799bb389686dafce86d28801783d8351", [:mix], [], "hexpm", "925f5de22fca6813dfa980fb62fd542ec43a2d1a1f83d2caec907483fe66ff05"}, + "websock_adapter": {:hex, :websock_adapter, "0.5.3", "4908718e42e4a548fc20e00e70848620a92f11f7a6add8cf0886c4232267498d", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "cbe5b814c1f86b6ea002b52dd99f345aeecf1a1a6964e209d208fb404d930d3d"}, } diff --git a/test/phoenix_profiler/integrations/phoenix_profiler_test.exs b/test/phoenix_profiler/integrations/phoenix_profiler_test.exs index a20680c..a7c5fce 100644 --- a/test/phoenix_profiler/integrations/phoenix_profiler_test.exs +++ b/test/phoenix_profiler/integrations/phoenix_profiler_test.exs @@ -32,7 +32,7 @@ defmodule PhoenixProfiler.PhoenixProfilerTest do phoenix_controller: PhoenixProfilerTest.PageController, phoenix_endpoint: PhoenixProfilerTest.Endpoint, phoenix_router: PhoenixProfilerTest.Router, - phoenix_view: PhoenixProfilerTest.PageView + phoenix_view: %{_: PhoenixProfilerTest.PageView} }, status: 200 }, @@ -70,7 +70,7 @@ defmodule PhoenixProfiler.PhoenixProfilerTest do phoenix_controller: PhoenixProfilerTest.APIController, phoenix_endpoint: PhoenixProfilerTest.Endpoint, phoenix_router: PhoenixProfilerTest.Router, - phoenix_view: PhoenixProfilerTest.APIView + phoenix_view: %{_: PhoenixProfilerTest.APIView} }, status: 200 }, From e50fb673c4a4e8e365a84c76872e2f6f1aaf6007 Mon Sep 17 00:00:00 2001 From: Moxley Stratton Date: Wed, 28 Jun 2023 08:05:07 -0700 Subject: [PATCH 2/9] Fix mix format issue --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index ebcc75f..ca9935a 100644 --- a/mix.exs +++ b/mix.exs @@ -50,7 +50,7 @@ defmodule PhoenixProfiler.MixProject do {:jason, "~> 1.0", only: [:dev, :test, :docs]}, {:ex_doc, "~> 0.25", only: :docs}, {:esbuild, "~> 0.2", runtime: false, only: :dev}, - {:floki, ">= 0.26.0", only: :test}, + {:floki, ">= 0.26.0", only: :test} ] end From 74621f10fbed1605117aaafae5a2a2587dc4b189 Mon Sep 17 00:00:00 2001 From: Moxley Stratton Date: Wed, 12 Jul 2023 15:27:08 -0700 Subject: [PATCH 3/9] Fix raised errors when rendering UI --- lib/phoenix_profiler/dashboard.ex | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/phoenix_profiler/dashboard.ex b/lib/phoenix_profiler/dashboard.ex index 1c39dc2..4a0ee3c 100644 --- a/lib/phoenix_profiler/dashboard.ex +++ b/lib/phoenix_profiler/dashboard.ex @@ -116,13 +116,13 @@ if Code.ensure_loaded?(Phoenix.LiveDashboard) do name: name, render: fn -> render_endpoint_or_error(assigns) end, method: :redirect} end - profiler_nav_bar(items: items) + profiler_nav_bar(%{items: items, page: assigns[:page]}) end end defp profiler_nav_bar(assigns) do ~H""" - <.live_nav_bar id={@id} page={@page}> + <.live_nav_bar id="profiler_nav_bar" page={@page}> <:item name={name} :for={{name, item} <- @items}> <%= item[:render].() %> @@ -171,7 +171,9 @@ if Code.ensure_loaded?(Phoenix.LiveDashboard) do "This token is not available for this endpoint on this node." end - card(value: error_message) + ~H""" + <.card><%= error_message %> + """ end defp render_profile_nav(assigns) do @@ -259,8 +261,8 @@ if Code.ensure_loaded?(Phoenix.LiveDashboard) do <:col :for={col <- columns()} field={col.field} - header={col.header} - sortable={col.sortable} + header={col[:header]} + sortable={col[:sortable]} :let={value} > <%= if(col.format, do: col.format.(value), else: value) %> From 3b6de9a61fd23bb0742de7dc3431c8fb899a5ee8 Mon Sep 17 00:00:00 2001 From: Moxley Stratton Date: Wed, 12 Jul 2023 15:30:40 -0700 Subject: [PATCH 4/9] Fix render_error() --- lib/phoenix_profiler/dashboard.ex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/phoenix_profiler/dashboard.ex b/lib/phoenix_profiler/dashboard.ex index 4a0ee3c..48b7669 100644 --- a/lib/phoenix_profiler/dashboard.ex +++ b/lib/phoenix_profiler/dashboard.ex @@ -171,9 +171,9 @@ if Code.ensure_loaded?(Phoenix.LiveDashboard) do "This token is not available for this endpoint on this node." end - ~H""" - <.card><%= error_message %> - """ + assigns + |> Map.put(:error_message, error_message) + |> card() end defp render_profile_nav(assigns) do From 8e6eda22d80693c66f5180ae3d4f8edaaa294e03 Mon Sep 17 00:00:00 2001 From: Moxley Stratton Date: Wed, 12 Jul 2023 15:35:53 -0700 Subject: [PATCH 5/9] Fix render_error() 2 --- lib/phoenix_profiler/dashboard.ex | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/phoenix_profiler/dashboard.ex b/lib/phoenix_profiler/dashboard.ex index 48b7669..8fa5bc7 100644 --- a/lib/phoenix_profiler/dashboard.ex +++ b/lib/phoenix_profiler/dashboard.ex @@ -171,9 +171,11 @@ if Code.ensure_loaded?(Phoenix.LiveDashboard) do "This token is not available for this endpoint on this node." end - assigns - |> Map.put(:error_message, error_message) - |> card() + assigns = Map.put(assigns, :error_message, error_message) + + ~H""" + <.card><%= @error_message %> + """ end defp render_profile_nav(assigns) do From 36d82d7bd919e7146d78d4714f12df1afa48717f Mon Sep 17 00:00:00 2001 From: Moxley Stratton Date: Wed, 12 Jul 2023 15:53:52 -0700 Subject: [PATCH 6/9] Fix layout spec warnings at startup --- dev.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev.exs b/dev.exs index 60f2d05..6ddc287 100644 --- a/dev.exs +++ b/dev.exs @@ -131,7 +131,7 @@ defmodule DemoWeb.PageView do end defmodule EmbeddedLive.Switch do - use Phoenix.LiveView, layout: {DemoWeb.LayoutView, "live.html"} + use Phoenix.LiveView, layout: {DemoWeb.LayoutView, :live} on_mount PhoenixProfiler @@ -204,7 +204,7 @@ defmodule DemoWeb.AppLive.Hooks do end defmodule DemoWeb.AppLive.Index do - use Phoenix.LiveView, layout: {DemoWeb.LayoutView, "live.html"} + use Phoenix.LiveView, layout: {DemoWeb.LayoutView, :live} use Phoenix.HTML alias DemoWeb.Router.Helpers, as: Routes From 5fc58386532a0144c7b90eefcc6bf9d0d5be7866 Mon Sep 17 00:00:00 2001 From: Moxley Stratton Date: Wed, 12 Jul 2023 15:55:15 -0700 Subject: [PATCH 7/9] Resolve flash warning in layout/app --- dev/templates/layout/app.html.heex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/templates/layout/app.html.heex b/dev/templates/layout/app.html.heex index 169aed9..f42e0c4 100644 --- a/dev/templates/layout/app.html.heex +++ b/dev/templates/layout/app.html.heex @@ -1,5 +1,5 @@
- - + + <%= @inner_content %>
From 1b4f276124cff4d8f150793bdafcd5db1084085c Mon Sep 17 00:00:00 2001 From: Moxley Stratton Date: Wed, 12 Jul 2023 16:09:50 -0700 Subject: [PATCH 8/9] Fix flash warning --- dev/templates/layout/app.html.heex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/templates/layout/app.html.heex b/dev/templates/layout/app.html.heex index f42e0c4..78ab6e2 100644 --- a/dev/templates/layout/app.html.heex +++ b/dev/templates/layout/app.html.heex @@ -1,5 +1,5 @@
- - + + <%= @inner_content %>
From 96ff3399e9dd980ab714c003e84c098e2a87796f Mon Sep 17 00:00:00 2001 From: Moxley Stratton Date: Wed, 12 Jul 2023 16:11:44 -0700 Subject: [PATCH 9/9] Fix rendering profile columns --- lib/phoenix_profiler/dashboard.ex | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/phoenix_profiler/dashboard.ex b/lib/phoenix_profiler/dashboard.ex index 8fa5bc7..0f7f386 100644 --- a/lib/phoenix_profiler/dashboard.ex +++ b/lib/phoenix_profiler/dashboard.ex @@ -267,12 +267,22 @@ if Code.ensure_loaded?(Phoenix.LiveDashboard) do sortable={col[:sortable]} :let={value} > - <%= if(col.format, do: col.format.(value), else: value) %> + <%= render_profile_column(col, value) %> """ end + defp render_profile_column(col, data) do + value = data[col.field] + + if col[:format] do + col.format.(value) + else + value + end + end + defp render_params_table(conn, field, title \\ nil) do row_fetcher = fn %{sort_by: sort_by, sort_dir: sort_dir}, _node -> rows =