37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/rbvmomi/vim/PerformanceManager.rb', line 37
def retrieve_stats objects, metrics, opts = {}
opts = opts.dup
max_samples = opts[:max_samples] || 1
realtime = false
if not opts[:interval]
provider = provider_summary objects.first
opts[:interval] = provider.refreshRate
realtime = true
else
provider = provider_summary objects.first
if opts[:interval] == provider.refreshRate
realtime = true
end
end
instances = opts[:instance] || '*'
if !instances.is_a?(Array)
instances = [instances]
end
metric_ids = []
metrics.each do |x|
counter = perfcounter_hash[x]
if !counter
pp perfcounter_hash.keys
fail "Counter for #{x} couldn't be found"
end
instances.each do |instance|
metric_ids << RbVmomi::VIM::PerfMetricId(:counterId => counter.key,
:instance => instance)
end
end
query_specs = objects.map do |obj|
RbVmomi::VIM::PerfQuerySpec({
:maxSample => max_samples,
:entity => obj,
:metricId => metric_ids,
:intervalId => opts[:interval],
:startTime => (realtime == false ? opts[:start_time].to_datetime : nil),
})
end
stats = QueryPerf(:querySpec => query_specs)
if !opts[:multi_instance]
Hash[stats.map do |res|
[
res.entity,
{
:sampleInfo => res.sampleInfo,
:metrics => Hash[res.value.map do |metric|
metric_name = perfcounter_idhash[metric.id.counterId].name
[metric_name, metric.value]
end]
}
]
end]
else
Hash[stats.map do |res|
[
res.entity,
{
:sampleInfo => res.sampleInfo,
:metrics => Hash[res.value.map do |metric|
metric_name = perfcounter_idhash[metric.id.counterId].name
[[metric_name, metric.id.instance], metric.value]
end]
}
]
end]
end
end
|