emqx/bin/emqtt_ctl

160 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
RUNNER_SCRIPT_DIR=$(cd ${0%/*} && pwd)
RUNNER_BASE_DIR=${RUNNER_SCRIPT_DIR%/*}
RUNNER_ETC_DIR=$RUNNER_BASE_DIR/etc
RUNNER_BIN_DIR=$RUNNER_BASE_DIR/bin
RUNNER_LOG_DIR=$RUNNER_BASE_DIR/log
RUNNER_EBIN_DIR=$RUNNER_BASE_DIR/ebin
RUNNER_USER=
# Make sure CWD is set to runner base dir
cd $RUNNER_BASE_DIR
# Extract the target node name from node.args
NAME_ARG=`grep '\-[s]*name' $RUNNER_ETC_DIR/emqtt.args`
if [ -z "$NAME_ARG" ]; then
echo "emqtt.args needs to have either -name or -sname parameter."
exit 1
fi
# Learn how to specify node name for connection from remote nodes
echo "$NAME_ARG" | grep '^-sname' > /dev/null 2>&1
if [ "X$?" = "X0" ]; then
NAME_PARAM="-sname"
NAME_HOST=""
else
NAME_PARAM="-name"
echo "$NAME_ARG" | grep '@.*' > /dev/null 2>&1
if [ "X$?" = "X0" ]; then
NAME_HOST=`echo "${NAME_ARG}" | sed -e 's/.*\(@.*\)$/\1/'`
else
NAME_HOST=""
fi
fi
# Extract the target cookie
COOKIE_ARG=`grep '\-setcookie' $RUNNER_ETC_DIR/emqtt.args`
if [ -z "$COOKIE_ARG" ]; then
echo "emqtt.args needs to have a -setcookie parameter."
exit 1
fi
# Identify the script name
SCRIPT=`basename $0`
# Parse out release and erts info
ERLANG_BASE_DIR=/usr/local/lib/erlang
START_ERL=`cat $ERLANG_BASE_DIR/releases/start_erl.data`
ERTS_VSN=${START_ERL% *}
APP_VSN=${START_ERL#* }
# Add ERTS bin dir to our path
ERTS_PATH=$ERLANG_BASE_DIR/erts-$ERTS_VSN/bin
# Setup command to control the node
NODETOOL="$ERTS_PATH/escript $RUNNER_BIN_DIR/nodetool $NAME_ARG $COOKIE_ARG"
# Check the first argument for instructions
case "$1" in
status)
if [ $# -ne 1 ]; then
echo "Usage: $SCRIPT status"
exit 1
fi
# Make sure the local node IS running
RES=`$NODETOOL ping`
if [ "$RES" != "pong" ]; then
echo "Node is not running!"
exit 1
fi
shift
$NODETOOL rpc emqtt_ctl status $@
;;
cluster_info)
if [ $# -ne 1 ]; then
echo "Usage: $SCRIPT cluster_info"
exit 1
fi
# Make sure the local node IS running
RES=`$NODETOOL ping`
if [ "$RES" != "pong" ]; then
echo "Node is not running!"
exit 1
fi
shift
$NODETOOL rpc emqtt_ctl cluster_info $@
;;
cluster)
if [ $# -ne 2 ]; then
echo "Usage: $SCRIPT cluster <Node>"
exit 1
fi
# Make sure the local node IS running
RES=`$NODETOOL ping`
if [ "$RES" != "pong" ]; then
echo "emqtt is not running!"
exit 1
fi
shift
$NODETOOL rpc emqtt_ctl cluster $@
;;
add_user)
if [ $# -ne 3 ]; then
echo "Usage: $SCRIPT add_user <Username> <Password>"
exit 1
fi
# Make sure the local node IS running
RES=`$NODETOOL ping`
if [ "$RES" != "pong" ]; then
echo "emqtt is not running!"
exit 1
fi
shift
$NODETOOL rpc emqtt_ctl add_user $@
;;
delete_user)
if [ $# -ne 2 ]; then
echo "Usage: $SCRIPT delete_user <Username>"
exit 1
fi
# Make sure the local node IS running
RES=`$NODETOOL ping`
if [ "$RES" != "pong" ]; then
echo "emqtt is not running!"
exit 1
fi
shift
$NODETOOL rpc emqtt_ctl delete_user $@
;;
*)
echo "Usage: $SCRIPT"
echo " status #query emqtt status"
echo " cluster_info #query cluster nodes"
echo " cluster <Node> #cluster node"
echo " add_user <Username> <Password> #add user"
echo " delete_user <Username> #delete user"
exit 1
;;
esac