aosp12/external/autotest/server/control_segments/get_network_stats

58 lines
2.0 KiB
Python

#!/usr/bin/python2
#
# 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)