#!/bin/bash

FOLDER="."
LIMIT="80"
SLACK_CHANNEL="default"
REPORT="storage"

while getopts ":l:f:s:i" opt; do
    case $opt in
        l)
            LIMIT="$OPTARG"
            ;;
        i)
            REPORT="inodes"
            ;;
        f)
            FOLDER="$OPTARG"
            ;;
        s)
            SLACK_CHANNEL="$OPTARG"
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            echo "Usage: $0 -f /var -l 80" >&2
            echo "" >&2
            echo "    Options:" >&2
            echo "             -f    <FOLDER> to check. Default: \".\"" >&2
            echo "             -i    Report inodes available instead of storage space." >&2
            echo "             -l    <LIMIT> to trigger alert in Slack. Default: 80" >&2
            echo "             -s    <SLACK_CHANNEL> to send the alert to. Default: \"default\"." >&2
            echo "" >&2
            echo "    If used storage space in specified <FOLDER> is over the given <LIMIT>" >&2
            echo "    it will post an alert in a Slack channel of choice." >&2
            exit 1
            ;;
        :)
            echo "Option -$OPTARG requires an argument." >&2
            exit 1
            ;;
    esac
done

trim() {
    # PERCENT=`echo ${PERCENT%%*( )}`  # trim right
    # PERCENT=`echo \(${PERCENT##*( )}\)`  # trim left

    PERCENT=`echo ${PERCENT} | sed -e 's/^[ ]*//'` # trim left
    PERCENT=`echo ${PERCENT} | sed -e 's/[ ]*$//'` # trim right
    PERCENT=`echo ${PERCENT} | sed -e 's/\%$//'` # remove % character

    AVAIL=`echo ${AVAIL} | sed -e 's/^[ ]*//'` # trim left
}


MOUNT_POINT=`df -h . --output=target | tail -1`

if [ "${REPORT}" = "inodes" ]
then
    PERCENT=`df . --output=ipcent | tail -1`
    AVAIL=`df -h . --output=iavail | tail -1`
    trim
    MESSAGE="${AVAIL} inodes available (${PERCENT}% used) in \`${MOUNT_POINT}\` at ${HOSTNAME}."
    TITLE="Low available inodes count in ${HOSTNAME}"
else
    PERCENT=`df . --output=pcent | tail -1`
    AVAIL=`df -h . --output=avail | tail -1`
    trim
    MESSAGE="${AVAIL} storage available (${PERCENT}% used) in \`${MOUNT_POINT}\` at ${HOSTNAME}."
    TITLE="Low storage space in ${HOSTNAME}"
fi


HOSTNAME=`cat /proc/sys/kernel/hostname`


if [ ${PERCENT} -gt ${LIMIT} ]
then
    cd "$(dirname "$0")"
    ./slack-message -c ${SLACK_CHANNEL} -m "${MESSAGE}" -t "${TITLE}"
fi


