From 95a1e57ece09923512ff50310e2f6716d5603f70 Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 12:42:51 +0100 Subject: [PATCH 01/13] Removed rate limiter --- .../live_components/traces_list.ex | 7 +-- .../live_views/channel_dashboard.ex | 20 +------ .../services/trace_rate_limiter.ex | 57 ------------------- 3 files changed, 5 insertions(+), 79 deletions(-) delete mode 100644 lib/live_debugger/services/trace_rate_limiter.ex diff --git a/lib/live_debugger/live_components/traces_list.ex b/lib/live_debugger/live_components/traces_list.ex index d2dcb53..b085f35 100644 --- a/lib/live_debugger/live_components/traces_list.ex +++ b/lib/live_debugger/live_components/traces_list.ex @@ -25,12 +25,9 @@ defmodule LiveDebugger.LiveComponents.TracesList do end @impl true - def update( - %{new_trace: %{trace: trace, counter: counter}}, - %{assigns: %{tracing_started?: true}} = socket - ) do + def update(%{new_trace: trace}, %{assigns: %{tracing_started?: true}} = socket) do socket - |> stream_insert(:existing_traces, TraceDisplay.form_live_trace(trace, counter), + |> stream_insert(:existing_traces, TraceDisplay.form_live_trace(trace, 1), at: 0, limit: @stream_limit ) diff --git a/lib/live_debugger/live_views/channel_dashboard.ex b/lib/live_debugger/live_views/channel_dashboard.ex index 9bc9f60..5a6608c 100644 --- a/lib/live_debugger/live_views/channel_dashboard.ex +++ b/lib/live_debugger/live_views/channel_dashboard.ex @@ -19,7 +19,6 @@ defmodule LiveDebugger.LiveViews.ChannelDashboard do |> assign(:socket_id, socket_id) |> assign(:tracing_session, nil) |> assign(:debugged_module, nil) - |> assign_rate_limiter_pid() |> assign_async_debugged_pid() |> assign_base_url() |> ok() @@ -103,7 +102,7 @@ defmodule LiveDebugger.LiveViews.ChannelDashboard do Process.monitor(fetched_pid) socket.assigns.socket_id - |> CallbackTracingService.start_tracing(fetched_pid, socket.assigns.rate_limiter_pid) + |> CallbackTracingService.start_tracing(fetched_pid, self()) |> case do {:ok, tracing_session} -> socket @@ -139,15 +138,11 @@ defmodule LiveDebugger.LiveViews.ChannelDashboard do end @impl true - def handle_info({:new_trace, %{trace: trace, counter: _} = wrapped_trace}, socket) do + def handle_info({:new_trace, trace}, socket) do debugged_node_id = socket.assigns.node_id || socket.assigns.debugged_pid.result if Trace.node_id(trace) == debugged_node_id do - send_update(LiveDebugger.LiveComponents.TracesList, %{ - id: "trace-list", - new_trace: wrapped_trace - }) - + send_update(LiveDebugger.LiveComponents.TracesList, %{id: "trace-list", new_trace: trace}) send_update(LiveDebugger.LiveComponents.DetailView, %{id: "detail_view", new_trace: trace}) end @@ -200,15 +195,6 @@ defmodule LiveDebugger.LiveViews.ChannelDashboard do end) end - defp assign_rate_limiter_pid(socket) do - if connected?(socket) do - {:ok, pid} = LiveDebugger.Services.TraceRateLimiter.start_link() - assign(socket, :rate_limiter_pid, pid) - else - assign(socket, :rate_limiter_pid, nil) - end - end - defp fetch_pid_after(socket_id, milliseconds) do Process.sleep(milliseconds) LiveViewDiscoveryService.live_pid(socket_id) diff --git a/lib/live_debugger/services/trace_rate_limiter.ex b/lib/live_debugger/services/trace_rate_limiter.ex deleted file mode 100644 index c24ca78..0000000 --- a/lib/live_debugger/services/trace_rate_limiter.ex +++ /dev/null @@ -1,57 +0,0 @@ -defmodule LiveDebugger.Services.TraceRateLimiter do - @moduledoc """ - This module provides a rate limiter for traces. - It should be used as a proxy between the `:dbg` tracer and LiveDebugger dashboard. - It limits the number of traces that are sent to the dashboard. - You can configure the number of traces and the period in which they are counted via module attributes. - """ - use GenServer - - @traces_number 25 - - @period_ms 1000 - @interval_ms div(@period_ms, @traces_number) - - def start_link(target_pid \\ self()) do - GenServer.start_link(__MODULE__, %{target_pid: target_pid}) - end - - @impl true - def init(%{target_pid: target_pid}) do - schedule_processing() - {:ok, %{target_pid: target_pid, traces: []}} - end - - @impl true - def handle_info(:__do_process__, state) do - schedule_processing() - - state.traces - |> Enum.reverse() - |> Enum.each(fn {_key, %{last_trace: trace, counter: counter}} -> - send(state.target_pid, {:new_trace, %{trace: trace, counter: counter}}) - end) - - {:noreply, %{state | traces: []}} - end - - @impl true - def handle_info({:new_trace, %{function: key} = trace}, %{traces: traces} = state) do - updated_traces = - traces - |> Keyword.get(key) - |> case do - nil -> - Keyword.put(traces, key, %{last_trace: trace, counter: 1}) - - %{counter: counter} -> - Keyword.put(traces, key, %{last_trace: trace, counter: counter + 1}) - end - - {:noreply, %{state | traces: updated_traces}} - end - - defp schedule_processing() do - Process.send_after(self(), :__do_process__, @interval_ms) - end -end From 708690ae084ff6b50745da168bf0a18cb702f96a Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 14:38:45 +0100 Subject: [PATCH 02/13] Added raw version of fuse --- .../live_components/traces_list.ex | 54 ++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/lib/live_debugger/live_components/traces_list.ex b/lib/live_debugger/live_components/traces_list.ex index b085f35..8050cdd 100644 --- a/lib/live_debugger/live_components/traces_list.ex +++ b/lib/live_debugger/live_components/traces_list.ex @@ -21,17 +21,49 @@ defmodule LiveDebugger.LiveComponents.TracesList do socket |> assign(:tracing_started?, false) |> assign(:displayed_trace, nil) + |> assign(:tracing_rate_limit_params, nil) |> ok() end @impl true def update(%{new_trace: trace}, %{assigns: %{tracing_started?: true}} = socket) do - socket - |> stream_insert(:existing_traces, TraceDisplay.form_live_trace(trace, 1), - at: 0, - limit: @stream_limit - ) - |> ok() + current_time = :os.system_time(:microsecond) + rl_params = socket.assigns.tracing_rate_limit_params + + current_count = + if dbg(current_time - rl_params.start_time) < 5_000_000 do + rl_params.count + 1 + else + :reset + end + + dbg(current_count) + + case current_count do + :reset -> + socket + |> assign(:tracing_rate_limit_params, %{count: 0, start_time: current_time}) + |> stream_insert(:existing_traces, TraceDisplay.form_live_trace(trace, 1), + at: 0, + limit: @stream_limit + ) + |> ok() + + current_count when current_count < 100 -> + socket + |> assign(:tracing_rate_limit_params, %{rl_params | count: current_count}) + |> stream_insert(:existing_traces, TraceDisplay.form_live_trace(trace, 1), + at: 0, + limit: @stream_limit + ) + |> ok() + + _ -> + socket + |> assign(:tracing_rate_limit_params, %{count: 0, start_time: current_time}) + |> assign(tracing_started?: false) + |> ok() + end end @impl true @@ -122,6 +154,16 @@ defmodule LiveDebugger.LiveComponents.TracesList do def handle_event("switch-tracing", _, socket) do socket |> assign(tracing_started?: not socket.assigns.tracing_started?) + |> case do + %{assigns: %{tracing_started?: true}} = socket -> + assign(socket, :tracing_rate_limit_params, %{ + count: 0, + start_time: :os.system_time(:microsecond) + }) + + %{assigns: %{tracing_started?: false}} = socket -> + assign(socket, :tracing_rate_limit_params, nil) + end |> noreply() end From 5a12d1f1b7baa526a835d5489c4dda0c9e30bc5f Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 15:44:47 +0100 Subject: [PATCH 03/13] Refactored tracing fuse --- .../live_components/traces_list.ex | 67 ++++---------- .../live_helpers/tracing_helper.ex | 88 +++++++++++++++++++ 2 files changed, 103 insertions(+), 52 deletions(-) create mode 100644 lib/live_debugger/live_helpers/tracing_helper.ex diff --git a/lib/live_debugger/live_components/traces_list.ex b/lib/live_debugger/live_components/traces_list.ex index 8050cdd..c0f0de1 100644 --- a/lib/live_debugger/live_components/traces_list.ex +++ b/lib/live_debugger/live_components/traces_list.ex @@ -7,6 +7,7 @@ defmodule LiveDebugger.LiveComponents.TracesList do require Logger + alias LiveDebugger.LiveHelpers.TracingHelper alias LiveDebugger.Structs.Trace alias LiveDebugger.Components.ElixirDisplay alias LiveDebugger.Services.TraceService @@ -19,61 +20,30 @@ defmodule LiveDebugger.LiveComponents.TracesList do @impl true def mount(socket) do socket - |> assign(:tracing_started?, false) |> assign(:displayed_trace, nil) - |> assign(:tracing_rate_limit_params, nil) |> ok() end @impl true - def update(%{new_trace: trace}, %{assigns: %{tracing_started?: true}} = socket) do - current_time = :os.system_time(:microsecond) - rl_params = socket.assigns.tracing_rate_limit_params - - current_count = - if dbg(current_time - rl_params.start_time) < 5_000_000 do - rl_params.count + 1 - else - :reset - end - - dbg(current_count) - - case current_count do - :reset -> - socket - |> assign(:tracing_rate_limit_params, %{count: 0, start_time: current_time}) - |> stream_insert(:existing_traces, TraceDisplay.form_live_trace(trace, 1), - at: 0, - limit: @stream_limit - ) - |> ok() - - current_count when current_count < 100 -> - socket - |> assign(:tracing_rate_limit_params, %{rl_params | count: current_count}) - |> stream_insert(:existing_traces, TraceDisplay.form_live_trace(trace, 1), + def update(%{new_trace: trace}, socket) do + socket + |> TracingHelper.check_fuse() + |> case do + {:ok, socket} -> + stream_insert(socket, :existing_traces, TraceDisplay.form_live_trace(trace, 1), at: 0, limit: @stream_limit ) - |> ok() - _ -> + {:stopped, socket} -> socket - |> assign(:tracing_rate_limit_params, %{count: 0, start_time: current_time}) - |> assign(tracing_started?: false) - |> ok() end - end - - @impl true - def update(%{new_trace: _trace}, %{assigns: %{tracing_started?: false}} = socket) do - {:ok, socket} + |> ok() end def update(assigns, socket) do socket - |> assign(:tracing_started?, false) + |> TracingHelper.init() |> assign(debugged_node_id: assigns.debugged_node_id) |> assign(id: assigns.id) |> assign(ets_table_id: TraceService.ets_table_id(assigns.socket_id)) @@ -92,7 +62,10 @@ defmodule LiveDebugger.LiveComponents.TracesList do <.collapsible_section title="Callback traces" id="traces" inner_class="p-4"> <:right_panel>
- <.toggle_tracing_button myself={@myself} tracing_started?={@tracing_started?} /> + <.toggle_tracing_button + myself={@myself} + tracing_started?={@tracing_helper.tracing_started?} + /> <.button variant="secondary" size="sm" phx-click="clear-traces" phx-target={@myself}> Clear @@ -153,17 +126,7 @@ defmodule LiveDebugger.LiveComponents.TracesList do @impl true def handle_event("switch-tracing", _, socket) do socket - |> assign(tracing_started?: not socket.assigns.tracing_started?) - |> case do - %{assigns: %{tracing_started?: true}} = socket -> - assign(socket, :tracing_rate_limit_params, %{ - count: 0, - start_time: :os.system_time(:microsecond) - }) - - %{assigns: %{tracing_started?: false}} = socket -> - assign(socket, :tracing_rate_limit_params, nil) - end + |> TracingHelper.switch_tracing() |> noreply() end diff --git a/lib/live_debugger/live_helpers/tracing_helper.ex b/lib/live_debugger/live_helpers/tracing_helper.ex new file mode 100644 index 0000000..da63c39 --- /dev/null +++ b/lib/live_debugger/live_helpers/tracing_helper.ex @@ -0,0 +1,88 @@ +defmodule LiveDebugger.LiveHelpers.TracingHelper do + @moduledoc """ + This module provides a helper to manage tracing. + It is responsible for determining if the tracing should be stopped. + It introduces a fuse mechanism to prevent LiveView from being overloaded with traces. + """ + + import Phoenix.Component, only: [assign: 3] + + alias Phoenix.LiveView.Socket + + @assign_name :tracing_helper + @time_period 1_000_000 + @trace_number_per_period 50 + + @spec init(Socket.t()) :: Socket.t() + def init(socket) do + stop_tracing(socket) + end + + @spec switch_tracing(Socket.t()) :: Socket.t() + def switch_tracing(socket) do + case socket.assigns[@assign_name].tracing_started? do + true -> stop_tracing(socket) + false -> start_tracing(socket) + end + end + + @spec check_fuse(Socket.t()) :: {:ok, Socket.t()} | {:stopped, Socket.t()} + def check_fuse(%{assigns: %{@assign_name => %{tracing_started?: false}}} = socket) do + {:stopped, socket} + end + + def check_fuse(%{assigns: %{@assign_name => %{tracing_started?: true}}} = socket) do + fuse = socket.assigns[@assign_name].fuse + + cond do + period_exceeded?(fuse) -> {:ok, reset_fuse(socket)} + count_exceeded?(fuse) -> {:stopped, stop_tracing(socket)} + true -> {:ok, increment_fuse(socket)} + end + end + + defp period_exceeded?(fuse) do + now() - fuse.start_time >= @time_period + end + + defp count_exceeded?(fuse) do + fuse.count + 1 >= @trace_number_per_period + end + + defp increment_fuse(socket) do + fuse = socket.assigns[@assign_name].fuse + + assigns = %{ + tracing_started?: true, + fuse: %{fuse | count: fuse.count + 1} + } + + assign(socket, @assign_name, assigns) + end + + defp reset_fuse(socket) do + start_tracing(socket) + end + + defp start_tracing(socket) do + assigns = %{ + tracing_started?: true, + fuse: %{count: 0, start_time: now()} + } + + assign(socket, @assign_name, assigns) + end + + def stop_tracing(socket) do + assigns = %{ + tracing_started?: false, + fuse: nil + } + + assign(socket, @assign_name, assigns) + end + + defp now() do + :os.system_time(:microsecond) + end +end From cdba0afa2575a79c46220ac9b02b4b6d2c3776f2 Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 15:45:58 +0100 Subject: [PATCH 04/13] Fixed typo --- lib/live_debugger/live_components/traces_list.ex | 2 +- lib/live_debugger/structs/trace_display.ex | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/live_debugger/live_components/traces_list.ex b/lib/live_debugger/live_components/traces_list.ex index c0f0de1..8bc0728 100644 --- a/lib/live_debugger/live_components/traces_list.ex +++ b/lib/live_debugger/live_components/traces_list.ex @@ -30,7 +30,7 @@ defmodule LiveDebugger.LiveComponents.TracesList do |> TracingHelper.check_fuse() |> case do {:ok, socket} -> - stream_insert(socket, :existing_traces, TraceDisplay.form_live_trace(trace, 1), + stream_insert(socket, :existing_traces, TraceDisplay.from_live_trace(trace, 1), at: 0, limit: @stream_limit ) diff --git a/lib/live_debugger/structs/trace_display.ex b/lib/live_debugger/structs/trace_display.ex index a635fd8..5673474 100644 --- a/lib/live_debugger/structs/trace_display.ex +++ b/lib/live_debugger/structs/trace_display.ex @@ -11,15 +11,14 @@ defmodule LiveDebugger.Structs.TraceDisplay do @type t() :: %__MODULE__{ id: integer(), trace: Trace.t(), - render_body?: boolean(), - counter: non_neg_integer() | nil + render_body?: boolean() } def from_historical_trace(%Trace{} = trace) do %__MODULE__{id: trace.id, trace: trace, render_body?: true} end - def form_live_trace(%Trace{} = trace, counter) do + def from_live_trace(%Trace{} = trace, counter) do %__MODULE__{id: trace.id, trace: trace, render_body?: false, counter: counter} end From 6fb20cdf1cb12d5098524ace25a7c13370692645 Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 15:53:25 +0100 Subject: [PATCH 05/13] Removed counter --- .../live_components/traces_list.ex | 20 +++---------------- lib/live_debugger/structs/trace_display.ex | 4 ++-- 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/lib/live_debugger/live_components/traces_list.ex b/lib/live_debugger/live_components/traces_list.ex index 8bc0728..dfab983 100644 --- a/lib/live_debugger/live_components/traces_list.ex +++ b/lib/live_debugger/live_components/traces_list.ex @@ -30,10 +30,8 @@ defmodule LiveDebugger.LiveComponents.TracesList do |> TracingHelper.check_fuse() |> case do {:ok, socket} -> - stream_insert(socket, :existing_traces, TraceDisplay.from_live_trace(trace, 1), - at: 0, - limit: @stream_limit - ) + trace_display = TraceDisplay.from_live_trace(trace) + stream_insert(socket, :existing_traces, trace_display, at: 0, limit: @stream_limit) {:stopped, socket} -> socket @@ -211,7 +209,6 @@ defmodule LiveDebugger.LiveComponents.TracesList do |> assign(:trace, assigns.wrapped_trace.trace) |> assign(:render_body?, assigns.wrapped_trace.render_body?) |> assign(:callback_name, Trace.callback_name(assigns.wrapped_trace.trace)) - |> assign(:counter, assigns.wrapped_trace.counter) ~H""" <.collapsible @@ -230,10 +227,7 @@ defmodule LiveDebugger.LiveComponents.TracesList do class="w-[90%] grow flex items-center ml-2 gap-1.5" phx-update="ignore" > -
-

<%= @callback_name %>

- <.aggregate_count :if={@counter && @counter > 1} count={@counter} /> -
+

<%= @callback_name %>

<.short_trace_content trace={@trace} />

<%= Parsers.parse_timestamp(@trace.timestamp) %> @@ -263,14 +257,6 @@ defmodule LiveDebugger.LiveComponents.TracesList do """ end - defp aggregate_count(assigns) do - ~H""" - - +<%= assigns.count %> - - """ - end - defp short_trace_content(assigns) do assigns = assign(assigns, :content, Enum.map_join(assigns.trace.args, " ", &inspect/1)) diff --git a/lib/live_debugger/structs/trace_display.ex b/lib/live_debugger/structs/trace_display.ex index 5673474..53a5fcb 100644 --- a/lib/live_debugger/structs/trace_display.ex +++ b/lib/live_debugger/structs/trace_display.ex @@ -18,8 +18,8 @@ defmodule LiveDebugger.Structs.TraceDisplay do %__MODULE__{id: trace.id, trace: trace, render_body?: true} end - def from_live_trace(%Trace{} = trace, counter) do - %__MODULE__{id: trace.id, trace: trace, render_body?: false, counter: counter} + def from_live_trace(%Trace{} = trace) do + %__MODULE__{id: trace.id, trace: trace, render_body?: false} end def render_body(%__MODULE__{} = trace) do From 30d0afd4f401d4bad0e39cdb790302a7fd4b6f7b Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 15:55:45 +0100 Subject: [PATCH 06/13] Changed trace limit --- lib/live_debugger/live_helpers/tracing_helper.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/live_debugger/live_helpers/tracing_helper.ex b/lib/live_debugger/live_helpers/tracing_helper.ex index da63c39..cfc53f2 100644 --- a/lib/live_debugger/live_helpers/tracing_helper.ex +++ b/lib/live_debugger/live_helpers/tracing_helper.ex @@ -11,7 +11,7 @@ defmodule LiveDebugger.LiveHelpers.TracingHelper do @assign_name :tracing_helper @time_period 1_000_000 - @trace_number_per_period 50 + @trace_limit_per_period 100 @spec init(Socket.t()) :: Socket.t() def init(socket) do @@ -46,7 +46,7 @@ defmodule LiveDebugger.LiveHelpers.TracingHelper do end defp count_exceeded?(fuse) do - fuse.count + 1 >= @trace_number_per_period + fuse.count + 1 >= @trace_limit_per_period end defp increment_fuse(socket) do From 3d9e74b33fbda8574c5874819fc374a8eaeab567 Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 15:59:46 +0100 Subject: [PATCH 07/13] Changed process sleep in dev --- dev/live_views/side.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/live_views/side.ex b/dev/live_views/side.ex index 63f238c..9e343a3 100644 --- a/dev/live_views/side.ex +++ b/dev/live_views/side.ex @@ -6,7 +6,7 @@ defmodule LiveDebuggerDev.LiveViews.Side do Task.start(fn -> for _ <- 1..100_000 do - Process.sleep(10) + Process.sleep(8) send(current_pid, :hello) end end) From d099191146312467b14b64b6a2eb17c8d7973e21 Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 16:10:26 +0100 Subject: [PATCH 08/13] Added button for refreshing trace history --- .../live_components/traces_list.ex | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/live_debugger/live_components/traces_list.ex b/lib/live_debugger/live_components/traces_list.ex index dfab983..402825a 100644 --- a/lib/live_debugger/live_components/traces_list.ex +++ b/lib/live_debugger/live_components/traces_list.ex @@ -64,7 +64,23 @@ defmodule LiveDebugger.LiveComponents.TracesList do myself={@myself} tracing_started?={@tracing_helper.tracing_started?} /> - <.button variant="secondary" size="sm" phx-click="clear-traces" phx-target={@myself}> + <.button + :if={not @tracing_helper.tracing_started?} + phx-click="refresh-history" + phx-target={@myself} + class="flex gap-2" + variant="secondary" + size="sm" + > + Refresh + + <.button + :if={not @tracing_helper.tracing_started?} + variant="secondary" + size="sm" + phx-click="clear-traces" + phx-target={@myself} + > Clear

@@ -180,6 +196,13 @@ defmodule LiveDebugger.LiveComponents.TracesList do |> noreply() end + @impl true + def handle_event("refresh-history", _, socket) do + socket + |> assign_async_existing_traces() + |> noreply() + end + attr(:tracing_started?, :boolean, required: true) attr(:myself, :any, required: true) From fee6c398b612a0645eb107d58336f9c16cbfc09f Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 16:49:15 +0100 Subject: [PATCH 09/13] More states in check fuse --- lib/live_debugger/live_components/traces_list.ex | 2 +- lib/live_debugger/live_helpers/tracing_helper.ex | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/live_debugger/live_components/traces_list.ex b/lib/live_debugger/live_components/traces_list.ex index 402825a..321a46f 100644 --- a/lib/live_debugger/live_components/traces_list.ex +++ b/lib/live_debugger/live_components/traces_list.ex @@ -33,7 +33,7 @@ defmodule LiveDebugger.LiveComponents.TracesList do trace_display = TraceDisplay.from_live_trace(trace) stream_insert(socket, :existing_traces, trace_display, at: 0, limit: @stream_limit) - {:stopped, socket} -> + {_, socket} -> socket end |> ok() diff --git a/lib/live_debugger/live_helpers/tracing_helper.ex b/lib/live_debugger/live_helpers/tracing_helper.ex index cfc53f2..ea3bd35 100644 --- a/lib/live_debugger/live_helpers/tracing_helper.ex +++ b/lib/live_debugger/live_helpers/tracing_helper.ex @@ -26,9 +26,9 @@ defmodule LiveDebugger.LiveHelpers.TracingHelper do end end - @spec check_fuse(Socket.t()) :: {:ok, Socket.t()} | {:stopped, Socket.t()} + @spec check_fuse(Socket.t()) :: {:ok | :stopped | :noop, Socket.t()} def check_fuse(%{assigns: %{@assign_name => %{tracing_started?: false}}} = socket) do - {:stopped, socket} + {:noop, socket} end def check_fuse(%{assigns: %{@assign_name => %{tracing_started?: true}}} = socket) do From 67b3b787e8dcd992843476afe8717934b28f4c0d Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 16:55:10 +0100 Subject: [PATCH 10/13] Added comment --- lib/live_debugger/live_components/traces_list.ex | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/live_debugger/live_components/traces_list.ex b/lib/live_debugger/live_components/traces_list.ex index 321a46f..8887a34 100644 --- a/lib/live_debugger/live_components/traces_list.ex +++ b/lib/live_debugger/live_components/traces_list.ex @@ -34,6 +34,7 @@ defmodule LiveDebugger.LiveComponents.TracesList do stream_insert(socket, :existing_traces, trace_display, at: 0, limit: @stream_limit) {_, socket} -> + # Add disappearing flash here in case of :stopped socket end |> ok() From a5afe5e7da3103d1f5d85c27b49c9dd98579f54d Mon Sep 17 00:00:00 2001 From: kraleppa Date: Wed, 5 Mar 2025 16:58:51 +0100 Subject: [PATCH 11/13] Post merge fix --- lib/live_debugger/live_views/channel_dashboard.ex | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/live_debugger/live_views/channel_dashboard.ex b/lib/live_debugger/live_views/channel_dashboard.ex index 0d2aa72..97363b6 100644 --- a/lib/live_debugger/live_views/channel_dashboard.ex +++ b/lib/live_debugger/live_views/channel_dashboard.ex @@ -18,7 +18,6 @@ defmodule LiveDebugger.LiveViews.ChannelDashboard do |> assign(:socket_id, socket_id) |> assign(:tracing_session, nil) |> assign(:debugged_module, nil) - |> assign_rate_limiter_pid() |> assign_async_debugged_lv_process() |> assign_base_url() |> ok() From 83d45c97762bc8a1befbfdab47e20d3fc5063400 Mon Sep 17 00:00:00 2001 From: Alan Guzek Date: Fri, 7 Mar 2025 13:13:51 +0100 Subject: [PATCH 12/13] add info, use if statement --- lib/live_debugger/live_components/traces_list.ex | 2 +- lib/live_debugger/live_helpers/tracing_helper.ex | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/live_debugger/live_components/traces_list.ex b/lib/live_debugger/live_components/traces_list.ex index 8887a34..0f356fb 100644 --- a/lib/live_debugger/live_components/traces_list.ex +++ b/lib/live_debugger/live_components/traces_list.ex @@ -34,7 +34,7 @@ defmodule LiveDebugger.LiveComponents.TracesList do stream_insert(socket, :existing_traces, trace_display, at: 0, limit: @stream_limit) {_, socket} -> - # Add disappearing flash here in case of :stopped + # Add disappearing flash here in case of :stopped. (Issue 173) socket end |> ok() diff --git a/lib/live_debugger/live_helpers/tracing_helper.ex b/lib/live_debugger/live_helpers/tracing_helper.ex index ea3bd35..89140b7 100644 --- a/lib/live_debugger/live_helpers/tracing_helper.ex +++ b/lib/live_debugger/live_helpers/tracing_helper.ex @@ -20,12 +20,18 @@ defmodule LiveDebugger.LiveHelpers.TracingHelper do @spec switch_tracing(Socket.t()) :: Socket.t() def switch_tracing(socket) do - case socket.assigns[@assign_name].tracing_started? do - true -> stop_tracing(socket) - false -> start_tracing(socket) + if socket.assigns[@assign_name].tracing_started? do + stop_tracing(socket) + else + start_tracing(socket) end end + @doc """ + Checks if the fuse is blown and stops tracing if it is. + It uses the `#{@assign_name}` assign to store information. + When tracing is not started returns `{:noop, socket}`. + """ @spec check_fuse(Socket.t()) :: {:ok | :stopped | :noop, Socket.t()} def check_fuse(%{assigns: %{@assign_name => %{tracing_started?: false}}} = socket) do {:noop, socket} From 35cba856ff12353b580121d99b434fd495aa535d Mon Sep 17 00:00:00 2001 From: Alan Guzek Date: Fri, 7 Mar 2025 13:14:03 +0100 Subject: [PATCH 13/13] change function name --- lib/live_debugger/live_helpers/tracing_helper.ex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/live_debugger/live_helpers/tracing_helper.ex b/lib/live_debugger/live_helpers/tracing_helper.ex index 89140b7..1bbae65 100644 --- a/lib/live_debugger/live_helpers/tracing_helper.ex +++ b/lib/live_debugger/live_helpers/tracing_helper.ex @@ -15,13 +15,13 @@ defmodule LiveDebugger.LiveHelpers.TracingHelper do @spec init(Socket.t()) :: Socket.t() def init(socket) do - stop_tracing(socket) + clear_tracing(socket) end @spec switch_tracing(Socket.t()) :: Socket.t() def switch_tracing(socket) do if socket.assigns[@assign_name].tracing_started? do - stop_tracing(socket) + clear_tracing(socket) else start_tracing(socket) end @@ -42,7 +42,7 @@ defmodule LiveDebugger.LiveHelpers.TracingHelper do cond do period_exceeded?(fuse) -> {:ok, reset_fuse(socket)} - count_exceeded?(fuse) -> {:stopped, stop_tracing(socket)} + count_exceeded?(fuse) -> {:stopped, clear_tracing(socket)} true -> {:ok, increment_fuse(socket)} end end @@ -79,7 +79,7 @@ defmodule LiveDebugger.LiveHelpers.TracingHelper do assign(socket, @assign_name, assigns) end - def stop_tracing(socket) do + def clear_tracing(socket) do assigns = %{ tracing_started?: false, fuse: nil