class SNMP4EM::SnmpGetBulkRequest

The result of calling {SNMPv2Requests#getbulk}.

Attributes

snmp_id[RW]

Public Instance Methods

callback(&block) click to toggle source

Used to register a callback that is triggered when the query result is ready. The resulting object is passed as a parameter to the block.

Calls superclass method
   # File lib/snmp4em/requests/snmp_getbulk_request.rb
 9 def callback &block
10   super
11 end
errback(&block) click to toggle source

Used to register a callback that is triggered when query fails to complete successfully.

Calls superclass method
   # File lib/snmp4em/requests/snmp_getbulk_request.rb
14 def errback &block
15   super
16 end
handle_response(response) click to toggle source
Calls superclass method
   # File lib/snmp4em/requests/snmp_getbulk_request.rb
27 def handle_response(response)  # @private
28   super
29   
30   pending_repeating_oids = pending_oids.select{|oid| oid[:method] == :repeating}
31   pending_non_repeating_oids = pending_oids.select{|oid| oid[:method] == :non_repeating}
32 
33   if response.error_status == :noError
34     # No errors, populate the @responses object so it can be returned
35 
36     vb_list = response.vb_list
37     vb_index = 0
38 
39     pending_non_repeating_oids.each do |oid|
40       response_vb = vb_list.shift
41       oid[:responses][response_vb.name.to_s] = format_value(response_vb)
42       oid[:state] = :complete
43     end
44 
45     while response_vb = vb_list.shift
46       oid = pending_repeating_oids[vb_index % pending_repeating_oids.count]
47       oid[:responses][response_vb.name.to_s] = format_value(response_vb) unless response_vb.value == SNMP::EndOfMibView
48       oid[:state] = :complete
49       vb_index += 1
50     end
51     
52   else
53     error_oid = pending_oids[response.error_index - 1]
54     error_oid[:state] = :error
55     error_oid[:error] = SNMP::ResponseError.new(response.error_status)
56   end
57   
58   if pending_oids.empty?
59     result = {}
60 
61     @oids.each do |oid|
62       requested_oid = oid[:requested_string]
63       result[requested_oid] = oid[:error] || oid[:responses]
64     end
65 
66     succeed result
67     return
68   end
69 
70   send_msg
71 end
on_init(args) click to toggle source
   # File lib/snmp4em/requests/snmp_getbulk_request.rb
18 def on_init args  # @private
19   @oids.each_index do |i|
20     @oids[i][:responses] = {}
21     @oids[i][:method] = (i < (args[:non_repeaters] || 0) ? :non_repeating : :repeating)
22   end
23 
24   @max_results ||= 10
25 end

Private Instance Methods

send_msg() click to toggle source
Calls superclass method
   # File lib/snmp4em/requests/snmp_getbulk_request.rb
75 def send_msg
76   Manager.track_request(self)
77 
78   vb_list = SNMP::VarBindList.new(pending_oids.collect{|oid| oid[:requested_oid]})
79 
80   max_repetitions = @max_results
81   non_repeaters = pending_oids.select{|oid| oid[:method] == :non_repeating}.count
82 
83   # Gracefully handle a new constructor introduced in SNMP 1.3.1
84   if Gem::Version.new(SNMP::VERSION) >= Gem::Version.new("1.3.1")
85     request = SNMP::GetBulkRequest.new(@snmp_id, vb_list, non_repeaters, max_repetitions)
86   else
87     request = SNMP::GetBulkRequest.new(@snmp_id, vb_list)
88     
89     request.max_repetitions = max_repetitions
90     request.non_repeaters = non_repeaters
91   end
92 
93   message = SNMP::Message.new(@sender.version, @sender.community_ro, request)
94 
95   super(message)
96 end