#!/bin/bash # Usage: sequencelogic-mongo-status.sh {node} {role} ... # Where: # {node} is IP or hostname with optional port # {role} is 'primary', 'slave', 'replica' # e.g. sequencelogic-mongo-status.sh 10.200.1.71 primary function usage(){ if [ "$1" != "" ]; then echo $1 fi echo "Usage: sequencelogic-mongo-status.sh {node} {role}" echo "{node} is an IP or host with optional port" echo "{role} is 'primary', 'slave' or 'replica'" exit 1 } # setup REDIR=/dev/tty # use /dev/tty for debug SCRIPT=$0 echo "[OK] Script: ${SCRIPT}" > ${REDIR} # Absolute path this script is in, thus /home/user/bin SCRIPTPATH=`dirname ${SCRIPT}` echo "[OK] This script is located at: $SCRIPTPATH" > ${REDIR} if [ "$1" = "" ]; then usage fi if [ -f "${SCRIPTPATH}/sequencelogic-helpers.sh" ]; then source ${SCRIPTPATH}/sequencelogic-helpers.sh > ${REDIR} else source ${SEQUENCELOGICHOME}/bin/sequencelogic-helpers.sh > ${REDIR} fi function appendJSON(){ comma=$1 key=$2 val="$3" /bin/echo -n "${comma}\"${key}\":${val}" } function mongoJS(){ host=$1 cmd=$2 x=`mongo --quiet --eval "printjson(${cmd})" ${host}/sequencelogic` ps=$? #/bin/echo "exit with ${ps}" > ${REDIR} if [ ${ps} != 0 ]; then x="\"@ERROR ${x}\"" fi #echo "RAW: ${x}" > ${REDIR} #x=`echo "${x}" | sed 's/^[^{]*[{]/{/'` #echo "DECRUFTED: ${x}" > ${REDIR} x=`echo "${x}" | sed 's/ISODate(\([^)]*\))/\1/g'` #sed 's/ISODate//' | tr -d '()'` /bin/echo -n "${x}" } function mongoStatus(){ host=$1 role=$2 js="{" js="${js}$(appendJSON '' host \"${host}\")" js="${js}$(appendJSON ',' cpu_pct 0)" js="${js}$(appendJSON ',' mem_used 0)" js="${js}$(appendJSON ',' root_dir_pct 0)" x="`mongoJS ${host} db.stats\(\)`" js=${js}$(appendJSON ',' stats "${x}") x="`mongoJS ${host} db.isMaster\(\)`" js=${js}$(appendJSON ',' masterSlave "${x}") #x="`mongoJS ${host} db.foo\(\)`" #js=${js}$(appendJSON ',' testError "${x}") echo "${js}" | grep -c '@ERROR' > ${REDIR} isErr=$? if [ $isErr = 0 ]; then isErr=ERROR; else isErr=OK; fi #echo "isErr ${isErr}" > ${REDIR} js="${js}$(appendJSON ',' status \"${isErr}\")" js="${js}}" echo "${js}" } json="[" acomma="" while [ "$1" != "" ]; do host=$1; shift role=$1; shift case "$role" in primary|slave|replica) ;; *) usage "Bad value for {role}";; esac echo "[OK] Using host: $host and role: ${role}" > ${REDIR} json="${json}${acomma}" json="${json}$(mongoStatus $host $role)" #echo $json acomma="," done json="${json}]" echo $json exit 0