fix(shell): do not repeat print shell warnings

This commit is contained in:
Zaiming (Stone) Shi 2023-11-01 14:18:08 +01:00
parent eb723489d7
commit c38725facd
2 changed files with 33 additions and 12 deletions

View File

@ -33,6 +33,21 @@
-define(LOCAL_PROHIBITED, [halt, q]).
-define(REMOTE_PROHIBITED, [{erlang, halt}, {c, q}, {init, stop}, {init, restart}, {init, reboot}]).
-define(WARN_ONCE(Fn, Args),
case get(Fn) of
true ->
ok;
_ ->
case apply(Fn, Args) of
true ->
put(Fn, true),
ok;
false ->
ok
end
end
).
is_locked() ->
{ok, false} =/= application:get_env(?APP, ?IS_LOCKED).
@ -72,31 +87,31 @@ is_allowed(prohibited) -> false;
is_allowed(_) -> true.
limit_warning(MF, Args) ->
max_heap_size_warning(MF, Args),
max_args_warning(MF, Args).
?WARN_ONCE(fun max_heap_size_warning/2, [MF, Args]),
?WARN_ONCE(fun max_args_warning/2, [MF, Args]).
max_args_warning(MF, Args) ->
ArgsSize = erts_debug:flat_size(Args),
case ArgsSize < ?MAX_ARGS_SIZE of
case ArgsSize > ?MAX_ARGS_SIZE of
true ->
ok;
false ->
warning("[WARNING] current_args_size:~w, max_args_size:~w", [ArgsSize, ?MAX_ARGS_SIZE]),
?SLOG(warning, #{
msg => "execute_function_in_shell_max_args_size",
function => MF,
%%args => Args,
args_size => ArgsSize,
max_heap_size => ?MAX_ARGS_SIZE
})
max_heap_size => ?MAX_ARGS_SIZE,
pid => self()
}),
true;
false ->
false
end.
max_heap_size_warning(MF, Args) ->
{heap_size, HeapSize} = erlang:process_info(self(), heap_size),
case HeapSize < ?MAX_HEAP_SIZE of
case HeapSize > ?MAX_HEAP_SIZE of
true ->
ok;
false ->
warning("[WARNING] current_heap_size:~w, max_heap_size_warning:~w", [
HeapSize, ?MAX_HEAP_SIZE
]),
@ -105,8 +120,12 @@ max_heap_size_warning(MF, Args) ->
current_heap_size => HeapSize,
function => MF,
args => pp_args(Args),
max_heap_size => ?MAX_HEAP_SIZE
})
max_heap_size => ?MAX_HEAP_SIZE,
pid => self()
}),
true;
false ->
false
end.
log(_, {?MODULE, prompt_func}, [[{history, _}]]) ->

View File

@ -0,0 +1,2 @@
Fix excessive warning message print in remote console shell.