#!/bin/bash
## Report DC Usage information
VERSION="usage 0.3.4"

svcid=$BASH_ARGV
MYSQL_USER="dc_usage"
MYSQL_DB="dc_usage"
MYSQL_HOST="opsdb-p1.sjc.axdc.net"
MYSQL_PW="r0Us3@g3!"
HEADER_STRING="mysql -t -u ${MYSQL_USER} -p ${MYSQL_DB} -h ${MYSQL_HOST} --password=${MYSQL_PW} -e "

function main {
usage=$(${HEADER_STRING} "select s.svcid as 'svcid',CASE WHEN a.namespace IS NULL then 'Inactive' ELSE a.namespace END as 'assigned',n.name as 'data_in',ROUND((o.size / 1024),4) as 'size(GB)' ,o.date_inserted as 'timestamp' from svcid as s left join offsite as o on s.id = o.svcid_id left join namespace as n on o.namespace_id = n.id left join assignment as a on s.svcid = a.svcid where s.svcid=\"${svcid}\" and o.date_inserted = ( SELECT MAX(date_inserted) AS max FROM offsite where date_inserted > now() - INTERVAL 2 HOUR);")
if [ -n "${usage}" ]; then
    echo -e "${usage}"
else
    echo -e "Warning: SVCID: ${svcid} not found."
fi
}

function bytes {
usage=$(${HEADER_STRING} "SELECT s.svcid, a.namespace AS 'assigned', n.name AS 'data_in', (a1.size * 1048576) as 'bytes', a1.date_inserted AS 'timestamp' FROM svcid s, namespace n, assignment a, offsite a1 INNER JOIN ( SELECT MAX(date_inserted) AS max FROM offsite GROUP BY DATE(date_inserted) DESC LIMIT 1) a2 ON a1.date_inserted = a2.max WHERE s.id = a1.svcid_id AND s.svcid = a.svcid AND n.id = a1.namespace_id AND s.svcid = \"${svcid}\" ORDER BY 3,5;")
if [ -n "${usage}" ]; then
    echo -e "${usage}"
else
    echo -e "Warning: SVCID: ${svcid} not found."
fi
}

function per_namespace {
usage=$(${HEADER_STRING} "SELECT s.svcid AS svcid, a.namespace AS 'assigned', n.name AS 'data_in', ROUND((p1.size / 1024), 2) AS 'size(GB)', p1.date_inserted AS timestamp FROM offsite AS p1 INNER JOIN ( SELECT svcid_id, date_inserted, count(*) AS rows from offsite GROUP BY svcid_id, date_inserted HAVING count(rows) > 1) AS p, namespace n, svcid s, assignment a WHERE p.svcid_id = p1.svcid_id AND p.date_inserted = p1.date_inserted AND n.id = p1.namespace_id AND s.id = p1.svcid_id AND s.svcid = a.svcid AND p1.date_inserted = (SELECT max(date_inserted) from offsite) AND s.svcid = \"${svcid}\"  ORDER BY n.name, p1.size;")
if [ -n "${usage}" ]; then
    echo -e "${usage}"
else
    echo -e "Warning: SVCID: ${svcid} not found."
fi
}

function time_series {
usage=$(${HEADER_STRING} "SELECT s.svcid, a.namespace AS 'assigned', n.name AS 'data_in', ROUND((a1.size / 1024),4) as 'size(GB)', a1.date_inserted AS 'timestamp' FROM svcid s, namespace n, assignment a, offsite a1 INNER JOIN ( SELECT MAX(date_inserted) AS max FROM offsite GROUP BY DATE(date_inserted) DESC LIMIT 7) a2 ON a1.date_inserted = a2.max WHERE s.id = a1.svcid_id AND s.svcid = a.svcid AND n.id = a1.namespace_id AND s.svcid = \"${svcid}\" ORDER BY 3,5;")
if [ -n "${usage}" ]; then
    echo -e "${usage}"
else
    echo -e "Warning: SVCID: ${svcid} not found."
fi
}

function help_text {
    echo -e "Print space used (in GB) of svcid\n"
    echo "Usage: usage [options] <svcid>"
    echo -e "\t-h\t - print this message"
    echo -e "\t-r\t - print per-namespace usage"
    echo -e "\t-t\t - print last 7 days of history for svcid"
    echo -e "\t-b\t - print per-namespace usage in bytes"
    echo -e "\t-v\t - print version"
    exit 2
}

case $1 in
    "-h")
        help_text
        ;;
    "-v")
        echo ${VERSION}
        ;;
    "-r")
	if [ "$#" -lt 2 ]; then
            echo -e "\nERROR: I need a svcid to check\n"
	else
            per_namespace
	
	fi
        ;;
    "-t")
	if [ "$#" -lt 2 ]; then
            echo -e "\nERROR: I need a svcid to check\n"
    else
            time_series
	fi
        ;;
    "-b")
    if [ "$#" -lt 2 ]; then
            echo -e "\nERROR: I need a svcid to check\n"
    else
            bytes
    fi
        ;;
    *)
	if [ "$#" -lt 1 ]; then
            echo -e "\nERROR: I need a svcid to check\n"
	else
            main
	fi
        ;;
    esac
