#!/usr/bin/python
#
# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Collect network stats from the DUT.
# For now just collect the byte count from the default interface.

from autotest_lib.client.common_lib import utils

def get_network_stats(machine):
    try:
        dut = hosts.create_target_machine(machine)

        # The information is not critical, so ping the DUT first
        # and if it doesn't reply quickly, give up.
        if utils.ping(dut.hostname, tries=1, timeout=3) != 0:
            logging.info('ping failed: not collecting network stats')
            return

        # In a single ssh call, get list of network interfaces
        # and their byte counts.
        result = dut.run('route; echo SEPARATOR; cat /proc/net/dev')

        # Split output
        lines = result.stdout.splitlines()
        separator_index = lines.index('SEPARATOR')
        route_lines = lines[:separator_index]
        proc_lines = lines[separator_index+1:]

        for line in route_lines:
            fields = line.split()
            # look for default network interface
            if fields[0] == 'default':
                iface = fields[7]
                iface_prefix = iface + ':'
                break
        else:
            logging.info('get_network_stats: no default interface')
            return

        for line in proc_lines:
            fields = line.split()
            # Look for the interface in /proc/net/dev.
            if fields[0] == iface_prefix:
                logging.info('get_network_stats: %s RXbytes %s TXbytes %s',
                             network_stats_label, fields[1], fields[9])
                break
        else:
            logging.info('get_network_stats: iface %s not in /proc/net/dev',
                         iface)
    except Exception as e:
        logging.info('get_network_stats: ignoring exception: %s', e)


job.parallel_simple(get_network_stats, machines)
