Current section
Files
Jump to
Current section
Files
src/spectator@internal@components@ets_overview_live.erl
-module(spectator@internal@components@ets_overview_live).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/spectator/internal/components/ets_overview_live.gleam").
-export([app/0]).
-export_type([model/0, msg/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-type model() :: {model,
gleam@option:option(gleam@erlang@atom:atom_()),
list({binary(), binary()}),
gleam@option:option(gleam@erlang@process:subject(msg())),
integer(),
list(spectator@internal@api:table()),
integer(),
spectator@internal@api:table_sort_criteria(),
spectator@internal@api:sort_direction()}.
-opaque msg() :: refresh |
{heading_clicked, spectator@internal@api:table_sort_criteria()} |
{created_subject, gleam@erlang@process:subject(msg())}.
-file("src/spectator/internal/components/ets_overview_live.gleam", 37).
?DOC(false).
-spec init(list({binary(), binary()})) -> {model(), lustre@effect:effect(msg())}.
init(Params) ->
Node = spectator@internal@api:node_from_params(Params),
Defaul_sort_criteria = sort_by_table_size,
Defaul_sort_direction = descending,
Refresh_interval = spectator@internal@common:get_refresh_interval(Params),
Word_size = gleam@result:unwrap(spectator_ffi:get_word_size(Node), 8),
{{model,
Node,
spectator@internal@common:sanitize_params(Params),
none,
Refresh_interval,
[],
Word_size,
Defaul_sort_criteria,
Defaul_sort_direction},
lustre@effect:from(fun(Dispatch) -> Dispatch(refresh) end)}.
-file("src/spectator/internal/components/ets_overview_live.gleam", 69).
?DOC(false).
-spec get_sorted_tables(
gleam@option:option(gleam@erlang@atom:atom_()),
spectator@internal@api:table_sort_criteria(),
spectator@internal@api:sort_direction()
) -> list(spectator@internal@api:table()).
get_sorted_tables(Node, Sort_criteria, Sort_direction) ->
_pipe = gleam@result:unwrap(spectator_ffi:list_ets_tables(Node), []),
spectator@internal@api:sort_table_list(_pipe, Sort_criteria, Sort_direction).
-file("src/spectator/internal/components/ets_overview_live.gleam", 78).
?DOC(false).
-spec update(model(), msg()) -> {model(), lustre@effect:effect(msg())}.
update(Model, Msg) ->
case Msg of
refresh ->
{{model,
erlang:element(2, Model),
erlang:element(3, Model),
erlang:element(4, Model),
erlang:element(5, Model),
get_sorted_tables(
erlang:element(2, Model),
erlang:element(8, Model),
erlang:element(9, Model)
),
erlang:element(7, Model),
erlang:element(8, Model),
erlang:element(9, Model)},
spectator@internal@common:emit_after(
erlang:element(5, Model),
refresh,
erlang:element(4, Model),
fun(Field@0) -> {created_subject, Field@0} end
)};
{created_subject, Subject} ->
{{model,
erlang:element(2, Model),
erlang:element(3, Model),
{some, Subject},
erlang:element(5, Model),
erlang:element(6, Model),
erlang:element(7, Model),
erlang:element(8, Model),
erlang:element(9, Model)},
lustre@effect:none()};
{heading_clicked, Criteria} ->
case Criteria of
C when C =:= erlang:element(8, Model) ->
New_direction = spectator@internal@api:invert_sort_direction(
erlang:element(9, Model)
),
New_model = {model,
erlang:element(2, Model),
erlang:element(3, Model),
erlang:element(4, Model),
erlang:element(5, Model),
get_sorted_tables(
erlang:element(2, Model),
C,
New_direction
),
erlang:element(7, Model),
erlang:element(8, Model),
New_direction},
{New_model, lustre@effect:none()};
C@1 ->
New_model@1 = {model,
erlang:element(2, Model),
erlang:element(3, Model),
erlang:element(4, Model),
erlang:element(5, Model),
get_sorted_tables(
erlang:element(2, Model),
C@1,
erlang:element(9, Model)
),
erlang:element(7, Model),
C@1,
erlang:element(9, Model)},
{New_model@1, lustre@effect:none()}
end
end.
-file("src/spectator/internal/components/ets_overview_live.gleam", 264).
?DOC(false).
-spec link_cell(
spectator@internal@api:table(),
list(lustre@vdom@vnode:element(msg())),
list({binary(), binary()})
) -> list(lustre@vdom@vnode:element(msg())).
link_cell(T, Children, Params) ->
[lustre@element@html:a(
[lustre@attribute:href(
<<<<"/ets/"/utf8,
(gleam_stdlib:percent_encode(
erlang:atom_to_binary(erlang:element(3, T))
))/binary>>/binary,
(spectator@internal@common:encode_params(Params))/binary>>
)],
Children
)].
-file("src/spectator/internal/components/ets_overview_live.gleam", 128).
?DOC(false).
-spec view(model()) -> lustre@vdom@vnode:element(msg()).
view(Model) ->
lustre@element@html:table(
[],
[lustre@element@html:thead(
[],
[lustre@element@html:tr(
[],
[spectator@internal@views@table:heading(
<<"Name"/utf8>>,
<<"Table Name"/utf8>>,
sort_by_table_name,
erlang:element(8, Model),
erlang:element(9, Model),
fun(Field@0) -> {heading_clicked, Field@0} end,
false
),
spectator@internal@views@table:heading(
<<"Type"/utf8>>,
<<"Table Type"/utf8>>,
sort_by_table_type,
erlang:element(8, Model),
erlang:element(9, Model),
fun(Field@0) -> {heading_clicked, Field@0} end,
false
),
spectator@internal@views@table:heading(
<<"Size"/utf8>>,
<<"Table Size"/utf8>>,
sort_by_table_size,
erlang:element(8, Model),
erlang:element(9, Model),
fun(Field@0) -> {heading_clicked, Field@0} end,
true
),
spectator@internal@views@table:heading(
<<"Memory"/utf8>>,
<<"Table Memory"/utf8>>,
sort_by_table_memory,
erlang:element(8, Model),
erlang:element(9, Model),
fun(Field@0) -> {heading_clicked, Field@0} end,
true
),
spectator@internal@views@table:heading(
<<"Owner"/utf8>>,
<<"Table Owner"/utf8>>,
sort_by_table_owner,
erlang:element(8, Model),
erlang:element(9, Model),
fun(Field@0) -> {heading_clicked, Field@0} end,
true
),
spectator@internal@views@table:heading(
<<"Protection"/utf8>>,
<<"Table Protection"/utf8>>,
sort_by_table_protection,
erlang:element(8, Model),
erlang:element(9, Model),
fun(Field@0) -> {heading_clicked, Field@0} end,
true
),
spectator@internal@views@table:heading(
<<"Read Conc."/utf8>>,
<<"Table Read Concurrency"/utf8>>,
sort_by_table_read_concurrency,
erlang:element(8, Model),
erlang:element(9, Model),
fun(Field@0) -> {heading_clicked, Field@0} end,
true
),
spectator@internal@views@table:heading(
<<"Write Conc."/utf8>>,
<<"Table Write Concurrency"/utf8>>,
sort_by_table_write_concurrency,
erlang:element(8, Model),
erlang:element(9, Model),
fun(Field@0) -> {heading_clicked, Field@0} end,
true
)]
)]
),
lustre@element@html:tbody(
[],
spectator@internal@views@table:map_rows(
erlang:element(6, Model),
fun(T) ->
lustre@element@html:tr(
[],
[lustre@element@html:td(
[lustre@attribute:class(
<<"link-cell"/utf8>>
)],
link_cell(
T,
[spectator@internal@views@display:atom(
erlang:element(3, T)
)],
erlang:element(3, Model)
)
),
lustre@element@html:td(
[lustre@attribute:class(
<<"link-cell"/utf8>>
)],
link_cell(
T,
[spectator@internal@views@display:atom(
erlang:element(4, T)
)],
erlang:element(3, Model)
)
),
lustre@element@html:td(
[lustre@attribute:class(
<<"cell-right link-cell"/utf8>>
)],
link_cell(
T,
[spectator@internal@views@display:number(
erlang:element(5, T)
),
lustre@element@html:text(
<<" items"/utf8>>
)],
erlang:element(3, Model)
)
),
lustre@element@html:td(
[lustre@attribute:class(
<<"cell-right link-cell"/utf8>>
)],
link_cell(
T,
[spectator@internal@views@display:storage_words(
erlang:element(6, T),
erlang:element(7, Model)
)],
erlang:element(3, Model)
)
),
lustre@element@html:td(
[lustre@attribute:class(
<<"cell-right link-cell"/utf8>>
)],
[spectator@internal@views@display:system_primitive(
erlang:element(7, T),
erlang:element(3, Model)
)]
),
lustre@element@html:td(
[lustre@attribute:class(
<<"cell-right link-cell"/utf8>>
)],
link_cell(
T,
[spectator@internal@views@display:atom(
erlang:element(8, T)
)],
erlang:element(3, Model)
)
),
lustre@element@html:td(
[lustre@attribute:class(
<<"cell-right link-cell"/utf8>>
)],
link_cell(
T,
[spectator@internal@views@display:bool(
erlang:element(9, T)
)],
erlang:element(3, Model)
)
),
lustre@element@html:td(
[lustre@attribute:class(
<<"cell-right link-cell"/utf8>>
)],
link_cell(
T,
[spectator@internal@views@display:bool(
erlang:element(10, T)
)],
erlang:element(3, Model)
)
)]
)
end
)
),
lustre@element@html:tfoot(
[],
[lustre@element@html:tr(
[],
[lustre@element@html:td(
[lustre@attribute:attribute(
<<"colspan"/utf8>>,
<<"8"/utf8>>
)],
[lustre@element@html:'div'(
[lustre@attribute:class(
<<"footer-placeholder"/utf8>>
)],
[lustre@element@html:text(
<<"Click on a table to view data"/utf8>>
)]
)]
)]
)]
)]
).
-file("src/spectator/internal/components/ets_overview_live.gleam", 18).
?DOC(false).
-spec app() -> lustre@runtime@app:app(list({binary(), binary()}), model(), msg()).
app() ->
lustre:application(fun init/1, fun update/2, fun view/1).