#!/bin/bash

# -------------------------------------------------------------------------- #
# Copyright 2002-2025, OpenNebula Project, OpenNebula Systems                #
#                                                                            #
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
# not use this file except in compliance with the License. You may obtain    #
# a copy of the License at                                                   #
#                                                                            #
# http://www.apache.org/licenses/LICENSE-2.0                                 #
#                                                                            #
# Unless required by applicable law or agreed to in writing, software        #
# distributed under the License is distributed on an "AS IS" BASIS,          #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
# See the License for the specific language governing permissions and        #
# limitations under the License.                                             #
#--------------------------------------------------------------------------- #

dir="$1"

vms=$(ls "$dir" | grep '^[0-9]\+$')

for vm in $vms; do
    vmdir="${dir}/${vm}"
    disks=$(ls "$vmdir" 2>/dev/null | grep '^disk\.[0-9]\+$')

    [ -z "$disks" ] && continue

    echo -n "VM = [ ID = $vm, MONITOR = \""

    vm_monitor=""

    for disk in $disks; do
        disk_id="$(echo "$disk" | cut -d. -f2)"
        disk_size="$(du -mL "${vmdir}/${disk}" 2>/dev/null | awk '{print $1}')"
        snap_dir="${vmdir}/${disk}.snap"

        [ -z "$disk_size" ] && continue

        vm_monitor="${vm_monitor}\nDISK_SIZE = [ ID=${disk_id}, SIZE=${disk_size}]"

        if [ -e "$snap_dir" ]; then
            snaps="$(ls "$snap_dir" | grep '^[0-9]$')"

            for snap in $snaps; do
                snap_size="$(du -mL "${snap_dir}/${snap}" 2>/dev/null | awk '{print $1}')"
                [ -z "$snap_size" ] && continue

                vm_monitor="${vm_monitor}\nSNAPSHOT_SIZE = "\
                    "[ ID=${snap}, DISK_ID=${disk_id}, SIZE=${snap_size}]"
            done
        fi
    done

    echo -e "$vm_monitor" | base64 -w 0 -

    echo "\"]"
done

