[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Monitoring precise data in and out of eth1



On Fri, Jul 23, 1999 at 10:56:15AM +0100, Patrick Kirk wrote:
> Hi all,
> 
> My ISP is wireless which means a 24/7 service which charges for usage over
> 600 Megs of days in and out in a month.  The connection is via an antenna
> and thence an rj45 cable into a NIC.
> 
> The NIC is eth1.  Is there a term for measuring data throughput on a NIC and
> how would I set about doing it?
> 

/proc/net/dev will give you the raw data in bytes. 
FWIW, I wrote a small program that tells you how
much data your NICs have transferred since your last reboot
I've attached it. It needs the python-base package.
Run it with the -h option to get an argument summary.
-- 
Stephen Pitts
smpitts@midsouth.rr.com
webmaster - http://www.mschess.org
#!/usr/bin/env python
"""
NicInfo: display the number of bytes sent/received by your NICs
nicinfo -r PRECISION (-m | -g | -k) (INTERFACE)
	-m 	show output in megabytes
	-g	show output in gigabytes
	-k	show output in kilobytes
	-r <int> specify decimal places to round to (default: 0)

If INTERFACE is not specified, shows stats for all devices
"""

from string import split, strip
import getopt
from sys import argv, exit

class NicInfo:
	def __init__(self, data_string):
		phase1 = split(data_string, ":");
		self.name = strip(phase1[0])
		phase2 = split(phase1[1])
		self.recvbytes = float(phase2[0])
		self.sentbytes = float(phase2[8])
try:
	dev_file = open("/proc/net/dev", "r")
except IOError:
	print "Can't open /proc/net/dev"
	exit(0)

dev_file.readline()
dev_file.readline()

real_data = dev_file.read()
nics = {}
for nic in split(real_data, "\n"):
	if nic == "": break
	nic_info = NicInfo(nic)
	nics[nic_info.name] = nic_info

try:
	args, show_nics = getopt.getopt(argv[1:], "gmkhr:")
except getopt.error:
	print "Invalid argument", __doc__
	exit(1)

if not show_nics: show_nics = nics.keys()

divisor = 1
identifier = "bytes"
prec = 0

if len(args) > 0:
	for thearg in args:
		if thearg[0] == "-m":
			divisor = 1024 * 1024
			identifier = "megabytes"
		elif thearg[0] == "-k":
			divisor = 1024
			identifier = "kilobytes"
		elif thearg[0] ==  "-g":
			divisor = 1024 * 1024 * 1024
			identifier = "gigabytes"
		elif thearg[0] == "-r":
			prec = int(thearg[1])
		elif thearg[0] == "-h":
			print __doc__
			exit(0)

for nic in show_nics:
	try:
		nic_info = nics[nic]
	except KeyError:
		print "Can't find nic", nic
		continue
	nic_info.sentbytes = nic_info.sentbytes / divisor
	nic_info.recvbytes = nic_info.recvbytes / divisor
	print ("%s: sent %.*f %s; received %.*f %s" 
		% (	nic_info.name, prec, nic_info.sentbytes, identifier, 
			prec, nic_info.recvbytes, identifier) )

Reply to: