#!/bin/bash
read -r -d '' USAGE << EOUSAGE
Usage: $0 -m Number -c Number

Default: -m 256 -c 30

Options
-m      Memory free threshold in MiB
-c      Cooldown for restart in minutes"
EOUSAGE

set -e

while getopts "m:c:" flag
do
case "${flag}" in
    m) MEMFREETHRESHOLD=${OPTARG};;
    c) COOLDOWNFORRESTART=${OPTARG};;
    *) >&2 echo "Invalid action. $USAGE"; exit 1
esac
done

if [ -z $MEMFREETHRESHOLD ] || [ -z $COOLDOWNFORRESTART ]; then
    >&2 echo "Invalid action. $USAGE"; exit 1
else
    if ! find /tmp/release_mysql_cached_memory_cooldown -mmin -$COOLDOWNFORRESTART 2>/dev/null | grep -q .; then
        echo "Checking if we're in a low memory situation"
        if [ $(free -m | grep Mem | awk '{print$7}') -lt $MEMFREETHRESHOLD ]; then
            touch /tmp/release_mysql_cached_memory_cooldown
            echo "Low memory condition detected and we haven't restarted MySQL in the last $COOLDOWNFORRESTART minutes"
            echo "Restarting MySQL..."
            hypernode-servicectl restart mysql
        else
            echo "No low memory condition detected, have at least $MEMFREETHRESHOLD MB of mem available"
        fi;
    else
        echo "Not checking low memory condition, already restarted MySQL because of low mem in the last $COOLDOWNFORRESTART minutes"
    fi
fi
