diff options
Diffstat (limited to 'service/check_adei.sh')
-rwxr-xr-x | service/check_adei.sh | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/service/check_adei.sh b/service/check_adei.sh new file mode 100755 index 0000000..f08ab5f --- /dev/null +++ b/service/check_adei.sh @@ -0,0 +1,115 @@ +#! /bin/bash + +MAX_SOURCE_OFFSET=3600 +MAX_MASTER_OFFSET=300 +MAX_SLAVE_OFFSET=300 + +function query { + if [ "$2" == "ecode" ]; then + url="$1&mysql=master" + resp=$(curl -f "$url" 2>&1 | grep "returned error") + else + if [ "$2" == "slave" ]; then + url="$1&mysql=slave" + else + url="$1&mysql=master" + fi + + resp=$(curl -sf "$url") + err=$? + [ $err -eq 0 ] || resp="" + fi + echo $resp +} + +function format_time { + offset=$1 + if [ $offset -ge 86400 ]; then + echo "$((offset / 86400))d" + elif [ $offset -ge 3600 ]; then + echo "$((offset / 3600))h" + elif [ $offset -ge 60 ]; then + echo "$((offset / 60))m" + else + echo "${offset}s" + fi +} + + +cd "$(dirname "$0")" +id=$1 + +auth=$(cat ../security/adei.txt | grep -P "^$id" | awk '{ print $2 }') +[ -n $auth ] && auth="$auth@" + +host=$(echo $2 | cut -d '/' -f 1) +url="http://$auth$2/services" + +src=$3 + +# Check if online +online=$(../scripts/ping.pl "$host") +healthy=$online + +# Check if healthy and find version +version=$(query "$url/info.php?target=version&encoding=text") +if [ -z "$version" ]; then + err=$(query "$url/info.php?target=version&encoding=text" "ecode") + echo $err + healthy=0 +else + if [[ "$version" =~ "Error:" ]]; then + echo $version + healthy=0 + version="" + else + version="ADEI $version" + fi +fi + +# Get current database size +size=$(query "$url/info.php?target=size&encoding=text") +[[ "$size" =~ "Error:" ]] && size="" +[ -n "$size" ] && msg="\${color gray}/ $((size / 1024 / 1024 / 1024)) GB" + + +# Verify offset (for selected database) +if [ $healthy -ne 0 -a -n "$src" ]; then + now=$(date +%s) + sdate=$(query "$url/getdata.php?$src&db_mask=0&format=csv&window=-1&rt=1&cache=1&time_format=U" slave | cut -d ',' -f 1 | cut -d '.' -f 1) + mdate=$(query "$url/getdata.php?$src&db_mask=0&format=csv&window=-1&rt=1&cache=1&time_format=U" | cut -d ',' -f 1 | cut -d '.' -f 1) + + if [ -z "$sdate" -o -z "$mdate" ]; then + echo "Error querying data from '$src'" + healthy=2 + else + master_offset=$(($now - $mdate)) + slave_offset=$(($mdate - $sdate)) + + if [ $master_offset -gt $MAX_SOURCE_OFFSET ]; then + rdate=$(query "$url/getdata.php?$src&db_mask=0&format=csv&window=-1&rt=1&time_format=U" | cut -d ',' -f 1 | cut -d '.' -f 1) + cache_offset=$(($rdate - $mdate)) + if [ $cache_offset -gt $MAX_MASTER_OFFSET ]; then + echo "ADEI cache is off by $(format_time $cache_offset) for '$src'" + healthy=2 + else + offset=$(($now - $rdate)) +# echo "Source '$src' is not updated for $(format_time $offset)" + fi + fi + + if [ $slave_offset -gt $MAX_SLAVE_OFFSET ]; then + echo "MySQL slave is off by $(format_time $slave_offset) for '$src'" + healthy=2 + fi + + [ -n "$msg" ] && msg="${msg}, " + [ -z "$msg" ] && msg="\${color gray}/ " + msg="${msg}cache $(format_time $master_offset)" + [ $slave_offset -gt 0 ] && msg="$msg & slave $(format_time $slave_offset)" + msg="$msg off" + fi + +fi + +echo "$online $healthy $version $msg" |