blob: f44418cd405eaf9f71ca60cfea9002b636634df0 [file] [log] [blame]
#
# Do parallel enumerate request via celluloid gem
#
# Tests Ruby 1.9 threading model and proper use of rb_thread_blocking_region by the bindings
#
# Written by https://github.com/thehappycoder
#
require 'openwsman'
require 'celluloid'
require 'open-uri'
connection_credentials = [
{
:host => '10.120.67.93',
:port => 5985,
:username => 'wsman',
:password => 'secret'
},
{
:host => '10.120.4.11',
:port => 5985,
:username => 'wsman',
:password => 'secret'
}
]
uris = [
# 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/root/dcim/DCIM_NICView'
'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ComputerSystem'
#'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/root/dcim/DCIM_SoftwareIdentity'
]
class Downloader
include Celluloid
def download(host, port, username, password, uri)
puts "Requesting #{host}/#{File.basename(uri)}"
@wsman = Openwsman::Client.new(host, port, "/wsman", "http", username, password)
#Openwsman::debug = 9
@wsman.transport.verify_peer=0
@options = Openwsman::ClientOptions.new
@options.flags = Openwsman::FLAG_ENUMERATION_OPTIMIZATION
@options.max_elements = 100
puts "Client #{host} prepared"
request(uri) do |response|
puts "#{host} responded"
end
end
def download_http(*params)
host = 'http://google.com'
puts "Requesting #{host}"
open(host).read
puts "#{host} responded"
end
private
def request(uri, &response_handler_block)
puts "Enumerate..."
response = @wsman.enumerate(@options, nil, uri)
puts "...done"
response_handler_block.call(response)
context = response.context
puts "Context #{context}"
while (context)
response = @wsman.pull( @options, nil, uri, context )
response_handler_block.call(response)
context = response.context
end
end
end
downloaders = Downloader.pool(size: connection_credentials.size * uris.size)
connection_credentials.each do |credential|
uris.each do |uri|
puts "Starting async"
downloaders.async.download(credential[:host], credential[:port], credential[:username], credential[:password], uri)
end
end
sleep