#!/bin/bash

source $(dirname $0)/../../etc/vmm/kvm/kvmrc
source $(dirname $0)/../../scripts_common.sh

HOST=$1
DOMAIN_ID=$2
REQUEST_ID=$3
request_index=$4

user=$(whoami)
if [ "$user" == "$ADMIN_USERNAME" ]; then
    LIBVIRT_URI=qemu+ssh://$user@$HOST/system
else
    LIBVIRT_URI=qemu+tcp://$user@$HOST/system
fi

count=0

shutdown_command="virsh --connect $LIBVIRT_URI shutdown $DOMAIN_ID"

# Check if the domain is already shutdown
virsh --connect $LIBVIRT_URI --readonly dominfo $DOMAIN_ID > /dev/null 2>&1 || exit 0

#If VM does not have ACPI enabled do not try to use it, destroy instead shutdown
if [ "x$CANCEL_NO_ACPI" = "xyes" ]; then
    virsh --connect $LIBVIRT_URI dumpxml $DOMAIN_ID | grep -q acpi

    if [ "x$?" != "x0" ]; then
        shutdown_command="virsh --connect $LIBVIRT_URI destroy $DOMAIN_ID"
    fi
fi

if [ -z "$SHUTDOWN_TIMEOUT" ]; then
    TIMEOUT=120
else
    TIMEOUT=$SHUTDOWN_TIMEOUT
fi

HALF_LOOP=$(($TIMEOUT/2))

function monitor
{
    # Issue another shutdown to cover occasional libvirt lack of attention
    if [ "$count" -eq "$HALF_LOOP" ]
    then
        eval $shutdown_command
    fi

    let count=count+1

    export count

    virsh --connect $LIBVIRT_URI --readonly dominfo $DOMAIN_ID > /dev/null 2>&1

    [ "x$?" != "x0" ]
}

exec_and_log_brest "$shutdown_command" \
    "Could not shutdown $DOMAIN_ID" \
    $ONE_AD_LOGS/$REQUEST_ID/$request_index \
    $ONE_AD_LOGS/$REQUEST_ID/wait/fin

retry $TIMEOUT monitor

force_shutdown_brest "$DOMAIN_ID" \
    "virsh --connect $LIBVIRT_URI destroy $DOMAIN_ID" \
    $ONE_AD_LOGS/$REQUEST_ID/$request_index \
    $ONE_AD_LOGS/$REQUEST_ID/wait/fin

echo "0" > $ONE_AD_LOGS/$REQUEST_ID/$request_index.st
echo "" > $ONE_AD_LOGS/$REQUEST_ID/$request_index.log
touch $ONE_AD_LOGS/$REQUEST_ID/wait/fin
