File: //proc/thread-self/root/opt/node_api/virsh_info.hook
#!/usr/bin/python
import os
import re
import json
vm_vnc_port_start=5900
def F_vm_list():
data = os.popen("virsh list | awk '{if ($1 ~ /^[0-9]+$/) print $2 }'").read()
vm_list = data.splitlines()
return vm_list
def F_vm_info(name):
data = os.popen("virsh dominfo " + name).read()
vm_info = data.splitlines()
return vm_info
def F_vm_vnc_port(name):
data = os.popen("virsh vncdisplay " + name).read()
data = data.strip()
data = data.replace(':', '')
return int(data) + vm_vnc_port_start
def F_hostname():
hostname = os.popen("hostname").read()
return hostname.strip()
def main():
data={}
data['server'] = F_hostname()
vm_list = F_vm_list()
for vm in vm_list:
data[vm]={}
lines = F_vm_info(vm)
for line in lines:
if "Id:" in line:
id=line.split(":")
id=id[1].strip()
if "State:" in line:
state=line.split(":")
state=state[1].strip()
if "CPU(s):" in line:
cpus=line.split(":")
cpus=cpus[1].strip()
if "CPU time:" in line:
cputime=line.split(":")
cputime=cputime[1].strip()
if "Used memory:" in line:
usedmemory=line.split(":")
usedmemory=usedmemory[1].strip()
usedmemory = usedmemory.replace(' KiB', '')
data[vm]["id"] = id
data[vm]["state"] = state
data[vm]["cpus"] = cpus
data[vm]["cputime"] = cputime
data[vm]["usedmemory"] = eval(usedmemory) / 1024
data[vm]["vnc_port"] = F_vm_vnc_port(vm)
print json.dumps(data)
if __name__ == "__main__":
main()