#!/bin/bash # check selenium sst tests # dario # # # ver: 1.0 ## nagios definitions ## OK=0 WARNING=1 CRITICAL=2 UNKNOWN=3 MSG= STATUS= ## setting default ## CRIT= WARN= TEST_FILE= NUM=1 dateinsec=$(date +%s) which=$(/usr/bin/which which) sstrun_CMD=$($which sst-run) grep=$(/usr/bin/which grep) awk=$(/usr/bin/which awk) cut=$(/usr/bin/which cut) rm=$(/usr/bin/which rm) sleep=$(/usr/bin/which sleep) nohup=$(/usr/bin/which nohup) TMPFILE="/tmp/testsst_"$dateinsec MYSELENIUMHOST=`hostname -s` export PATH=$PATH:/usr/bin if [ -f ${TMPFILE} ] then ${rm} ${TMPFILE} fi ## bin2launch ## if [[ -z $sstrun_CMD && ! -x $sstrun_CMD ]] then echo "UNKNOWN - can not use sst-run utility: $sstrun_CMD ." exit $UNKNOWN fi ## help ## help() { cat << EOF Usage: $0 -t /path/to/test.py -c seconds_critical -w seconds_warning -t path to your python test file -c critical running time expected in seconds -w warning running time expected in seconds The python test file must format this output: DASHtest_nameSECONDS.MICROSECONDS example: # hell_page 1.666 # hell_login 3.111 # hell_logout 2.111 EOF } ## parsing input ## if [[ $# == 0 ]] then help exit 0 fi while getopts "t:c:w:" OPTION do case $OPTION in t) TEST_FILE=$OPTARG ;; c) CRIT=$OPTARG ;; w) WARN=$OPTARG ;; *) help exit 0 ;; esac done if [[ ! -r $TEST_FILE ]] then echo "UNKNOWN - selenium sst script not found: $OPTARG ." exit $UNKNOWN fi if [[ "x$CRIT" == "x" ]] then echo "option -c not valid." help exit $UNKNOWN fi if [[ "x$WARN" == "x" ]] then echo "option -w not valid." help exit $UNKNOWN fi grep=$(/usr/bin/which grep) awk=$(/usr/bin/which awk) cut=$(/usr/bin/which cut) rm=$(/usr/bin/which rm) sleep=$(/usr/bin/which sleep) nohup=$(/usr/bin/which nohup) FILE2LAUNCH=$( echo $TEST_FILE | ${awk} -F"/" '{ print $NF }' ) MYPATH=${TEST_FILE%$FILE2LAUNCH} export DISPLAY=:100 cd ${MYPATH} ${nohup} ${sstrun_CMD} ${FILE2LAUNCH%\.py} > ${TMPFILE} #$sleep 35 PERFTIME=$(${grep} SST_PERFDATA ${TMPFILE} | ${cut} -d: -f2) [[ ${#PERFTIME} -lt 2 ]] && echo "WARNING: PERFDATA not found, please look into ${TMPFILE} on $MYSELENIUMHOST" && exit 1 PERFDATA="| ${PERFTIME}" #${rm} ${TMPFILE} #is_timeout=$(echo $PERFTIME:$CRIT | ${awk} -F: '{ if ( $1 > $2 ) print $1-$2 }') #is_warning=$(echo $PERFTIME:$WARN | ${awk} -F: '{ if ( $1 > $2 ) print $1-$2 }') has_failed=$(grep -c FAILED ${TMPFILE}) STATUS=$UNKNOWN if [[ $has_failed -gt 0 ]] then MSG="CRITICAL - Test $FILE2LAUNCH failed" STATUS=$CRITICAL else MSG="OK - test ran in ${PERFTIME}" STATUS=$OK fi echo "${MSG} ${PERFDATA}" exit $STATUS