blob: a5df8fb08b9f3e71e8c12a0a5f0b83461b492aa4 [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with this
# work for additional information regarding copyright ownership. The ASF
# licenses this file to You under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
export LANG=zh_CN.UTF-8
set -e
HOME_PATH=`dirname $0`
HOME_PATH=`cd ${HOME_PATH}/.. && pwd`
cd ${HOME_PATH}
BIN_PATH=${HOME_PATH}/bin
CONF_PATH=${HOME_PATH}/conf
LIB_PATH=${HOME_PATH}/lib
LOG_PATH=${HOME_PATH}/logs
. ${BIN_PATH}/util.sh
#export HUGEGRAPH_URL=
#export HUGEGRAPH_GRAPH=
#export HUGEGRAPH_USERNAME=
#export HUGEGRAPH_PASSWORD=
function print_usage() {
echo "usage: raft-tools.sh [options]"
echo "options: "
echo " -l,--list-peers \${graph} \${group} list all peers' endpoints for graph, can be used on leader or follower node"
echo " -g,--get-leader \${graph} \${group} get the leader endpoint for graph, can be used on leader or follower node"
echo " -s,--set-leader \${graph} \${group} \${endpoint} set the leader endpoint for graph, can be used on leader or follower node"
echo " -t,--transfer-leader \${graph} \${group} \${endpoint} transfer leader to specified endpoint for graph, can be used on leader node"
echo " -a,--add-peer \${graph} \${group} \${endpoint} add peer for graph, can be used on leader node"
echo " -r,--remove-peer \${graph} \${group} \${endpoint} remove peer for graph, can be used on leader node"
echo " -h,--help display help information"
}
if [[ $# -lt 2 ]]; then
print_usage
exit 0
fi
function list_peers() {
local graph=$1
local url=${HUGEGRAPH_URL}/graphs/${graph}/raft/list_peers
curl ${url} --user ${HUGEGRAPH_USERNAME}:${HUGEGRAPH_PASSWORD}
}
function get_leader() {
local graph=$1
local url=${HUGEGRAPH_URL}/graphs/${graph}/raft/get_leader
curl ${url} --user ${HUGEGRAPH_USERNAME}:${HUGEGRAPH_PASSWORD}
}
function set_leader() {
local graph=$1
local endpoint=$2
local url=${HUGEGRAPH_URL}/graphs/${graph}/raft/set_leader?endpoint=${endpoint}
curl -X POST ${url} --user ${HUGEGRAPH_USERNAME}:${HUGEGRAPH_PASSWORD}
}
function transfer_leader() {
local graph=$1
local endpoint=$2
local url=${HUGEGRAPH_URL}/graphs/${graph}/raft/transfer_leader?endpoint=${endpoint}
curl -X POST ${url} --user ${HUGEGRAPH_USERNAME}:${HUGEGRAPH_PASSWORD}
}
function add_peer() {
local graph=$1
local endpoint=$2
local url=${HUGEGRAPH_URL}/graphs/${graph}/raft/add_peer?endpoint=${endpoint}
curl -X POST ${url} --user ${HUGEGRAPH_USERNAME}:${HUGEGRAPH_PASSWORD}
}
function remove_peer() {
local graph=$1
local endpoint=$2
local url=${HUGEGRAPH_URL}/graphs/${graph}/raft/remove_peer?endpoint=${endpoint}
curl -X POST ${url} --user ${HUGEGRAPH_USERNAME}:${HUGEGRAPH_PASSWORD}
}
if [ "${HUGEGRAPH_URL}" = "" ]; then
HUGEGRAPH_URL=`read_property ${CONF_PATH}/rest-server.properties restserver.url`
fi
if [ "${HUGEGRAPH_GRAPH}" = "" ]; then
HUGEGRAPH_GRAPH="hugegraph"
fi
case $1 in
# help
--help|-h)
print_usage
;;
# list-peers
--list-peers|-l)
list_peers $2
;;
# get-leader
--get-leader|-g)
get_leader $2
;;
# set-leader
--set-leader|-s)
set_leader $2 $3
;;
# transfer-leader
--transfer-leader|-t)
transfer_leader $2 $3
;;
# add-peer
--add-peer|-a)
add_peer $2 $3
;;
# remove-peer
--remove-peer|-r)
remove_peer $2 $3
;;
*)
print_usage
exit 0
;;
esac
echo ""