#!/bin/bash

warn=50
crit=100
DEBUG=""

while [ "$1" ]; do
  case "$1" in
    -w)
        warn=$2
    	shift
    	;;
    -c)
        crit=$2
        shift
        ;;
    -d)
        DBNAME=$2
        shift
        ;;
    -u)
        DBUSER="-U $2"
        shift
        ;;
    -H)
    	HOST="$2"
    	shift
    	;;
    -D)
    	DEBUG=1
    	;;
  esac
  shift
done

if [ -z "$HOST" -o -z "$DBNAME" ]; then
  echo "Not ehough parameters!"
  echo "Usage: $0 -H primary_hostname -d db_name [-u username] [-w warn] [-c critical]"
  exit 1
fi

SERVER1="$DBUSER $DBNAME"
SERVER2="-h $HOST $DBUSER $DBNAME"

TABLES=`psql -At $SERVER1 -c \
  "SELECT table_name FROM information_schema.tables WHERE table_catalog='osteo' AND table_type='BASE TABLE' AND table_schema NOT IN ('pg_catalog', 'information_schema', 'bucardo');" \
  `
sum=0
state=""
script_start=`date +%s.%N`
for i in $TABLES; do
  start=`date +%s.%N`
  row1=`psql -At $SERVER1 -c "SELECT count(1) FROM $i;"`
  row2=`psql -At $SERVER2 -c "SELECT count(1) FROM $i;"`
  end=`date +%s.%N`
  len=`echo $end $start - p | dc`
  diff=`echo $row2 $row1 - p | dc`
  if [ ! "$diff" = 0 ]; then
    if [ ! -z "$DEBUG" ]; then
      echo "$len $i $row1 $row2 $diff"
    fi
    state="$state $i=$diff"
  fi
  sum=$((sum+diff))
done
script_end=`date +%s.%N`
script_time=`echo $script_end $script_start - p | dc`

perfdata="diffsum=$sum time=$script_time"
if [ $sum -lt $warn ]; then
  echo "OK$state|$perfdata"
  exit 0
elif [ $sum -lt $crit ]; then
  echo "WARNING$state|$perfdata"
  exit 1
else
  echo "CRITICAL$state|$perfdata"
  exit 2
fi
