diff -r 6723f3b07536 -r d5cb8bd33170 lib/arborist/monitor/snmp/process.rb --- a/lib/arborist/monitor/snmp/process.rb Wed Apr 04 13:29:56 2018 -0700 +++ b/lib/arborist/monitor/snmp/process.rb Sun Apr 08 18:11:49 2018 -0700 @@ -95,14 +95,24 @@ ### def get_windows( snmp ) oids = [ PROCESS[:windows][:path], PROCESS[:windows][:list], PROCESS[:windows][:args] ] - return snmp.walk( oids ).each_slice( 3 ). each_with_object( [] ) do |vals, acc| - path, process, args = vals[0][1], vals[1][1], vals[2][1] - next if path.empty? - process = "%s%s" % [ path, process ] - process << " %s" % [ args ] unless args.empty? - acc << process + paths = snmp.walk( oid: oids[0] ).each_with_object( [] ) do |(_, value), acc| + acc << value + end + procs = snmp.walk( oid: oids[1] ).each_with_object( [] ) do |(_, value), acc| + acc << value + end + args = snmp.walk( oid: oids[2] ).each_with_object( [] ) do |(_, value), acc| + acc << value end + + return paths.zip( procs, args ).collect do |(path, process, arg)| + next unless path && process + next if path.empty? + path << process unless process.empty? + path << " %s" % [ arg.to_s ] if arg && ! arg.empty? + path + end.compact end @@ -110,13 +120,19 @@ ### def get_procs( snmp ) oids = [ PROCESS[:netsnmp][:list], PROCESS[:netsnmp][:args] ] - return snmp.walk( oids ).each_slice( 2 ).each_with_object( [] ) do |vals, acc| - process, args = vals[0][1], vals[1][1] - next if process.empty? - process << " %s" % [ args ] unless args.empty? - acc << process + procs = snmp.walk( oid: oids.first ).each_with_object( [] ) do |(_, value), acc| + acc << value + end + args = snmp.walk( oid: oids.last ).each_with_object( [] ) do |(_, value), acc| + acc << value end + + return procs.zip( args ).collect do |(process, arg)| + next if process.empty? + process << " %s" % [ arg.to_s ] unless arg.empty? + process + end.compact end end # class Arborist::Monitor::SNMP::Process