#!/bin/bash

USER='root'
PASSWORD='password'

while getopts s:u:p: OPTION
do case $OPTION in
	s) SERVER=$OPTARG;;
	u) USER="$OPTARG";;
	p) PASSWORD="$OPTARG";;
	?) echo "Usage: $0 -s server -u user -p password" && exit 1;;
esac
done
shift $(($OPTIND - 1))

if [ -z "$SERVER" ] 
then 
	SERVER=$1
fi

if [ -z "$SERVER" ]
then 
	echo "Please provide server using -s option"
	exit 1
fi

echo getting xapi database graph \(as $USER@$SERVER password \"$PASSWORD\"\)

GRAPHPROG="../../graph/graph -h $SERVER -u $USER -pw $PASSWORD"
MACHINES="VM host"
STORAGE_OBJECTS="VBD VDI SR PBD"
NETWORKING_OBJECTS="VIF network PIF"

GRAPHVIZ_ALGORITHM=fdp
GRAPHVIZ_OUTPUT_FORMAT=png
GRAPHVIZPROG="dot -T$GRAPHVIZ_OUTPUT_FORMAT -K$GRAPHVIZ_ALGORITHM"

#the graph file names are displayed by eog in alphabetical order
SN_GRAPH_NAME=a_storage_and_networks.$GRAPHVIZ_OUTPUT_FORMAT
S_GRAPH_NAME=b_storage.$GRAPHVIZ_OUTPUT_FORMAT
N_GRAPH_NAME=c_networks.$GRAPHVIZ_OUTPUT_FORMAT
A_GRAPH_NAME=z_all.$GRAPHVIZ_OUTPUT_FORMAT
ALL_GRAPH_NAMES="$SN_GRAPH_NAME $S_GRAPH_NAME $N_GRAPH_NAME $A_GRAPH_NAME"

$GRAPHPROG $MACHINES $STORAGE_OBJECTS    | $GRAPHVIZPROG > $S_GRAPH_NAME
$GRAPHPROG $MACHINES $NETWORKING_OBJECTS | $GRAPHVIZPROG > $N_GRAPH_NAME
$GRAPHPROG $MACHINES $STORAGE_OBJECTS $NETWORKING_OBJECTS | $GRAPHVIZPROG > $SN_GRAPH_NAME
$GRAPHPROG -all -singleton | $GRAPHVIZPROG > $A_GRAPH_NAME

eog $ALL_GRAPH_NAMES &
