#!/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 --crash $1 $DEBUG/$1.dump
  fi
  # destroy and restart guest
  virsh destroy $1
  sleep 10s
  virsh start $1
  sleep 5m # + 5m from main loop
}

phase1() {
  echo "No ping from $1, waiting 5m before restart ..."
  date
  ip=$1
  sleep 5m # try to wait, which panic automatically restarts this guest
  ping -c3 $ip || restart $ip
}

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