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
|