diff --git a/kvmstats b/kvmstats
index 449b0e0..89cfc7a 100755
--- a/kvmstats
+++ b/kvmstats
@@ -8,7 +8,7 @@ error () {
}
usage () {
- echo 'usage: kvmstats [-a] [-u k|m|g]' >&2
+ echo 'usage: kvmstats [-a] [-u k|m|g] [-o h|human|html|csv]' >&2
exit 1
}
@@ -18,9 +18,29 @@ do
done
POW=$(echo 1024 ^ 3 | bc)
+FMT=human
while [ $# -ne 0 ] && echo "$1" | grep -q '^-[[:alnum:]]'
do
case $1 in
+ '-a')
+ SHOW_AVAIL=y
+ ;;
+ '-o')
+ case $2 in
+ 'h' | 'human')
+ FMT=human
+ ;;
+ 'html')
+ FMT=html
+ ;;
+ 'csv')
+ FMT=csv
+ ;;
+ *)
+ usage
+ ;;
+ esac
+ ;;
'-u')
case $2 in
'k')
@@ -36,9 +56,6 @@ do
usage
esac
;;
- '-a')
- SHOW_AVAIL=y
- ;;
*)
usage
esac
@@ -50,7 +67,7 @@ do
echo "$VM"
virsh vcpucount --maximum --current "$VM"
# libvirt store memory in KiB, POW must be lowered by 1
- virsh domstats --balloon "$VM" | awk 'BEGIN { FS="=" } /balloon.maximum/ { print $2 / '$((POW / 1024))'}'
+ virsh domstats --balloon "$VM" | awk -F= '/balloon.maximum/ { print $2 / '$((POW / 1024))'}'
for BLK in $(virsh domblklist "$VM" | sed '1,2d;/-$/d;/^$/d' | cut -d\ -f1)
do
virsh domblkinfo "$VM" "$BLK"
@@ -59,10 +76,18 @@ do
done | xargs -n5 | {
echo vm vcpu ram disk running
awk '{ print } /yes$/ { vcpu += $2; ram += $3; disk += $4; running++ } END { print "TOTAL(running)", vcpu, ram, disk, running }'
- if [ "$SHOW_AVAIL" ]
- then
- AV_CPU=$(nproc)
- AV_MEM=$(awk '/^MemTotal:/ { print int($2 / '$((POW / 1024))' ) }' /proc/meminfo)
- echo AVAILABLE "$AV_CPU" "$AV_MEM"
- fi
-} | column -t
+ test "$SHOW_AVAIL" && {
+ nproc
+ awk '/^MemTotal:/ { print int($2 / '$((POW / 1024))' ) }' /proc/meminfo
+ } | xargs printf 'AVAILABLE %s %s\n'
+} | case $FMT in
+'human')
+ column -t
+ ;;
+'html')
+ awk 'BEGIN{print "
"}{printf "";for(i=1;i<=NF;i++)printf "%s | ", $i;print "
"}END{print "
"}'
+ ;;
+'csv')
+ tr ' ' ','
+ ;;
+esac
diff --git a/kvmstats.html b/kvmstats.html
new file mode 100644
index 0000000..90c90a3
--- /dev/null
+++ b/kvmstats.html
@@ -0,0 +1,20 @@
+
+vm vcpu ram disk running |
+icinga2-web | 4 | 4 | 30 | yes |
+icinga2-node | 4 | 4 | 30 | yes |
+bruno | 4 | 2 | 12 | yes |
+evoadmin-web_packweb | 2 | 1 | 3 | no |
+icinga-test | 8 | 4 | 15 | no |
+debian10 | 2 | 2 | 22 | yes |
+ansible-test1 | 2 | 1 | 17 | no |
+debian7 | 4 | 4 | 0 | no |
+debian8 | 4 | 4 | 18 | no |
+debian9 | 4 | 4 | 30 | no |
+EvoBSD | 2 | 1 | 42 | no |
+EvoMaquette | 4 | 8 | 15 | no |
+for-build-rescue-cd | 8 | 4 | 4 | no |
+grafana | 4 | 4 | 5 | no |
+installbuster | 1 | 1 | 20 | no |
+TOTAL(running) | 0 | 0 | 0 | 4 |
+AVAILABLE | 8 | 39 |
+