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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/rvc/field.rb', line 78
def field name, props_values = {}, perf_values = {}
name = name.to_s
field = self.class.fields[name]
if field == nil
return nil
elsif self.class < VIM::ManagedObject
properties = field.properties
if properties.all?{|x| props_values.has_key?(x)}
props = properties.map{|x| props_values[x]}
else
*props = collect *field.properties
end
perfmetrics = field.perfmetrics
if perfmetrics.length > 0
if perfmetrics.all?{|x| perf_values.has_key?(x)}
props += perfmetrics.map do |x|
perf_values[x]
end
else
perfmgr = self._connection.serviceContent.perfManager
perfopts = field.perfmetric_settings.dup
perfopts[:max_samples] ||= 5
stats = perfmgr.retrieve_stats [self], field.perfmetrics, perfopts
props += field.perfmetrics.map do |x|
if stats[self]
stats[self][:metrics][x]
else
nil
end
end
end
end
else
props = []
field.properties.each do |propstr|
obj = self
propstr.split('.').each { |prop| obj = obj.send(prop) }
props << obj
end
end
props = [self] if props.empty?
field.block.call *props
end
|