Module: GenesisCollector::NetworkInterfaces

Included in:
Collector
Defined in:
lib/genesis_collector/network_interfaces.rb

Instance Method Summary collapse

Instance Method Details

#collect_network_interfacesObject



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/genesis_collector/network_interfaces.rb', line 6

def collect_network_interfaces
  interfaces = {}
  Socket.getifaddrs.each do |ifaddr|
    next if ifaddr.name.start_with?('lo', 'docker', 'veth', 'cali', 'tunl')
    next if ifaddr.addr.nil?
    interfaces[ifaddr.name] ||= {}
    interfaces[ifaddr.name][:addresses] ||= []
    next unless ifaddr.addr.ip?
    interfaces[ifaddr.name][:addresses] << {
      address:  ifaddr.addr.ip_address.split('%').first,
      netmask:  ifaddr.netmask.ip_address
    }
  end
  @payload[:network_interfaces] = interfaces.reduce([]) { |memo, (k, v)| memo << v.merge(name: k) }
  @payload[:network_interfaces].each do |i|
    i[:status] = read_interface_info(i[:name], 'operstate')
    i[:mac_address] = read_mac_address(i[:name])
    if i[:status] == 'up'
      i[:speed] = get_interface_speed(i[:name])
      i[:duplex] = read_interface_info(i[:name], 'duplex')
    end
    i[:neighbor] = get_network_neighbor(i[:name])
    i.merge!(get_lspci_data(i[:name])) if File.exist?("/sys/class/net/#{i[:name]}/device")
    i.merge!(get_interface_driver(i[:name]))
  end
end