Пример #1
0
    def network(meta):
        """ network """

        # collect info for all hte alive interfaces
        for interface in alive_interfaces():
            addresses = netifaces.ifaddresses(interface)
            interface_info = {
                'name': interface
            }

            # collect ipv4 and ipv6 addresses
            for proto, key in {
                'ipv4': netifaces.AF_INET,
                'ipv6': netifaces.AF_INET6
            }.iteritems():
                # get the first address
                protocol_data = addresses.get(key, [{}])[0]
                if protocol_data:
                    addr = protocol_data.get('addr').split('%').pop(0)
                    netmask = protocol_data.get('netmask')

                    try:
                        prefixlen = netaddr.IPNetwork('%s/%s' % (addr, netmask)).prefixlen
                    except:
                        prefixlen = None

                    interface_info[proto] = {
                        'netmask': netmask,
                        'address': addr,
                        'prefixlen': prefixlen
                    }

            # collect mac address
            interface_info['mac'] = addresses.get(netifaces.AF_LINK, [{}])[0].get('addr')

            meta['network']['interfaces'].append(interface_info)

        # get default interface name
        netstat_out, _ = subp.call("netstat -nr | egrep -i '^0.0.0.0|default'", check=False)
        if len(netstat_out) and netstat_out[0]:
            first_matched_line = netstat_out[0]
            default_interface = first_matched_line.split(' ')[-1]
        elif len(meta['network']['interfaces']):
            default_interface = meta['network']['interfaces'][0]['name']
        else:
            default_interface = None

        meta['network']['default'] = default_interface
Пример #2
0
    def net_io_counters(self):
        """
        net io counters

        total counters do not include lo interface
        """
        totals = defaultdict(int)
        metrics = {
            'packets_sent': 'system.net.packets_out.count',
            'packets_recv': 'system.net.packets_in.count',
            'bytes_sent': 'system.net.bytes_sent',
            'bytes_recv': 'system.net.bytes_rcvd',
            'errin': 'system.net.packets_in.error',
            'errout': 'system.net.packets_out.error',
            'dropin': 'system.net.drops_in.count',
            'dropout': 'system.net.drops_out.count'
        }

        net_io_counters = psutil.net_io_counters(pernic=True)
        for interface in host.alive_interfaces():
            io = net_io_counters.get(interface)

            for method, metric in metrics.iteritems():
                new_stamp, new_value = time.time(), getattr(io, method)
                prev_stamp, prev_value = self.previous_values.get(interface, {}).get(metric, [None, None])

                if prev_stamp:
                    delta_value = new_value - prev_value
                    metric_full_name = '%s|%s' % (metric, interface)
                    self.statsd.incr(metric_full_name, delta_value)

                    # collect total values
                    if not interface.startswith('lo'):
                        totals[metric] += delta_value

                self.previous_values[interface][metric] = [new_stamp, new_value]

        # send total values
        for metric, value in totals.iteritems():
            self.statsd.incr(metric, value)