Ery Lee 11 лет назад
Родитель
Сommit
2a9653f8a8
2 измененных файлов с 46 добавлено и 2 удалено
  1. 28 1
      apps/emqttd/src/emqttd_ctl.erl
  2. 18 1
      rel/files/emqttd_ctl

+ 28 - 1
apps/emqttd/src/emqttd_ctl.erl

@@ -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.
 

+ 18 - 1
rel/files/emqttd_ctl

@@ -147,6 +147,23 @@ case "$1" in
 
         $NODETOOL rpc emqttd_ctl userdel $@
         ;;
+        
+    vm)
+        if [ $# -gt 2 ]; then
+            echo "Usage: $SCRIPT vm [ load | memory | process | io ]"
+            exit 1
+        fi
+
+        # Make sure the local node IS running
+        RES=`$NODETOOL ping`
+        if [ "$RES" != "pong" ]; then
+            echo "emqttd is not running!"
+            exit 1
+        fi
+        shift
+
+        $NODETOOL rpc emqttd_ctl vm $@
+        ;;
 
     broker)
         if [ $# -ne 1 ]; then
@@ -199,7 +216,6 @@ case "$1" in
         $NODETOOL rpc emqttd_ctl metrics $@
         ;;
 
-
     bridges)
         # Make sure the local node IS running
         RES=`$NODETOOL ping`
@@ -259,6 +275,7 @@ case "$1" in
     *)
         echo "Usage: $SCRIPT"
 		echo "  status                        #query broker status"
+        echo "  vm [ load | memory | process | io ]    #query load, memory, process and io of erlang vm"
 		echo "  broker                        #query broker version, uptime and description"
 		echo "  stats                         #query broker statistics of clients, topics, subscribers"
         echo "  metrics                       #query broker metrics"