diff --git a/src/im_mad/remotes/vcenter.d/poll b/src/im_mad/remotes/vcenter.d/poll index b35e10a61f..5adec7835e 100755 --- a/src/im_mad/remotes/vcenter.d/poll +++ b/src/im_mad/remotes/vcenter.d/poll @@ -52,12 +52,15 @@ begin puts cluster.monitor puts cluster.monitor_host_systems - vm_monitor_info = cluster.monitor_vms + vm_monitor_info, last_perf_poll = cluster.monitor_vms if !vm_monitor_info.empty? puts "VM_POLL=YES" puts vm_monitor_info end + # Print last VM poll for perfmanager tracking + puts "VCENTER_LAST_PERF_POLL=" << last_perf_poll << "\n" + puts cluster.monitor_customizations dc = cluster.get_dc diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/host.rb b/src/vmm_mad/remotes/lib/vcenter_driver/host.rb index 0490a44aa1..231433361d 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/host.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/host.rb @@ -125,8 +125,6 @@ class ClusterComputeResource str_info << "FREEMEMORY=" << free_mem.to_s << "\n" str_info << "USEDMEMORY=" << (total_mem - free_mem).to_s << "\n" - str_info << "VCENTER_LAST_PERF_POLL=" << Time.now.to_i.to_s << "\n" - str_info << monitor_resource_pools(mhz_core) end @@ -400,7 +398,7 @@ class ClusterComputeResource pm = @vi_client.vim.serviceContent.perfManager - stats = [] + stats = {} max_samples = 9 refresh_rate = 20 #Real time stats takes samples every 20 seconds @@ -422,7 +420,11 @@ class ClusterComputeResource 'virtualDisk.numberReadAveraged','virtualDisk.numberWriteAveraged', 'virtualDisk.read','virtualDisk.write'], {max_samples: max_samples} - ) + ) rescue {} + end + + if !stats.empty? + last_mon_time = Time.now.to_i.to_s end get_resource_pool_list if !@rp_list @@ -500,7 +502,7 @@ class ClusterComputeResource view.DestroyView # Destroy the view - return str_info + return str_info, last_mon_time end def monitor_customizations diff --git a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb index d9d55f48d3..b0f8304c40 100644 --- a/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb +++ b/src/vmm_mad/remotes/lib/vcenter_driver/virtual_machine.rb @@ -2471,7 +2471,7 @@ class VirtualMachine < Template refresh_rate = provider.refreshRate if get_vm_id - stats = [] + stats = {} if (one_item["MONITORING/LAST_MON"] && one_item["MONITORING/LAST_MON"].to_i != 0 ) #Real time data stores max 1 hour. 1 minute has 3 samples @@ -2488,7 +2488,7 @@ class VirtualMachine < Template 'virtualDisk.numberReadAveraged','virtualDisk.numberWriteAveraged', 'virtualDisk.read','virtualDisk.write'], {interval:refresh_rate, max_samples: max_samples} - ) + ) rescue {} else # First poll, get at least latest 3 minutes = 9 samples stats = pm.retrieve_stats( @@ -2497,7 +2497,7 @@ class VirtualMachine < Template 'virtualDisk.numberReadAveraged','virtualDisk.numberWriteAveraged', 'virtualDisk.read','virtualDisk.write'], {interval:refresh_rate, max_samples: 9} - ) + ) rescue {} end if !stats.empty? && !stats.first[1][:metrics].empty? @@ -2544,23 +2544,30 @@ class VirtualMachine < Template write_iops += sample if sample > 0 } end - - # Accumulate values if present - previous_nettx = @one_item && @one_item["MONITORING/NETTX"] ? @one_item["MONITORING/NETTX"].to_i : 0 - previous_netrx = @one_item && @one_item["MONITORING/NETRX"] ? @one_item["MONITORING/NETRX"].to_i : 0 - previous_diskrdiops = @one_item && @one_item["MONITORING/DISKRDIOPS"] ? @one_item["MONITORING/DISKRDIOPS"].to_i : 0 - previous_diskwriops = @one_item && @one_item["MONITORING/DISKWRIOPS"] ? @one_item["MONITORING/DISKWRIOPS"].to_i : 0 - previous_diskrdbytes = @one_item && @one_item["MONITORING/DISKRDBYTES"] ? @one_item["MONITORING/DISKRDBYTES"].to_i : 0 - previous_diskwrbytes = @one_item && @one_item["MONITORING/DISKWRBYTES"] ? @one_item["MONITORING/DISKWRBYTES"].to_i : 0 - - @monitor[:nettx] = previous_nettx + (nettx_kbpersec * 1024 * refresh_rate).to_i - @monitor[:netrx] = previous_netrx + (netrx_kbpersec * 1024 * refresh_rate).to_i - - @monitor[:diskrdiops] = previous_diskrdiops + read_iops - @monitor[:diskwriops] = previous_diskwriops + write_iops - @monitor[:diskrdbytes] = previous_diskrdbytes + (read_kbpersec * 1024 * refresh_rate).to_i - @monitor[:diskwrbytes] = previous_diskwrbytes + (write_kbpersec * 1024 * refresh_rate).to_i + else + nettx_kbpersec = 0 + netrx_kbpersec = 0 + read_kbpersec = 0 + read_iops = 0 + write_kbpersec = 0 + write_iops = 0 end + + # Accumulate values if present + previous_nettx = @one_item && @one_item["MONITORING/NETTX"] ? @one_item["MONITORING/NETTX"].to_i : 0 + previous_netrx = @one_item && @one_item["MONITORING/NETRX"] ? @one_item["MONITORING/NETRX"].to_i : 0 + previous_diskrdiops = @one_item && @one_item["MONITORING/DISKRDIOPS"] ? @one_item["MONITORING/DISKRDIOPS"].to_i : 0 + previous_diskwriops = @one_item && @one_item["MONITORING/DISKWRIOPS"] ? @one_item["MONITORING/DISKWRIOPS"].to_i : 0 + previous_diskrdbytes = @one_item && @one_item["MONITORING/DISKRDBYTES"] ? @one_item["MONITORING/DISKRDBYTES"].to_i : 0 + previous_diskwrbytes = @one_item && @one_item["MONITORING/DISKWRBYTES"] ? @one_item["MONITORING/DISKWRBYTES"].to_i : 0 + + @monitor[:nettx] = previous_nettx + (nettx_kbpersec * 1024 * refresh_rate).to_i + @monitor[:netrx] = previous_netrx + (netrx_kbpersec * 1024 * refresh_rate).to_i + + @monitor[:diskrdiops] = previous_diskrdiops + read_iops + @monitor[:diskwriops] = previous_diskwriops + write_iops + @monitor[:diskrdbytes] = previous_diskrdbytes + (read_kbpersec * 1024 * refresh_rate).to_i + @monitor[:diskwrbytes] = previous_diskwrbytes + (write_kbpersec * 1024 * refresh_rate).to_i end end @@ -2640,23 +2647,30 @@ class VirtualMachine < Template write_iops += sample if sample > 0 } end - - # Accumulate values if present - previous_nettx = @one_item && @one_item["MONITORING/NETTX"] ? @one_item["MONITORING/NETTX"].to_i : 0 - previous_netrx = @one_item && @one_item["MONITORING/NETRX"] ? @one_item["MONITORING/NETRX"].to_i : 0 - previous_diskrdiops = @one_item && @one_item["MONITORING/DISKRDIOPS"] ? @one_item["MONITORING/DISKRDIOPS"].to_i : 0 - previous_diskwriops = @one_item && @one_item["MONITORING/DISKWRIOPS"] ? @one_item["MONITORING/DISKWRIOPS"].to_i : 0 - previous_diskrdbytes = @one_item && @one_item["MONITORING/DISKRDBYTES"] ? @one_item["MONITORING/DISKRDBYTES"].to_i : 0 - previous_diskwrbytes = @one_item && @one_item["MONITORING/DISKWRBYTES"] ? @one_item["MONITORING/DISKWRBYTES"].to_i : 0 - - @monitor[:nettx] = previous_nettx + (nettx_kbpersec * 1024 * refresh_rate).to_i - @monitor[:netrx] = previous_netrx + (netrx_kbpersec * 1024 * refresh_rate).to_i - - @monitor[:diskrdiops] = previous_diskrdiops + read_iops - @monitor[:diskwriops] = previous_diskwriops + write_iops - @monitor[:diskrdbytes] = previous_diskrdbytes + (read_kbpersec * 1024 * refresh_rate).to_i - @monitor[:diskwrbytes] = previous_diskwrbytes + (write_kbpersec * 1024 * refresh_rate).to_i + else + nettx_kbpersec = 0 + netrx_kbpersec = 0 + read_kbpersec = 0 + read_iops = 0 + write_kbpersec = 0 + write_iops = 0 end + + # Accumulate values if present + previous_nettx = @one_item && @one_item["MONITORING/NETTX"] ? @one_item["MONITORING/NETTX"].to_i : 0 + previous_netrx = @one_item && @one_item["MONITORING/NETRX"] ? @one_item["MONITORING/NETRX"].to_i : 0 + previous_diskrdiops = @one_item && @one_item["MONITORING/DISKRDIOPS"] ? @one_item["MONITORING/DISKRDIOPS"].to_i : 0 + previous_diskwriops = @one_item && @one_item["MONITORING/DISKWRIOPS"] ? @one_item["MONITORING/DISKWRIOPS"].to_i : 0 + previous_diskrdbytes = @one_item && @one_item["MONITORING/DISKRDBYTES"] ? @one_item["MONITORING/DISKRDBYTES"].to_i : 0 + previous_diskwrbytes = @one_item && @one_item["MONITORING/DISKWRBYTES"] ? @one_item["MONITORING/DISKWRBYTES"].to_i : 0 + + @monitor[:nettx] = previous_nettx + (nettx_kbpersec * 1024 * refresh_rate).to_i + @monitor[:netrx] = previous_netrx + (netrx_kbpersec * 1024 * refresh_rate).to_i + + @monitor[:diskrdiops] = previous_diskrdiops + read_iops + @monitor[:diskwriops] = previous_diskwriops + write_iops + @monitor[:diskrdbytes] = previous_diskrdbytes + (read_kbpersec * 1024 * refresh_rate).to_i + @monitor[:diskwrbytes] = previous_diskwrbytes + (write_kbpersec * 1024 * refresh_rate).to_i end