From 2a9653f8a8af1484bd08010cd0fa603362340a5d Mon Sep 17 00:00:00 2001 From: Ery Lee Date: Mon, 23 Mar 2015 21:35:16 +0800 Subject: [PATCH] emqttd_ctl vm --- apps/emqttd/src/emqttd_ctl.erl | 29 ++++++++++++++++++++++++++++- rel/files/emqttd_ctl | 19 ++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/apps/emqttd/src/emqttd_ctl.erl b/apps/emqttd/src/emqttd_ctl.erl index da8d2cf60..db6071827 100644 --- a/apps/emqttd/src/emqttd_ctl.erl +++ b/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. diff --git a/rel/files/emqttd_ctl b/rel/files/emqttd_ctl index 2e751b9d4..4f1218525 100755 --- a/rel/files/emqttd_ctl +++ b/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"