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
|
# File 'lib/rbvmomi/vim/PerformanceManager.rb', line 38
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
realtime = true if opts[:interval] == provider.refreshRate
end
instances = opts[:instance] || '*'
instances = [instances] if !instances.is_a?(Array)
metric_ids = []
metrics.each do |x|
counter = perfcounter_hash[x]
if !counter
pp perfcounter_hash.keys
raise "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
|