#!/bin/bash
# Script for checking on registered and orphaned snapshots
# Needs firewall open on the host which has script scheduled esxcfg-firewall -o 443,tcp,out,vmware-cmd 
# Needs ssh keys to be setup: http://www.rtfm-ed.co.uk/?p=156

# Environment part 1
ESXHOSTS="esx01 esx02 esx03 esx04 esx05"
MAILTO=admin1@domain.com,admin2@domain.com
MAILFROM=snapcheck@domain.com
MAILRELAY=10.0.0.1
MAILSUBJ="Snapshot inventory from `hostname`"
DNSDOMAIN="domain.com"
SMTPPATH="/usr/local/bin/smtp_send.pl"
LOG="/var/log/snapcheck.log"
MYDATE=$(date +%d-%m-%y)
VMFSYELLOW=90
VMFSRED=95

# creating log file and start html and table 
cat /dev/null > "${LOG}"
echo "<html>" >> "${LOG}"
echo "<head>" >> "${LOG}"
echo "<style>" >> "${LOG}"
echo "body {margin: 10px; width: 600px; font-family:arial; font-size: 10px;}" >> "${LOG}" 
echo "div#footer {font-size: 9px;}" >> "${LOG}" 
echo "</style>" >> "${LOG}"
echo "</head>" >> "${LOG}"
echo "<body>" >> "${LOG}"
echo "<table cellspacing="0" cellpadding="2" border="1"; style='border-collapse:collapse; background-color: white; color: black'>" >> "${LOG}"

# Getting VM Snapshot info per esx host
for esxhost in ${ESXHOSTS}; do 
  echo "<tr><th colspan='3'; align='left'; style='background-color: navy; color: white'>" >> "${LOG}"
  echo "${esxhost} - $MYDATE</th></tr>" >> "${LOG}"
  echo "" >> "${LOG}"
  echo "<tr>" >> "${LOG}" 
  echo "<td><b>Virtual Machine</b></td><td><b>Registered Snapshot</b></td><td><b>Snapshot Info</b></td>" >> "${LOG}"
  echo "</tr>" >> "${LOG}" 

  vmware-cmd -H ${esxhost}.${DNSDOMAIN} -U ${USER} -P ${PASSWORD} -l | while read config ; do
  VMX="$config"
  VMNAME=`vmware-cmd -H ${esxhost}.${DNSDOMAIN} -U ${USER} -P ${PASSWORD} "$VMX" getconfig displayname -q`
  SNAP=`vmware-cmd -H ${esxhost}.${DNSDOMAIN} -U ${USER} -P ${PASSWORD} "$VMX" hassnapshot -q`
  VMDIR=`dirname "${config}"`
  DELTAS=`cd "$VMDIR" ; ls -sh1 *delta.vmdk`	
  if [ "$SNAP" == "1" ]; then
    REGSNAP="Yes"
    WARNING="yellow" 
  else
    REGSNAP="No"
    if [ "$DELTAS" == "" ]; then
     WARNING="white" 
    else
     WARNING="red" 
    fi
  fi
  echo "<tr><td style='background-color: ${WARNING}'>$VMNAME</td>" >> "${LOG}"
  echo "<td style='background-color: ${WARNING}'>$REGSNAP</td>" >> "${LOG}" 
  echo "<td style='background-color: ${WARNING}'>$DELTAS</td></tr>" >> "${LOG}"
  done
done

# Creating and table ending for snapshot info
  echo "</table><br><br>" >> "${LOG}"

# Reporting VMFS Disk Usage
  echo "<table cellspacing="0" cellpadding="2" border="1"; style='border-collapse:collapse; background-color: white; color: black'>" >> "${LOG}"
  echo "<tr><th colspan='5'; align='left'; style='background-color: navy; color: white'>" >> "${LOG}"
  echo "VMFS Disk Usage - $MYDATE</th></tr>" >> "${LOG}"
  echo "" >> "${LOG}"
  echo "<tr>" >> "${LOG}" 
  echo "<td><b>VMFS Volume</b></td><td><b>Disk Size</b></td><td><b>Used</b></td><td><b>Available</b></td><td><b>Percentage</b></td>" >> "${LOG}"
  echo "</tr>" >> "${LOG}" 
  vdf -h -P | grep -E '^/vmfs/volumes/' | awk '{ print $2 " " $3 " " $4 " " $5 " " $6 }' | while read output ; do
    DISKSIZE=$(echo $output | awk '{ print $1 }' )
    DISKUSED=$(echo $output | awk '{ print $2 }' )
    DISKAVAILABLE=$(echo $output | awk '{ print $3 }' )
    PERCENTINUSE=$(echo $output | awk '{ print $4 }' )
    VOLNAME=$(echo $output | awk '{ print $5 }' )
    CUTPERC=$(echo $PERCENTINUSE | cut -d'%' -f1  )
    WARNING="white"
    if [ $CUTPERC -ge $VMFSYELLOW ] ; then
      WARNING="yellow" 
    fi  
      if [ $CUTPERC -ge $VMFSRED ] ; then
      WARNING="red" 
      fi
    fi
    echo "<tr><td style='background-color: ${WARNING}'>$VOLNAME</td>" >> "${LOG}"
    echo "<td style='background-color: ${WARNING}'>$DISKSIZE</td>" >> "${LOG}" 
    echo "<td style='background-color: ${WARNING}'>$DISKUSED</td>" >> "${LOG}" 
    echo "<td style='background-color: ${WARNING}'>$DISKAVAILABLE</td>" >> "${LOG}" 
    echo "<td style='background-color: ${WARNING}'>$PERCENTINUSE</td></tr>" >> "${LOG}"
  done
  echo "</table>" >> "${LOG}"


# Creating html ending and sending the email
  echo "<div id='footer'>Created by Yellow-Bricks.com.</div>" >> "${LOG}"
  echo "</body>" >> "${LOG}"
  echo "</html>" >> "${LOG}" 
  ${SMTPPATH} -t ${MAILTO} -s "${MAILSUBJ}" -f ${MAILFROM} -m "`cat "${LOG}"`" -r ${MAILRELAY}

