#!/bin/bash

if [ -f /run/mysqlbackup.lock ]
then
    echo "OK"
    exit 0
fi

### VARIABLES ### \
STATUS=$(/usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf -e "SHOW SLAVE STATUS\G")

## Check if data returned ##

if [ "$?" != 0 ]
then
    echo "Can't connect"
    exit 2
fi

if [ "x$STATUS" == "x" ]
then
    echo "OK"
    exit 0
fi

LAST_ERRNO=$(echo "$STATUS" | grep "Last_Errno:" | awk '{ print $2 }')
SECONDS_BEHIND_MASTER=$(echo "$STATUS" | grep "Seconds_Behind_Master:" | awk '{ print $2 }')
IO_IS_RUNNING=$(echo "$STATUS" | grep "Slave_IO_Running:" | awk '{ print $2 }')
SQL_IS_RUNNING=$(echo "$STATUS" | grep "Slave_SQL_Running:" | awk '{ print $2 }')

## Check how slow the slave is ##
if [ "$SECONDS_BEHIND_MASTER" == "NULL" ]
then
    ERROR="The Slave is reporting 'NULL' (Seconds_Behind_Master)"
elif [ "x$SECONDS_BEHIND_MASTER" == "x" ]
then
	ERROR="No replication?"
elif [ "$SECONDS_BEHIND_MASTER" -gt 120 ]
then
    LOG10=1
LOG10=`echo $SECONDS_BEHIND_MASTER | awk '{printf "%11.0f\n",log($SECONDS_BEHIND_MASTER)/log(10)}' |tr -d "\t "`
    ERROR="The Slave is ~ 10^$LOG10 seconds behind the master (Seconds_Behind_Master)"
fi

## Check for SQL thread ##
if [ "$SQL_IS_RUNNING" != "Yes" ]
then
    ERROR="SQL thread not running (Slave_SQL_Running)"
fi

## Check For Last Error ##
if [ "$LAST_ERRNO" != 0 ]
then
    ERROR="Error processing relay log (Last_Errno)"
fi

## Check if IO thread is running ##
if [ "$IO_IS_RUNNING" != "Yes" ]
then
    ERROR="I/O thread not running (Slave_IO_Running)"
fi


if [ -z "$ERROR" ]; then
	echo "OK"
	exit 0
else
	echo $ERROR
	exit 1
fi
