On Mon, 2003-11-03 at 03:10, nosp wrote:
Anyone recommend a command-line network bandwidth tool they use on
fedora? I'm talking about something to show MB/sec across the local
machine's network interface(s), and perhaps more (breakdown by protocol,
etc.). I can't find any pre-packaged ones in fedora (bad search
criteria?) but have seen ntop, ipband, and iptraf mentioned on the
web...
Have you tried netrate (python) by Alex Popa???
I've attached it to this message...
Thanks
--
fedora-list mailing list
fedora-list(a)redhat.com
http://www.redhat.com/mailman/listinfo/fedora-list
---BEGIN-OF-CODE---
#!/usr/bin/python
# netrate - a program to "graphically" show on a linux console
# the transfer rate on each interface
# also tested on rxvt
# it will display the transfer rate for the last second (coming soon),
# and the transfer rate for the last SECONDS seconds.
#
NUM_SAMPLES=20 # number of samples per second
NUM_SECONDS=5 # number of seconds
MIN_RATE=1024.0 # max_rate does not go below this value
# terminal settings
TERM_HOME='\x1b[H'
TERM_CLR_EOL='\x1b[K'
TERM_CLR_SCREEN='\x1b[J'
TERM_IN_COLOR='\x1b[41m' # red
TERM_OUT_COLOR='\x1b[42m' # green
TERM_NORMAL_COLOR='\x1b[m' # no attributes
TERM_WIDTH=80
from string import split
from time import time,sleep
from sys import stdin,stdout,argv,exit
from getopt import getopt
# help
def help():
print "Usage:\n\t%s -h\n"%argv[0]
print "\t%s [-w width] [-s seconds] [-n num_samples]\n"%argv[0]
exit()
# main
options,junk=getopt(argv[1:],"hw:s:n:")
del junk
for i in options:
if(i[0]=='-h'):
help()
if(i[0]=='-w'):
try:
TERM_WIDTH=int(i[1])
except:
help()
if(i[0]=='-s'):
try:
NUM_SECONDS=int(i[1])
except:
help()
if(i[0]=='-n'):
try:
NUM_SAMPLES=int(i[1])
except:
help()
del options
delay=1.0/NUM_SAMPLES
statfile=open('/proc/net/dev','r')
# first get the current status...
tmp=statfile.readlines()
statfile.close()
del statfile
tmp=tmp[2:]
num_interfaces=len(tmp)
interfaces=[0,]*num_interfaces
initial_in=[]
initial_out=[]
max_rate=MIN_RATE
for i in range(num_interfaces):
tokens=split(tmp[i][7:])
interfaces[i]=split(tmp[i][:6])[0]
initial_in.append(float(tokens[0]))
initial_out.append(float(tokens[8]))
total=NUM_SAMPLES*NUM_SECONDS
times=[time()-1.0]*total
in_values=[]
out_values=[]
for i in range(total):
in_values.append(initial_in[:]*num_interfaces)
out_values.append(initial_out[:]*num_interfaces)
del initial_in,initial_out
current=0
last=1
# print samples[0][1][0][1]
# print interfaces
# I keep a circular buffer, so samples[current] is the current sample,
and
# samples[last] is the earliest sample, which will be overwritten next
time
stdout.write(TERM_HOME+TERM_CLR_SCREEN)
while 1:
statfile=open('/proc/net/dev')
tmp=statfile.readlines()
tmp=tmp[2:]
statfile.close()
times[current]=time()
for i in range(num_interfaces):
tokens=split(tmp[i][7:])
in_values[current][i]=float(tokens[0])
out_values[current][i]=float(tokens[8])
sleep(delay)
stdout.write(TERM_HOME)
stdout.write('Max Rate: %10.2f\n'%max_rate)
for i in range(num_interfaces):
time_diff=times[current]-times[last]
stdout.write('%-10s: in:%10.2f bytes/sec out:%10.2f bytes/sec'\
%(interfaces[i],\
(in_values[current][i]-in_values[last][i])/time_diff,\
(out_values[current][i]-out_values[last][i])/time_diff))
stdout.write(TERM_CLR_EOL+'\n')
in_rate=(in_values[current][i]-in_values[last][i])/time_diff
out_rate=(out_values[current][i]-out_values[last][i])/time_diff
max_rate=max(in_rate,out_rate,max_rate)
stdout.write(TERM_IN_COLOR+(' '*int(TERM_WIDTH*in_rate/max_rate))\
+TERM_NORMAL_COLOR+TERM_CLR_EOL+'\n')
stdout.write(TERM_OUT_COLOR+(' '*int(TERM_WIDTH*out_rate/max_rate))\
+TERM_NORMAL_COLOR+TERM_CLR_EOL+'\n')
stdout.flush()
current=current+1
last=last+1
if(current==total):
current=0
max_rate=max(max_rate*0.90,MIN_RATE)
else:
if(last==total):
last=0
---END-OF-CODE