tool to get libvirt VM memory usage and total
[shellsnippets/shellsnippets.git] / mksh / sysadmin / virtmem
1 #!/bin/mksh
2 # $Id: virtmem 4638 2015-11-27 10:28:12Z tglase $
3 #-
4 # Copyright © 2015
5 #       mirabilos <t.glaser@tarent.de>
6 #
7 # Provided that these terms and disclaimer and all copyright notices
8 # are retained or reproduced in an accompanying document, permission
9 # is granted to deal in this work without restriction, including un‐
10 # limited rights to use, publicly perform, distribute, sell, modify,
11 # merge, give away, or sublicence.
12 #
13 # This work is provided “AS IS” and WITHOUT WARRANTY of any kind, to
14 # the utmost extent permitted by applicable law, neither express nor
15 # implied; without malicious intent or gross negligence. In no event
16 # may a licensor, author or contributor be held liable for indirect,
17 # direct, other damage, loss, or other issues arising in any way out
18 # of dealing in the work, even if advised of the possibility of such
19 # damage or existence of a defect, except proven that it results out
20 # of said person’s immediate fault when using the work as intended.
21 #-
22 # Display memory usage of all running VMs on a wirrtualisation host.
23 #
24 # Syntax: virtmem host1 user@host2 …
25
26 function getlist {
27         srv=$1
28
29         [[ $srv = *@* ]] || srv=root@$srv
30
31         set -A vmlist -- $(ssh "$srv" virsh list | tail -n +3 | \
32             while read a b c; do echo $b; done)
33 }
34
35 function getmem {
36         ssh "$srv" cat /proc/meminfo | awk '/^MemTotal:/ { print $2 }'
37 }
38
39 function getone {
40         local what=$1
41
42         print $(for machine in "${vmlist[@]}"; do
43                 ssh "$srv" virsh dumpxml "${machine@Q}" | \
44                     fgrep "<$what "
45         done | sed -e 's/<[^>]*>//g' -e 's/ //g' | tr \\n +)0 | bc
46 }
47
48 for server in "$@"; do
49         getlist "$server"
50         if [[ -z $vmlist ]]; then
51                 print -r -- server="$server" error=no-VMs-found
52                 continue
53         fi
54         print -r -- server="$server" memory=$(getone memory) \
55             currentMemory=$(getone currentMemory) total=$(getmem)
56 done