-module(spectator@internal@components@dashboard_live). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/spectator/internal/components/dashboard_live.gleam"). -export([app/0]). -export_type([model/0, relative_memory_statistics/0, relative_system_limits/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). -opaque model() :: {model, gleam@option:option(gleam@erlang@atom:atom_()), list({binary(), binary()}), gleam@option:option(gleam@erlang@process:subject(msg())), integer(), gleam@option:option(spectator@internal@api:memory_statistics()), gleam@option:option(relative_memory_statistics()), gleam@option:option(spectator@internal@api:system_info()), gleam@option:option(relative_system_limits()), binary(), binary(), binary()}. -type relative_memory_statistics() :: {relative_memory_statistics, float(), float(), float(), float(), float(), float(), integer()}. -type relative_system_limits() :: {relative_system_limits, float(), float(), float(), float()}. -opaque msg() :: refresh | {created_subject, gleam@erlang@process:subject(msg())} | {node_input_changed, binary()} | {cookie_input_changed, binary()} | {refresh_input_changed, binary()}. -file("src/spectator/internal/components/dashboard_live.gleam", 103). ?DOC(false). -spec get_relative_memory_stats(spectator@internal@api:memory_statistics()) -> relative_memory_statistics(). get_relative_memory_stats(Input) -> Factor = case erlang:float(erlang:element(2, Input)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> 100.0 / Gleam@denominator end, Processes = erlang:float(erlang:element(3, Input)) * Factor, Code = erlang:float(erlang:element(9, Input)) * Factor, Ets = erlang:float(erlang:element(10, Input)) * Factor, Atom = erlang:float(erlang:element(6, Input)) * Factor, Binary = erlang:float(erlang:element(8, Input)) * Factor, Other = ((((100.0 - Processes) - Code) - Ets) - Atom) - Binary, {relative_memory_statistics, Processes, Code, Ets, Atom, Binary, Other, (((erlang:element(5, Input) - erlang:element(6, Input)) - erlang:element( 8, Input )) - erlang:element(9, Input)) - erlang:element(10, Input)}. -file("src/spectator/internal/components/dashboard_live.gleam", 127). ?DOC(false). -spec get_relative_system_limits(spectator@internal@api:system_info()) -> relative_system_limits(). get_relative_system_limits(Input) -> Processes = (case erlang:float(erlang:element(15, Input)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> erlang:float(erlang:element(14, Input)) / Gleam@denominator end) * 100.0, Ports = (case erlang:float(erlang:element(13, Input)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator@1 -> erlang:float(erlang:element(12, Input)) / Gleam@denominator@1 end) * 100.0, Atoms = (case erlang:float(erlang:element(9, Input)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator@2 -> erlang:float(erlang:element(8, Input)) / Gleam@denominator@2 end) * 100.0, Ets = (case erlang:float(erlang:element(11, Input)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator@3 -> erlang:float(erlang:element(10, Input)) / Gleam@denominator@3 end) * 100.0, {relative_system_limits, Processes, Ports, Atoms, Ets}. -file("src/spectator/internal/components/dashboard_live.gleam", 142). ?DOC(false). -spec do_refresh(model()) -> model(). do_refresh(Model) -> Memory_stats = begin _pipe = spectator_ffi:get_memory_statistics(erlang:element(2, Model)), gleam@option:from_result(_pipe) end, Memory_relative = case Memory_stats of none -> none; {some, Stats} -> {some, get_relative_memory_stats(Stats)} end, System_info = begin _pipe@1 = spectator_ffi:get_system_info(erlang:element(2, Model)), gleam@option:from_result(_pipe@1) end, System_limits = case System_info of none -> none; {some, Info} -> {some, get_relative_system_limits(Info)} end, {model, erlang:element(2, Model), erlang:element(3, Model), erlang:element(4, Model), erlang:element(5, Model), Memory_stats, Memory_relative, System_info, System_limits, erlang:element(10, Model), erlang:element(11, Model), erlang:element(12, Model)}. -file("src/spectator/internal/components/dashboard_live.gleam", 60). ?DOC(false). -spec init(list({binary(), binary()})) -> {model(), lustre@effect:effect(msg())}. init(Params) -> Node = spectator@internal@api:node_from_params(Params), Node_input = case Node of {some, N} -> erlang:atom_to_binary(N); none -> <<""/utf8>> end, Refresh_interval = spectator@internal@common:get_refresh_interval(Params), Cookie_input = begin _pipe = spectator@internal@common:get_param(Params, <<"cookie"/utf8>>), gleam@result:unwrap(_pipe, <<""/utf8>>) end, Initial_model = do_refresh( {model, Node, spectator@internal@common:sanitize_params(Params), none, Refresh_interval, none, none, none, none, Node_input, Cookie_input, erlang:integer_to_binary(Refresh_interval)} ), {Initial_model, spectator@internal@common:emit_after( erlang:element(5, Initial_model), refresh, none, fun(Field@0) -> {created_subject, Field@0} end )}. -file("src/spectator/internal/components/dashboard_live.gleam", 160). ?DOC(false). -spec update(model(), msg()) -> {model(), lustre@effect:effect(msg())}. update(Model, Msg) -> case Msg of {node_input_changed, N} -> {{model, erlang:element(2, Model), erlang:element(3, Model), erlang:element(4, Model), erlang:element(5, Model), erlang:element(6, Model), erlang:element(7, Model), erlang:element(8, Model), erlang:element(9, Model), N, erlang:element(11, Model), erlang:element(12, Model)}, lustre@effect:none()}; {cookie_input_changed, C} -> {{model, erlang:element(2, Model), erlang:element(3, Model), erlang:element(4, Model), erlang:element(5, Model), erlang:element(6, Model), erlang:element(7, Model), erlang:element(8, Model), erlang:element(9, Model), erlang:element(10, Model), C, erlang:element(12, Model)}, lustre@effect:none()}; {refresh_input_changed, R} -> {{model, erlang:element(2, Model), erlang:element(3, Model), erlang:element(4, Model), erlang:element(5, Model), erlang:element(6, Model), erlang:element(7, Model), erlang:element(8, Model), erlang:element(9, Model), erlang:element(10, Model), erlang:element(11, Model), R}, lustre@effect:none()}; refresh -> {do_refresh(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), erlang:element(10, Model), erlang:element(11, Model), erlang:element(12, Model)}, lustre@effect:none()} end. -file("src/spectator/internal/components/dashboard_live.gleam", 255). ?DOC(false). -spec limit_label(binary(), integer(), integer(), float()) -> lustre@vdom@vnode:element(any()). limit_label(Label, Value, Limit, Percent) -> lustre@element@html:'div'( [lustre@attribute:class(<<"limit-item"/utf8>>)], [lustre@element@html:text( <<<<<<<<<<<<<