1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-02-03 13:47:01 +03:00

Merge pull request #163 from n40lab/B#4943

B#4943 Fix NETTX and NETRX negative values, polling time and accumulate values
This commit is contained in:
Tino Vázquez 2016-12-02 19:02:13 +01:00 committed by GitHub
commit 0b4a467093

View File

@ -1987,6 +1987,7 @@ class VCenterVm
provider = pm.provider_summary [@vm].first
refresh_rate = provider.refreshRate
max_samples = 0
vmid = -1
extraconfig_vmid = @vm.config.extraConfig.select{|val|
@ -2006,57 +2007,56 @@ class VCenterVm
one_vm = OpenNebula::VirtualMachine.new_with_id(vmid, OpenNebula::Client.new)
one_vm.info
stats = []
previous_nettx = 0
previous_netrx = 0
if one_vm["MONITORING/NETTX"]
previous_nettx = one_vm["MONITORING/NETTX"].to_i
end
if one_vm["MONITORING/NETRX"]
previous_netrx = one_vm["MONITORING/NETRX"].to_i
end
if(one_vm["MONITORING/LAST_MON"] && one_vm["MONITORING/LAST_MON"].to_i != 0 )
#Real time data stores max 1 hour. 1 minute has 3 samples
interval = (Time.now.to_i - one_vm["MONITORING/LAST_MON"].to_i)
#If last poll was more than hour ago get 3 minutes,
#else calculate how many samples since last poll
samples = interval > 3600 ? 9 : (interval / refresh_rate) + 1
max_samples = samples > 0 ? samples : 1
stats = pm.retrieve_stats(
[@vm],
['net.transmitted','net.bytesRx','net.bytesTx','net.received',
'virtualDisk.numberReadAveraged','virtualDisk.numberWriteAveraged',
'virtualDisk.read','virtualDisk.write'],
{interval:refresh_rate, max_samples: max_samples}
)
max_samples = interval > 3600 ? 9 : (interval / refresh_rate) + 1
else
# First poll, get at least latest 3 minutes = 9 samples
stats = pm.retrieve_stats(
[@vm],
['net.transmitted','net.bytesRx','net.bytesTx','net.received',
'virtualDisk.numberReadAveraged','virtualDisk.numberWriteAveraged',
'virtualDisk.read','virtualDisk.write'],
{interval:refresh_rate, max_samples: 9}
)
max_samples = 9
end
stats = pm.retrieve_stats(
[@vm],
['net.transmitted','net.bytesRx','net.bytesTx','net.received',
'virtualDisk.numberReadAveraged','virtualDisk.numberWriteAveraged',
'virtualDisk.read','virtualDisk.write'],
{interval:refresh_rate, max_samples: max_samples}
)
if stats.empty? || stats.first[1][:metrics].empty?
@nettx = 0
@netrx = 0
@nettx = 0 + previous_nettx
@netrx = 0 + previous_netrx
@diskrdbytes = 0
@diskwrbytes = 0
@diskrdiops = 0
@diskwriops = 0
else
metrics = stats.first[1][:metrics]
nettx_kbpersec = 0
if metrics['net.transmitted']
metrics['net.transmitted'].each { |sample|
nettx_kbpersec += sample
}
end
netrx_kbpersec = 0
if metrics['net.bytesRx']
metrics['net.bytesRx'].each { |sample|
netrx_kbpersec += sample
}
end
(0..max_samples-1).each { |index|
tx = [0]
rx = [0]
tx << metrics['net.transmitted'][index] if metrics['net.transmitted']
tx << metrics['net.bytesTx'][index] if metrics['net.bytesTx']
rx << metrics['net.received'][index] if metrics['net.received']
rx << metrics['net.bytesRx'][index] if metrics['net.bytesRx']
nettx_kbpersec += tx.max
netrx_kbpersec += rx.max
}
read_kbpersec = 0
if metrics['virtualDisk.read']
@ -2086,8 +2086,8 @@ class VCenterVm
}
end
@nettx = (nettx_kbpersec * 1024 * refresh_rate).to_i
@netrx = (netrx_kbpersec * 1024 * refresh_rate).to_i
@nettx = (nettx_kbpersec * 1000 * refresh_rate).to_i + previous_nettx
@netrx = (netrx_kbpersec * 1000 * refresh_rate).to_i + previous_netrx
@diskrdiops = read_iops
@diskwriops = write_iops