module Arborist::Monitor::ConnectionBatching
A mixin for adding batched connections for socket-based monitors.
Constants
- DEFAULT_BATCH_SIZE
The default number of connections to have open – this should be well under the RLIMIT_NOFILE of the current process.
- DEFAULT_TIMEOUT
The default connection timeout
Public Class Methods
Inclusion callback – add the batchsize attribute to including monitors.
# File lib/arborist/monitor/connection_batching.rb, line 224 def self::included( mod ) mod.attr_accessor :timeout mod.attr_accessor :batch_size super end
Public Instance Methods
Fetch connections from connections_enum
and build a Hash of node updates keyed by identifier based on the results.
# File lib/arborist/monitor/connection_batching.rb, line 282 def handle_connections( connections_enum ) runner = BatchRunner.new( connections_enum, self.batch_size, self.timeout ) runner.run do |conn_hash, duration| self.status_for_conn( conn_hash, duration ) end return runner.results end
Return an Enumerator that yields Hashes that describe the connections to be made. They must contain, at a minimum, the following keys:
conn
-
The
Socket
(or other IO object) that is used to communicate with the monitored host. This should be created using non-blocking connection. identifier
-
The node identifier associated with the
conn
.
You can add any other members to each Hash that you require to actually use the connection when it becomes available.
# File lib/arborist/monitor/connection_batching.rb, line 266 def make_connections_enum( nodes ) raise "%p does not provide a %s method!" % [ __method__ ] end
Run the monitor, batching connections for the specified nodes
so the monitor doesn't exhaust its file descriptors.
# File lib/arborist/monitor/connection_batching.rb, line 251 def run( nodes ) connections = self.make_connections_enum( nodes ) return self.handle_connections( connections ) end
Called when a socket becomes ready. It should generate a status update for the node that corresponds to the given node_hash
and return it as a Hash. The duration
is how long it took for the connection to be ready, in seconds.
# File lib/arborist/monitor/connection_batching.rb, line 275 def status_for_conn( conn_hash, duration ) raise "%p does not provide a %s method!" % [ __method__ ] end
Return a clone of the receiving monitor with its batch size set to new_size
.
# File lib/arborist/monitor/connection_batching.rb, line 234 def with_batch_size( new_size ) copy = self.clone copy.batch_size = new_size return copy end
Return a clone of receiving monitor with its timeout set to new_timeout
.
# File lib/arborist/monitor/connection_batching.rb, line 242 def with_timeout( new_timeout ) copy = self.clone copy.timeout = new_timeout return copy end