From 42a5ca5f2e593ea72f99037bdf94f7389589ad35 Mon Sep 17 00:00:00 2001 From: Sergio Vega Date: Thu, 10 Jan 2019 18:01:33 -0600 Subject: [PATCH] Improvements --- src/vmm_mad/remotes/kvm/poll | 121 ++++++----------------------------- 1 file changed, 19 insertions(+), 102 deletions(-) diff --git a/src/vmm_mad/remotes/kvm/poll b/src/vmm_mad/remotes/kvm/poll index 5841e6c781..1a65836fc2 100644 --- a/src/vmm_mad/remotes/kvm/poll +++ b/src/vmm_mad/remotes/kvm/poll @@ -49,8 +49,6 @@ module KVM :domstate => 'virsh --connect LIBVIRT_URI --readonly domstate', :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', :domstats => 'virsh --connect LIBVIRT_URI --readonly domstats', :top => 'top -b -d2 -n 2 -p ', 'LIBVIRT_URI' => 'qemu:///system' @@ -91,7 +89,7 @@ module KVM xml = dump_xml(one_vm) - values.merge!(get_interface_statistics(one_vm, xml)) + values.merge!(get_io_statistics(one_vm, xml)) return values end @@ -306,102 +304,9 @@ module KVM `#{virsh(:dumpxml)} '#{vmid}' 2>/dev/null` end - # Aggregate statics of all VM NICs - # @param the ID of the VM as defined in libvirt - # @param text [nil, String] dumpxml output or nil to execute dumpxml - # @return [Hash] with network stats, by name [symbol] :netrx, :nettx - def self.get_interface_statistics(vmid, text = nil) - text = dump_xml(vmid) if !text - - return {} if $?.exitstatus != 0 - - doc = REXML::Document.new(text) - - interfaces = Array.new - - doc.elements.each('domain/devices/interface/target') do |ele| - interfaces << ele.attributes["dev"] - end - - return {} if interfaces.empty? - - values = Hash.new - - values[:netrx] = 0 - values[:nettx] = 0 - - interfaces.each do |interface| - text=`#{virsh(:domifstat)} #{vmid} #{interface} 2>/dev/null` - - next if $?.exitstatus != 0 - - text.each_line do |line| - columns = line.split(/\s+/) - - case columns[1] - when 'rx_bytes' - values[:netrx] += columns[2].to_i - when 'tx_bytes' - values[:nettx]+=columns[2].to_i - end - end - end - - 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} 2>/dev/null` - - 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 - def self.get_io_statistics(vmid, text = nil) - #disks=get_disk_names(vmid, text) - #puts "disk = #{disks}" vm_stats=`#{virsh(:domstats)} #{vmid}` - #if disks && !disks.empty? values={} values[:netrx] = 0 values[:nettx] = 0 @@ -410,12 +315,24 @@ module KVM values[:diskrdiops]=0 values[:diskwriops]=0 - vm_stats.scan(/rx.bytes=(\d*)/).each { |value| values[:netrx]+=value[0].to_i } - vm_stats.scan(/tx.bytes=(\d*)/).each { |value| values[:nettx]+=value[0].to_i } - vm_stats.scan(/rd.bytes=(\d*)/).each { |value| values[:diskrdbytes]+=value[0].to_i } - vm_stats.scan(/wr.bytes=(\d*)/).each { |value| values[:diskwrbytes]+=value[0].to_i } - vm_stats.scan(/rd.reqs=(\d*)/).each { |value| values[:diskrdiops]+=value[0].to_i } - vm_stats.scan(/wr.reqs=(\d*)/).each { |value| values[:diskwriops]+=value[0].to_i } + + vm_stats.each_line do |line| + columns=line.split(/=(\d+)/) + case columns[0] + when /rx.bytes/ + values[:netrx]+=columns[1].to_i + when /tx.bytes/ + values[:nettx]+=columns[1].to_i + when /rd.bytes/ + values[:diskrdbytes]+=columns[1].to_i + when /wr.bytes/ + values[:diskwrbytes]+=columns[1].to_i + when /rd.reqs/ + values[:diskrdiops]+=columns[1].to_i + when /wr.reqs/ + values[:diskwriops]+=columns[1].to_i + end + end values end