1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

F 2921: get disk IO information from kvm probes

This commit is contained in:
Javi Fontan 2016-10-31 18:37:15 +01:00
parent b43bc21b1a
commit a46863fab0

View File

@ -49,6 +49,7 @@ module KVM
:list => 'virsh --connect LIBVIRT_URI --readonly list',
:dumpxml => 'virsh --connect LIBVIRT_URI --readonly dumpxml',
:domifstat => 'virsh --connect LIBVIRT_URI --readonly domifstat',
:domblkstat => 'virsh --connect LIBVIRT_URI --readonly domblkstat',
:top => 'top -b -d2 -n 2 -p ',
'LIBVIRT_URI' => 'qemu:///system'
}
@ -154,6 +155,8 @@ module KVM
vm[:name] = uuid
end
values.merge!(get_diskio_statistics(name, xml))
vms_info[vm[:name]] = values
end
@ -322,6 +325,52 @@ module KVM
values
end
def self.get_disk_names(vmid, text = nil)
text = dump_xml(vmid) if !text
doc=REXML::Document.new(text)
disks = []
doc.elements.each('domain/devices/disk/target') do |ele|
disks << ele.attributes["dev"]
end
disks
end
def self.get_diskio_statistics(vmid, text = nil)
disks=get_disk_names(vmid, text)
if disks && !disks.empty?
values={}
values[:diskrdbytes]=0
values[:diskwrbytes]=0
values[:diskrdiops]=0
values[:diskwriops]=0
disks.each do |disk|
text=`#{virsh(:domblkstat)} #{vmid} #{disk}`
text.each_line do |line|
columns=line.split(/\s+/)
case columns[1]
when 'rd_bytes'
values[:diskrdbytes]+=columns[2].to_i
when 'wr_bytes'
values[:diskwrbytes]+=columns[2].to_i
when 'rd_req'
values[:diskrdiops]+=columns[2].to_i
when 'wr_req'
values[:diskwriops]+=columns[2].to_i
end
end
end
values
else
{}
end
end
# Translate libvirt state to Opennebula monitor state
# @param state [String] libvirt state
# @return [String] OpenNebula state