def value
result = nil
return result if @code == nil
starttime = Time.now.to_f
begin
Timeout.timeout(limit) do
if @code.is_a?(Proc)
result = @code.call()
else
result = Facter::Util::Resolution.exec(@code)
end
end
rescue Timeout::Error => detail
warn "Timed out seeking value for %s" % self.name
Thread.new { Process.waitall }
return nil
rescue => details
warn "Could not retrieve %s: %s" % [self.name, details]
return nil
end
finishtime = Time.now.to_f
ms = (finishtime - starttime) * 1000
Facter.show_time "#{self.name}: #{"%.2f" % ms}ms"
return nil if result == ""
return result
end