Sha256: 8082fe8150df7275c5e002692d0aa3abad89705bcc8751ade4014ff7cbc6c8f2

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

module Copian
  module Collector
    class CiscoPortsCollector < PortsCollector # :nodoc:
      def initialize(manager, vlans_collector)
        super(manager)
        @vlans_collector = vlans_collector
      end
      def collect
        each_vlan do |manager|
          mac_bridge_ports = gather_mac_bridge_ports(manager)
          bridge_port_iface = gather_bridge_port_ifaces(manager)

          # Now we stitch the two lists together
          mac_bridge_ports.each do |bridge_port, addresses|
            yield bridge_port_iface[bridge_port], addresses
          end
        end
      end
      private
        def each_vlan
          @vlans_collector.collect do |vlan_id, vlan_index|
            yield SNMP::Manager.new(:host => @manager.host,
              :version => @manager.version,
              :community => "#{@manager.community}@#{vlan_id}")
          end
        end
        def gather_mac_bridge_ports(manager)
          oid = SNMP::ObjectId.new('1.3.6.1.2.1.17.4.3.1.2')
          mac_bridge_ports = Hash.new

          manager.walk(oid) do |r|
            r.each do |varbind|
              mac_bridge_ports[varbind.value.to_i] ||= Array.new
              mac_bridge_ports[varbind.value.to_i] << 
                suboid_to_mac(varbind.name.index(oid))
            end
          end

          mac_bridge_ports
        end
        def gather_bridge_port_ifaces(manager)
          oid = SNMP::ObjectId.new('1.3.6.1.2.1.17.1.4.1.2')
          bridge_port_ifaces = Hash.new

          manager.walk(oid) do |r|
            r.each do |varbind|
              bridge_port_ifaces[varbind.name.index(oid).to_s.to_i] =
                varbind.value.to_i
            end
          end

          bridge_port_ifaces
        end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
copian-1.3.3 lib/copian/collector/cisco/ports.rb