From a9aba1b7d1c20b6c27aceccea4405c00cfbb016a Mon Sep 17 00:00:00 2001 From: Hubert Kasprzycki Date: Tue, 6 May 2025 14:41:38 +0200 Subject: [PATCH 1/7] Add input component --- lib/live_debugger_web/components.ex | 51 +++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/lib/live_debugger_web/components.ex b/lib/live_debugger_web/components.ex index d08475a42..b5a9dc323 100644 --- a/lib/live_debugger_web/components.ex +++ b/lib/live_debugger_web/components.ex @@ -72,6 +72,57 @@ defmodule LiveDebuggerWeb.Components do """ end + @doc """ + Renders an input with label. + """ + attr(:id, :any, default: nil) + attr(:name, :any) + attr(:label, :string, default: nil) + attr(:value, :any) + + attr(:type, :string, + default: "text", + values: ~w(checkbox color date datetime-local email file month number password + range search select tel text textarea time url week) + ) + + attr(:field, Phoenix.HTML.FormField, required: true) + + attr(:rest, :global, + include: ~w(accept autocomplete capture cols disabled form list max maxlength min minlength + multiple pattern placeholder readonly required rows size step) + ) + + slot(:inner_block) + + def input(%{field: %Phoenix.HTML.FormField{} = field} = assigns) do + assigns = + assigns + |> assign(field: nil, id: assigns.id || field.id) + |> assign_new(:name, fn -> field.name end) + |> assign_new(:value, fn -> field.value end) + + ~H""" +
+ + +
+ """ + end + @doc """ Renders a button. From bcf8b5aa11abd00d28f8f450698c9e53b7c93f4c Mon Sep 17 00:00:00 2001 From: Hubert Kasprzycki Date: Tue, 6 May 2025 14:47:47 +0200 Subject: [PATCH 2/7] Add form inputs for filtering by execution time --- .../helpers/tracing_helper.ex | 4 +-- lib/live_debugger_web/live/traces_live.ex | 25 +++++++++----- .../live_components/filters_form.ex | 33 ++++++++++++++----- 3 files changed, 43 insertions(+), 19 deletions(-) diff --git a/lib/live_debugger_web/helpers/tracing_helper.ex b/lib/live_debugger_web/helpers/tracing_helper.ex index 773006bb1..689296ef3 100644 --- a/lib/live_debugger_web/helpers/tracing_helper.ex +++ b/lib/live_debugger_web/helpers/tracing_helper.ex @@ -123,7 +123,7 @@ defmodule LiveDebuggerWeb.Helpers.TracingHelper do lv_process = socket.assigns.lv_process node_id = socket.assigns.node_id - socket.assigns.current_filters + socket.assigns.current_filters.functions |> Enum.filter(fn {_, active?} -> active? end) |> Enum.map(fn {function, _} -> PubSubUtils.tsnf_topic(lv_process.socket_id, lv_process.transport_pid, node_id, function) @@ -134,7 +134,7 @@ defmodule LiveDebuggerWeb.Helpers.TracingHelper do lv_process = socket.assigns.lv_process node_id = socket.assigns.node_id - socket.assigns.current_filters + socket.assigns.current_filters.functions |> Enum.map(fn {function, _} -> PubSubUtils.tsnf_topic(lv_process.socket_id, lv_process.transport_pid, node_id, function) end) diff --git a/lib/live_debugger_web/live/traces_live.ex b/lib/live_debugger_web/live/traces_live.ex index 9f69ef060..b839cd0eb 100644 --- a/lib/live_debugger_web/live/traces_live.ex +++ b/lib/live_debugger_web/live/traces_live.ex @@ -383,17 +383,26 @@ defmodule LiveDebuggerWeb.TracesLive do end defp default_filters(node_id) do - node_id - |> TreeNode.type() - |> case do - :live_view -> UtilsCallbacks.live_view_callbacks() - :live_component -> UtilsCallbacks.live_component_callbacks() - end - |> Enum.map(fn {function, _} -> {function, true} end) + functions = + node_id + |> TreeNode.type() + |> case do + :live_view -> UtilsCallbacks.live_view_callbacks() + :live_component -> UtilsCallbacks.live_component_callbacks() + end + |> Enum.map(fn {function, _} -> {function, true} end) + + %{ + functions: functions, + time: [ + {:exec_time_max, ""}, + {:exec_time_min, "0"} + ] + } end defp get_active_functions(socket) do - socket.assigns.current_filters + socket.assigns.current_filters.functions |> Enum.filter(fn {_, active?} -> active? end) |> Enum.map(fn {function, _} -> function end) end diff --git a/lib/live_debugger_web/live_components/filters_form.ex b/lib/live_debugger_web/live_components/filters_form.ex index 106aca19c..e1fd70767 100644 --- a/lib/live_debugger_web/live_components/filters_form.ex +++ b/lib/live_debugger_web/live_components/filters_form.ex @@ -21,7 +21,8 @@ defmodule LiveDebuggerWeb.LiveComponents.FiltersForm do @impl true def render(assigns) do - assigns = assign(assigns, :selected_filters_number, calculate_selected_filters(assigns.form)) + assigns = + assign(assigns, :selected_filters_number, calculate_selected_filters(assigns.form) - 2) ~H"""
"-wrapper"}> @@ -34,6 +35,11 @@ defmodule LiveDebuggerWeb.LiveComponents.FiltersForm do <.checkbox field={@form[function]} label={"#{function}/#{arity}"} /> <% end %>
+

Callback execution time

+
+ <.input label="max [us]" field={@form[:exec_time_max]} type="number" min="0" /> + <.input label="min [us]" field={@form[:exec_time_min]} type="number" min="0" /> +