mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-13 12:58:17 +03:00
B #5195: Fix vCenter stats gather may fail if VM is deleted while metrics are gathered
This commit is contained in:
parent
d00e379822
commit
8d9bada5d9
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user