<% end %>
-
-
-
{Jason.encode!(@chart_tree_data)}
+
+
+
{Jason.encode!(@chart_tree_data)}
<%= if @current_selected_id.type == "pid" do %>
@@ -157,13 +157,17 @@ defmodule Observer.Web.Apps.Page do
|> assign(:show_observer_options, false)
end
+ # coveralls-ignore-start
@impl Phoenix.LiveComponent
def handle_event(message, value, socket) do
# Redirect message to the parent process
+ # Testing is not possible since there is no mechanism to send a message to a component
send(self(), {message, value})
{:noreply, socket}
end
+ # coveralls-ignore-stop
+
@impl Page
def handle_params(params, _uri, socket) do
{:noreply, apply_action(socket, socket.assigns.live_action, params)}
@@ -186,7 +190,7 @@ defmodule Observer.Web.Apps.Page do
end
def handle_parent_event(
- "observer-apps-update",
+ "apps-apps-update",
_data,
%{assigns: %{observer_data: observer_data}} = socket
) do
diff --git a/lib/web/pages/tracing/page.ex b/lib/web/pages/tracing/page.ex
index 4b02148..c8e65d9 100644
--- a/lib/web/pages/tracing/page.ex
+++ b/lib/web/pages/tracing/page.ex
@@ -147,6 +147,7 @@ defmodule Observer.Web.Tracing.Page do
%{name: "match_spec", keys: @unselected_match_spec_keys, info: @match_spec_info}
]}
show_options={@show_tracing_options}
+ form_search={@form_search}
/>
@@ -179,6 +180,7 @@ defmodule Observer.Web.Tracing.Page do
|> assign(:trace_session_id, nil)
|> assign(:show_tracing_options, false)
|> assign(:form, to_form(default_form_options()))
+ |> assign(:form_search, to_form(default_form_search_options()))
|> stream(:tracing_messages, [])
end
@@ -214,6 +216,21 @@ defmodule Observer.Web.Tracing.Page do
)}
end
+ def handle_parent_event(
+ "form-multi-select-list-update-search",
+ %{"_target" => target} = values,
+ socket
+ ) do
+ new_params = Enum.reduce(target, %{}, fn key, acc -> Map.put(acc, key, values[key]) end)
+
+ form_search =
+ socket.assigns.form_search.params
+ |> Map.merge(new_params)
+ |> to_form()
+
+ {:noreply, assign(socket, form_search: form_search)}
+ end
+
def handle_parent_event(
"tracing-apps-stop",
_data,
@@ -485,6 +502,8 @@ defmodule Observer.Web.Tracing.Page do
}
end
+ defp default_form_search_options, do: %{"modules" => "", "functions" => ""}
+
defp node_info_new do
match_spec_keys =
Tracer.get_default_functions_matchspecs()
diff --git a/test/observer_web/apps/helper_test.exs b/test/observer_web/apps/helper_test.exs
new file mode 100644
index 0000000..ad4c586
--- /dev/null
+++ b/test/observer_web/apps/helper_test.exs
@@ -0,0 +1,5 @@
+defmodule ObserverWeb.Apps.HelperTest do
+ use ExUnit.Case, async: true
+
+ doctest ObserverWeb.Apps.Helper
+end
diff --git a/test/observer_web/helpers_test.exs b/test/observer_web/helpers_test.exs
index 9ce5876..36bbaaa 100644
--- a/test/observer_web/helpers_test.exs
+++ b/test/observer_web/helpers_test.exs
@@ -1,19 +1,5 @@
defmodule Observer.Web.HelpersTest do
use ExUnit.Case, async: true
- alias Observer.Web.Helpers
-
- describe "encode_params/1" do
- import Helpers, only: [encode_params: 1]
-
- test "encoding fields with multiple values" do
- assert [nodes: "web-1,web-2"] = encode_params(nodes: ~w(web-1 web-2))
- end
-
- test "encoding fields with path qualifiers" do
- assert [args: "a++x"] = encode_params(args: [~w(a), "x"])
- assert [args: "a,b++x"] = encode_params(args: [~w(a b), "x"])
- assert [args: "a,b,c++x"] = encode_params(args: [~w(a b c), "x"])
- end
- end
+ doctest Observer.Web.Helpers
end
diff --git a/test/observer_web/web/live/apps_test.exs b/test/observer_web/web/live/apps_test.exs
index 79a9e81..d2ef07b 100644
--- a/test/observer_web/web/live/apps_test.exs
+++ b/test/observer_web/web/live/apps_test.exs
@@ -32,14 +32,14 @@ defmodule Observer.Web.AppsLiveTest do
html =
index_live
- |> element("#observer-multi-select-toggle-options")
+ |> element("#apps-multi-select-toggle-options")
|> render_click()
refute html =~ "4242"
html =
index_live
- |> element("#observer-update-form")
+ |> element("#apps-update-form")
|> render_change(%{initial_tree_depth: "4242"})
assert html =~ "4242"
@@ -58,16 +58,16 @@ defmodule Observer.Web.AppsLiveTest do
{:ok, index_live, _html} = live(conn, "/observer/applications")
index_live
- |> element("#observer-multi-select-toggle-options")
+ |> element("#apps-multi-select-toggle-options")
|> render_click()
index_live
- |> element("#observer-multi-select-services-#{service}-add-item")
+ |> element("#apps-multi-select-services-#{service}-add-item")
|> render_click()
html =
index_live
- |> element("#observer-multi-select-apps-kernel-add-item")
+ |> element("#apps-multi-select-apps-kernel-add-item")
|> render_click()
assert html =~ "services:#{node}"
@@ -75,7 +75,7 @@ defmodule Observer.Web.AppsLiveTest do
html =
index_live
- |> element("#observer-multi-select-apps-kernel-remove-item")
+ |> element("#apps-multi-select-apps-kernel-remove-item")
|> render_click()
assert html =~ "services:#{node}"
@@ -83,7 +83,7 @@ defmodule Observer.Web.AppsLiveTest do
html =
index_live
- |> element("#observer-multi-select-services-#{service}-remove-item")
+ |> element("#apps-multi-select-services-#{service}-remove-item")
|> render_click()
refute html =~ "services:#{node}"
@@ -103,16 +103,16 @@ defmodule Observer.Web.AppsLiveTest do
{:ok, index_live, _html} = live(conn, "/observer/applications")
index_live
- |> element("#observer-multi-select-toggle-options")
+ |> element("#apps-multi-select-toggle-options")
|> render_click()
index_live
- |> element("#observer-multi-select-apps-kernel-add-item")
+ |> element("#apps-multi-select-apps-kernel-add-item")
|> render_click()
html =
index_live
- |> element("#observer-multi-select-services-#{service}-add-item")
+ |> element("#apps-multi-select-services-#{service}-add-item")
|> render_click()
assert html =~ "services:#{node}"
@@ -120,7 +120,7 @@ defmodule Observer.Web.AppsLiveTest do
html =
index_live
- |> element("#observer-multi-select-services-#{service}-remove-item")
+ |> element("#apps-multi-select-services-#{service}-remove-item")
|> render_click()
refute html =~ "services:#{node}"
@@ -128,7 +128,7 @@ defmodule Observer.Web.AppsLiveTest do
html =
index_live
- |> element("#observer-multi-select-apps-kernel-remove-item")
+ |> element("#apps-multi-select-apps-kernel-remove-item")
|> render_click()
refute html =~ "services:#{node}"
@@ -152,15 +152,15 @@ defmodule Observer.Web.AppsLiveTest do
{:ok, index_live, _html} = live(conn, "/observer/applications")
index_live
- |> element("#observer-multi-select-toggle-options")
+ |> element("#apps-multi-select-toggle-options")
|> render_click()
index_live
- |> element("#observer-multi-select-apps-kernel-add-item")
+ |> element("#apps-multi-select-apps-kernel-add-item")
|> render_click()
index_live
- |> element("#observer-multi-select-services-#{service}-add-item")
+ |> element("#apps-multi-select-services-#{service}-add-item")
|> render_click()
pid = Enum.random(:erlang.processes())
@@ -201,15 +201,15 @@ defmodule Observer.Web.AppsLiveTest do
{:ok, index_live, _html} = live(conn, "/observer/applications")
index_live
- |> element("#observer-multi-select-toggle-options")
+ |> element("#apps-multi-select-toggle-options")
|> render_click()
index_live
- |> element("#observer-multi-select-apps-kernel-add-item")
+ |> element("#apps-multi-select-apps-kernel-add-item")
|> render_click()
index_live
- |> element("#observer-multi-select-services-#{service}-add-item")
+ |> element("#apps-multi-select-services-#{service}-add-item")
|> render_click()
series_name = "#{Node.self()}::kernel"
@@ -244,15 +244,15 @@ defmodule Observer.Web.AppsLiveTest do
{:ok, index_live, _html} = live(conn, "/observer/applications")
index_live
- |> element("#observer-multi-select-toggle-options")
+ |> element("#apps-multi-select-toggle-options")
|> render_click()
index_live
- |> element("#observer-multi-select-apps-kernel-add-item")
+ |> element("#apps-multi-select-apps-kernel-add-item")
|> render_click()
index_live
- |> element("#observer-multi-select-services-#{service}-add-item")
+ |> element("#apps-multi-select-services-#{service}-add-item")
|> render_click()
port = Enum.random(:erlang.ports())
@@ -293,15 +293,15 @@ defmodule Observer.Web.AppsLiveTest do
{:ok, index_live, _html} = live(conn, "/observer/applications")
index_live
- |> element("#observer-multi-select-toggle-options")
+ |> element("#apps-multi-select-toggle-options")
|> render_click()
index_live
- |> element("#observer-multi-select-apps-kernel-add-item")
+ |> element("#apps-multi-select-apps-kernel-add-item")
|> render_click()
index_live
- |> element("#observer-multi-select-services-#{service}-add-item")
+ |> element("#apps-multi-select-services-#{service}-add-item")
|> render_click()
series_name = "#{Node.self()}::kernel"
@@ -336,15 +336,15 @@ defmodule Observer.Web.AppsLiveTest do
{:ok, index_live, _html} = live(conn, "/observer/applications")
index_live
- |> element("#observer-multi-select-toggle-options")
+ |> element("#apps-multi-select-toggle-options")
|> render_click()
index_live
- |> element("#observer-multi-select-apps-kernel-add-item")
+ |> element("#apps-multi-select-apps-kernel-add-item")
|> render_click()
index_live
- |> element("#observer-multi-select-services-#{service}-add-item")
+ |> element("#apps-multi-select-services-#{service}-add-item")
|> render_click()
reference = make_ref()
@@ -382,23 +382,23 @@ defmodule Observer.Web.AppsLiveTest do
{:ok, index_live, _html} = live(conn, "/observer/applications")
index_live
- |> element("#observer-multi-select-toggle-options")
+ |> element("#apps-multi-select-toggle-options")
|> render_click()
index_live
- |> element("#observer-multi-select-apps-observer_web-add-item")
+ |> element("#apps-multi-select-apps-observer_web-add-item")
|> render_click()
html =
index_live
- |> element("#observer-multi-select-services-#{service}-add-item")
+ |> element("#apps-multi-select-services-#{service}-add-item")
|> render_click()
assert html =~ "services:#{node}"
assert html =~ "apps:observer_web"
assert index_live
- |> element("#observer-multi-select-update", "UPDATE")
+ |> element("#apps-multi-select-update", "UPDATE")
|> render_click() =~ "apps:observer_web"
end
@@ -420,16 +420,16 @@ defmodule Observer.Web.AppsLiveTest do
{:ok, index_live, _html} = live(conn, "/observer/applications")
index_live
- |> element("#observer-multi-select-toggle-options")
+ |> element("#apps-multi-select-toggle-options")
|> render_click()
index_live
- |> element("#observer-multi-select-apps-kernel-add-item")
+ |> element("#apps-multi-select-apps-kernel-add-item")
|> render_click()
html =
index_live
- |> element("#observer-multi-select-services-#{service}-add-item")
+ |> element("#apps-multi-select-services-#{service}-add-item")
|> render_click()
assert html =~ "services:#{node}"
diff --git a/test/observer_web/web/live/tracing_test.exs b/test/observer_web/web/live/tracing_test.exs
index 94a044b..2cacb52 100644
--- a/test/observer_web/web/live/tracing_test.exs
+++ b/test/observer_web/web/live/tracing_test.exs
@@ -116,6 +116,78 @@ defmodule Observer.Web.TracingLiveTest do
refute html =~ "match_spec:caller"
end
+ test "Filtering by Module", %{conn: conn} do
+ node = Node.self() |> to_string
+ service = String.replace(node, "@", "-")
+
+ ObserverWeb.RpcMock
+ |> stub(:call, fn node, module, function, args, timeout ->
+ :rpc.call(node, module, function, args, timeout)
+ end)
+
+ {:ok, index_live, _html} = live(conn, "/observer/tracing")
+
+ index_live
+ |> element("#tracing-multi-select-toggle-options")
+ |> render_click()
+
+ index_live
+ |> element("#tracing-multi-select-services-#{service}-add-item")
+ |> render_click()
+
+ html =
+ index_live
+ |> element("#tracing-multi-select-modules-Elixir-Enum-add-item")
+ |> render_click()
+
+ assert html =~ "Elixir.Agent"
+
+ html =
+ index_live
+ |> element("#multi-select-list-search-form-tracing-multi-select-modules")
+ |> render_change(%{"_target" => "modules", "modules" => "Enum"})
+
+ refute html =~ "Elixir.Agent"
+ end
+
+ test "Filtering by Function", %{conn: conn} do
+ node = Node.self() |> to_string
+ service = String.replace(node, "@", "-")
+
+ ObserverWeb.RpcMock
+ |> stub(:call, fn node, module, function, args, timeout ->
+ :rpc.call(node, module, function, args, timeout)
+ end)
+
+ {:ok, index_live, _html} = live(conn, "/observer/tracing")
+
+ index_live
+ |> element("#tracing-multi-select-toggle-options")
+ |> render_click()
+
+ index_live
+ |> element("#tracing-multi-select-services-#{service}-add-item")
+ |> render_click()
+
+ index_live
+ |> element("#tracing-multi-select-modules-Elixir-Enum-add-item")
+ |> render_click()
+
+ html =
+ index_live
+ |> element("#tracing-multi-select-functions-map-2-add-item")
+ |> render_click()
+
+ assert html =~ "all?"
+
+ html =
+ index_live
+ |> element("#multi-select-list-search-form-tracing-multi-select-modules")
+ |> render_change(%{"_target" => "functions", "functions" => "map"})
+
+ refute html =~ "all?"
+ end
+
test "Run Trace for module ObserverWeb.Common", %{conn: conn} do
node = Node.self() |> to_string
service = String.replace(node, "@", "-")
@@ -239,7 +311,7 @@ defmodule Observer.Web.TracingLiveTest do
|> render_click()
index_live
- |> element("#tracing-multi-select-functions-map-2-add-item")
+ |> element("#tracing-multi-select-functions-uuid4-0-add-item")
|> render_click()
index_live