|
|
@@ -37,6 +37,7 @@
|
|
|
io:format(Format, Args)).
|
|
|
|
|
|
-export([status/1,
|
|
|
+ vm/1,
|
|
|
broker/1,
|
|
|
stats/1,
|
|
|
metrics/1,
|
|
|
@@ -77,13 +78,32 @@ cluster([SNode]) ->
|
|
|
?PRINT("failed to connect to ~p~n", [Node])
|
|
|
end.
|
|
|
|
|
|
-
|
|
|
useradd([Username, Password]) ->
|
|
|
?PRINT("~p", [emqttd_auth:add(list_to_binary(Username), list_to_binary(Password))]).
|
|
|
|
|
|
userdel([Username]) ->
|
|
|
?PRINT("~p", [emqttd_auth:delete(list_to_binary(Username))]).
|
|
|
|
|
|
+vm([]) ->
|
|
|
+ [vm([Name]) || Name <- ["load", "memory", "process", "io"]];
|
|
|
+
|
|
|
+vm(["load"]) ->
|
|
|
+ ?PRINT_MSG("Load: ~n"),
|
|
|
+ [?PRINT(" ~s:~s~n", [L, V]) || {L, V} <- loads()];
|
|
|
+
|
|
|
+vm(["memory"]) ->
|
|
|
+ ?PRINT_MSG("Memory: ~n"),
|
|
|
+ [?PRINT(" ~s:~p~n", [Cat, Val]) || {Cat, Val} <- erlang:memory()];
|
|
|
+
|
|
|
+vm(["process"]) ->
|
|
|
+ ?PRINT_MSG("Process: ~n"),
|
|
|
+ ?PRINT(" process_limit:~p~n", [erlang:system_info(process_limit)]),
|
|
|
+ ?PRINT(" process_count:~p~n", [erlang:system_info(process_count)]);
|
|
|
+
|
|
|
+vm(["io"]) ->
|
|
|
+ ?PRINT_MSG("IO: ~n"),
|
|
|
+ ?PRINT(" max_fds:~p~n", [proplists:get_value(max_fds, erlang:system_info(check_io))]).
|
|
|
+
|
|
|
broker([]) ->
|
|
|
Funs = [sysdescr, version, uptime, datetime],
|
|
|
[?PRINT("~s: ~s~n", [Fun, emqttd_broker:Fun()]) || Fun <- Funs].
|
|
|
@@ -156,4 +176,11 @@ node_name(SNode) ->
|
|
|
end,
|
|
|
list_to_atom(SNode1).
|
|
|
|
|
|
+loads() ->
|
|
|
+ [{load1, ftos(cpu_sup:avg1()/256)},
|
|
|
+ {load5, ftos(cpu_sup:avg5()/256)},
|
|
|
+ {load15, ftos(cpu_sup:avg15()/256)}].
|
|
|
+
|
|
|
+ftos(F) ->
|
|
|
+ [S] = io_lib:format("~.2f", [F]), S.
|
|
|
|