#!/usr/bin/bash

if [ -z "$1" ]; then
  echo "Usage: $0 guest [guest ...]"
  exit
fi

restart() {
  echo "Restarting $1 ..."
  date
  # save some debug information
  if [ -d "$DEBUG" ]; then
    ps Hax -o pid,command,state,wchan | grep '[k]vm' > $DEBUG/$1.ps
    virsh dump $1 $DEBUG/$1.dump
  fi
  # destroy and restart guest
  virsh destroy $1
  sleep 10s
  sleep 5m # + 5m from main loop
}

phase1() {
  echo "No ping from $1, waiting 5m before restart ..."
  date
  virsh start $1
  (
    hostname
    date
  ) | mail -s "Guest down for $1" root
  sleep 5m # try to wait, which panic automatically restarts this guest
  ping -c3 $1 || restart $1
}

while true; do
  for guest in $@ #unreachable
  do
    ping -q -c3 $guest >/dev/null || phase1 $guest
  done
  sleep 1m
done
