Class: Q3Servers::MassiveHelper
- Inherits:
-
Object
- Object
- Q3Servers::MassiveHelper
- Defined in:
- lib/q3_servers/massive_helper.rb
Instance Attribute Summary collapse
-
#servers ⇒ Object
Returns the value of attribute servers.
-
#sockets ⇒ Object
Returns the value of attribute sockets.
Instance Method Summary collapse
- #calculate_index(socket) ⇒ Object
-
#initialize(servers, context) ⇒ MassiveHelper
constructor
A new instance of MassiveHelper.
- #read_info(sockets, max_retries, timeout, &block) ⇒ Object
- #read_info_servers(max_retries, timeout, &block) ⇒ Object
- #read_status_servers(servers, max_retries, timeout) ⇒ Object
Constructor Details
#initialize(servers, context) ⇒ MassiveHelper
Returns a new instance of MassiveHelper.
7 8 9 10 11 12 |
# File 'lib/q3_servers/massive_helper.rb', line 7 def initialize(servers, context) @context = context @servers = servers.each_with_object({}) do |server, hsh| hsh[server.unique_index] = server end end |
Instance Attribute Details
#servers ⇒ Object
Returns the value of attribute servers.
5 6 7 |
# File 'lib/q3_servers/massive_helper.rb', line 5 def servers @servers end |
#sockets ⇒ Object
Returns the value of attribute sockets.
5 6 7 |
# File 'lib/q3_servers/massive_helper.rb', line 5 def sockets @sockets end |
Instance Method Details
#calculate_index(socket) ⇒ Object
48 49 50 51 52 |
# File 'lib/q3_servers/massive_helper.rb', line 48 def calculate_index(socket) # to determine which socket answered addr = socket.peeraddr(false) ServerConnection.new(addr.last, addr[1]).unique_index end |
#read_info(sockets, max_retries, timeout, &block) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/q3_servers/massive_helper.rb', line 24 def read_info(sockets, max_retries, timeout, &block) servers_with_info = [] sockets_completed = 0 retries = 0 sockets.size.times do |_i| break if (sockets_completed >= sockets.size) || (retries >= max_retries) ready_sockets = IO.select(sockets, nil, nil, timeout) if ready_sockets && (ready_sockets = ready_sockets[0]) retries = 0 ready_sockets.each do |socket| sockets_completed += 1 server = servers[calculate_index(socket)] block.call(server) servers_with_info << server end else retries += 1 puts "Retry n #{retries}" end end servers_with_info end |
#read_info_servers(max_retries, timeout, &block) ⇒ Object
14 15 16 17 |
# File 'lib/q3_servers/massive_helper.rb', line 14 def read_info_servers(max_retries, timeout, &block) puts '======== Read Info servers ========' read_info(servers.map { |_unique_index, server| server.socket }, max_retries, timeout, &Proc.new) end |
#read_status_servers(servers, max_retries, timeout) ⇒ Object
19 20 21 22 |
# File 'lib/q3_servers/massive_helper.rb', line 19 def read_status_servers(servers, max_retries, timeout) puts '======== Read Status servers ========' read_info(servers.map(&:socket), max_retries, timeout, &Proc.new) end |