-module(spectator@internal@components@dashboard_live). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([app/0]). -export_type([model/0, relative_memory_statistics/0, relative_system_limits/0, msg/0]). -opaque model() :: {model, gleam@option:option(gleam@erlang@process:subject(msg())), 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())}. -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())}. -file("/Users/jonas/Projects/spectator/src/spectator/internal/components/dashboard_live.gleam", 77). -spec get_relative_memory_stats(spectator@internal@api:memory_statistics()) -> relative_memory_statistics(). get_relative_memory_stats(Input) -> Factor = case gleam@int:to_float(erlang:element(2, Input)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> 100.0 / Gleam@denominator end, Processes = gleam@int:to_float(erlang:element(3, Input)) * Factor, Code = gleam@int:to_float(erlang:element(9, Input)) * Factor, Ets = gleam@int:to_float(erlang:element(10, Input)) * Factor, Atom = gleam@int:to_float(erlang:element(6, Input)) * Factor, Binary = gleam@int:to_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("/Users/jonas/Projects/spectator/src/spectator/internal/components/dashboard_live.gleam", 101). -spec get_relative_system_limits(spectator@internal@api:system_info()) -> relative_system_limits(). get_relative_system_limits(Input) -> Processes = (case gleam@int:to_float(erlang:element(15, Input)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> gleam@int:to_float(erlang:element(14, Input)) / Gleam@denominator end) * 100.0, Ports = (case gleam@int:to_float(erlang:element(13, Input)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator@1 -> gleam@int:to_float(erlang:element(12, Input)) / Gleam@denominator@1 end) * 100.0, Atoms = (case gleam@int:to_float(erlang:element(9, Input)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator@2 -> gleam@int:to_float(erlang:element(8, Input)) / Gleam@denominator@2 end) * 100.0, Ets = (case gleam@int:to_float(erlang:element(11, Input)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator@3 -> gleam@int:to_float(erlang:element(10, Input)) / Gleam@denominator@3 end) * 100.0, {relative_system_limits, Processes, Ports, Atoms, Ets}. -file("/Users/jonas/Projects/spectator/src/spectator/internal/components/dashboard_live.gleam", 116). -spec do_refresh(model()) -> model(). do_refresh(Model) -> Memory_stats = begin _pipe = spectator_ffi:get_memory_statistics(), 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(), gleam@option:from_result(_pipe@1) end, System_limits = case System_info of none -> none; {some, Info} -> {some, get_relative_system_limits(Info)} end, erlang:setelement( 6, erlang:setelement( 5, erlang:setelement( 4, erlang:setelement(3, Model, Memory_stats), Memory_relative ), System_info ), System_limits ). -file("/Users/jonas/Projects/spectator/src/spectator/internal/components/dashboard_live.gleam", 52). -spec init(list({binary(), binary()})) -> {model(), lustre@effect:effect(msg())}. init(_) -> {do_refresh({model, none, none, none, none, none}), spectator@internal@common:emit_after( 1000, refresh, none, fun(Field@0) -> {created_subject, Field@0} end )}. -file("/Users/jonas/Projects/spectator/src/spectator/internal/components/dashboard_live.gleam", 130). -spec update(model(), msg()) -> {model(), lustre@effect:effect(msg())}. update(Model, Msg) -> case Msg of refresh -> {do_refresh(Model), spectator@internal@common:emit_after( 1000, refresh, erlang:element(2, Model), fun(Field@0) -> {created_subject, Field@0} end )}; {created_subject, Subject} -> {erlang:setelement(2, Model, {some, Subject}), lustre@effect:none()} end. -file("/Users/jonas/Projects/spectator/src/spectator/internal/components/dashboard_live.gleam", 222). -spec limit_label(binary(), integer(), integer(), float()) -> lustre@internals@vdom:element(any()). limit_label(Label, Value, Limit, Percent) -> lustre@element@html:'div'( [lustre@attribute:class(<<"limit-item"/utf8>>)], [lustre@element@html:text( <<<<<<<<<<<<<