#!/bin/bash

set -e

TMPDIR=/tmp/xvm-stats
OUTDIR=/tmp/xvm-stats

mkdir "$TMPDIR" || :
mkdir "$OUTDIR" || :

# First, generate the information for VMs in the database
# This leaves you with files "$TMPDIR"/xvm-dev.txt and "$TMPDIR"/xvm-prod.txt

echo "db: dev"
cd /mit/xvm/cron_scripts/db-backups
for i in *.gz; do echo -n ${i%.sql.gz}; echo -ne "\t"; zcat "$i" | awk '/^\\./ {a=0} a == 1 {print} /^COPY machines/ {a=1}' | wc -l; done | /mit/xvm/sbin/stats/fixLogTimes.py > "$TMPDIR"/xvm-dev.txt
echo "db: prod"
cd /mit/xvm/backups/db/prod
for i in $(find . -name '*.gz'); do echo -n ${i%.sql.gz}; echo -ne "\t"; zcat "$i" | awk '/^\\./ {a=0} a == 1 {print} /^COPY machines/ {a=1}' | wc -l; done | /mit/xvm/sbin/stats/fixLogTimes.py > "$TMPDIR"/xvm-prod.txt

# Next, generate the information for running VMs
# This leaves you with file "$TMPDIR"/xvm-running.txt

echo "running: prod"
/mit/xvm/sbin/hosthistory > "$TMPDIR"/xvm-running.txt

# Put this data into RRD archives

echo "rrd: create"
rrdtool create "$TMPDIR"/xvm-dev.rrd -b 1210909200 -s 3600 DS:vms:GAUGE:24800:0:U RRA:AVERAGE:0.9:1:43829
rrdtool create "$TMPDIR"/xvm-prod.rrd -b 1210909200 -s 3600 DS:vms:GAUGE:24800:0:U RRA:AVERAGE:0.9:1:43829
rrdtool create "$TMPDIR"/xvm-running.rrd -b 1210909200 -s 3600 DS:host1:GAUGE:24800:0:U DS:host2:GAUGE:24800:0:U DS:host3:GAUGE:24800:0:U DS:host4:GAUGE:24800:0:U RRA:AVERAGE:0.9:1:43829

echo "rrd: update"
set +e
/mit/xvm/sbin/stats/logToUnixTime.py < "$TMPDIR"/xvm-dev.txt | sort -n | while read time value; do rrdtool update "$TMPDIR"/xvm-dev.rrd $time:$value; done
/mit/xvm/sbin/stats/logToUnixTime.py < "$TMPDIR"/xvm-prod.txt | sort -n | while read time value; do rrdtool update "$TMPDIR"/xvm-prod.rrd $time:$value; done
tail -n +2 "$TMPDIR"/xvm-running.txt | /mit/xvm/sbin/stats/logToUnixTime.py | sort -n | while read time v1 v2 v3 v4; do rrdtool update "$TMPDIR"/xvm-running.rrd $time:$v1:$v2:$v3:$v4; done
set -e

# Now create graphs from them

echo "rrd:graph"
rrdtool graph "$OUTDIR"/xvm-vms.png -s 1210909200 -e now -l 0 -w 800 -h 600 -t "XVM VM count" -a PNG \
DEF:dbdev="$TMPDIR"/xvm-dev.rrd:vms:AVERAGE \
DEF:dbprod="$TMPDIR"/xvm-prod.rrd:vms:AVERAGE \
AREA:dbdev#ff0000:"Dev DB" \
AREA:dbprod#00ff00:"Prod DB":STACK \
DEF:host1="$TMPDIR"/xvm-running.rrd:host1:AVERAGE \
DEF:host2="$TMPDIR"/xvm-running.rrd:host2:AVERAGE \
DEF:host3="$TMPDIR"/xvm-running.rrd:host3:AVERAGE \
DEF:host4="$TMPDIR"/xvm-running.rrd:host4:AVERAGE \
LINE:host1#000000:xh1 \
LINE:host2#000000:xh2:STACK \
LINE:host3#000000:xh3:STACK \
LINE:host4#000000:xh4:STACK

rrdtool graph "$OUTDIR"/xvm-vms-simple.png -s 1210909200 -e now -l 0 -w 800 -h 600 -t "XVM VM count" -a PNG \
DEF:dbdev="$TMPDIR"/xvm-dev.rrd:vms:AVERAGE \
DEF:dbprod="$TMPDIR"/xvm-prod.rrd:vms:AVERAGE \
AREA:dbdev#ff0000:"Dev DB" \
AREA:dbprod#00ff00:"Prod DB":STACK \
DEF:host1="$TMPDIR"/xvm-running.rrd:host1:AVERAGE \
DEF:host2="$TMPDIR"/xvm-running.rrd:host2:AVERAGE \
DEF:host3="$TMPDIR"/xvm-running.rrd:host3:AVERAGE \
DEF:host4="$TMPDIR"/xvm-running.rrd:host4:AVERAGE \
CDEF:running=host1,host2,+,host3,+,host4,+ \
LINE:running#000000:running

rrdtool graph "$OUTDIR"/xvm-vms-simple.pdf -s 1210909200 -e now -l 0 -w 800 -h 600 -t "XVM VM count" -a PDF \
DEF:dbdev="$TMPDIR"/xvm-dev.rrd:vms:AVERAGE \
DEF:dbprod="$TMPDIR"/xvm-prod.rrd:vms:AVERAGE \
AREA:dbdev#ff0000:"Dev DB" \
AREA:dbprod#00ff00:"Prod DB":STACK \
DEF:host1="$TMPDIR"/xvm-running.rrd:host1:AVERAGE \
DEF:host2="$TMPDIR"/xvm-running.rrd:host2:AVERAGE \
DEF:host3="$TMPDIR"/xvm-running.rrd:host3:AVERAGE \
DEF:host4="$TMPDIR"/xvm-running.rrd:host4:AVERAGE \
CDEF:running=host1,host2,+,host3,+,host4,+ \
AREA:running#0000ff:running
