scripts/if-traffic
bernat 244275b5a6 Import initial
Ajout de l'encodage

darcs-hash:20040411094726-d1718-2078aded0314027d2f80833d4af6f97a34b82674.gz
2004-04-11 11:47:26 +02:00

108 lines
2.9 KiB
Python
Executable file

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# Hey, c'est du -*- python-*-, ça !
#
# Ecrit mi-février par Chep pour les besoins locaux...
#
import string,shelve,pickle,sys
def tuple_to_dico(tup) :
"construit un dictionnaire à partir du tuple d'une interface"
fields={ 0:'in', 1:'inp', 2:'ierr', 3:'idrop', 4:'ififo', 5:'iframe', 6:'icompressed',
7:'imulticast', 8:'out', 9:'outp', 10:'oerr', 11:'odrop', 12:'ofifo', 13:'cols',
14:'carrier', 15:'ocompressed' }
dic = {}
for n in fields.keys() :
dic[ fields[n] ] = data[ n ]
if dic['outp']: dic['colr'] = long((100 * dic['cols']) / dic['outp'])
else: dic['colr'] = 0L
dic['npi'] = dic['ierr']+dic['idrop'] + dic['ififo'] + dic['iframe'] +dic['icompressed']
dic['npo'] = dic['oerr']+dic['odrop']+dic['ofifo']+dic['carrier']+dic['ocompressed']
dic['mnpi'] = 1000 * dic['npi']
dic['mnpo'] = 1000 * dic['npo']
dic['unpi'] = 1000 * dic['mnpi']
dic['unpo'] = 1000 * dic['mnpo']
if dic['inp']: dic['npir'] = long((100 * dic['npi']) / dic['inp'])
else:
if dic['ierr']: dic['npir'] = 99L # erreurs et pas de paquets entrants !
else: dic['npir'] = 0L
if dic['outp']: dic['npor'] = long((100 * dic['npo']) / dic['outp'])
else:
if dic['oerr']: dic['npor'] = 99L
else: dic['npor'] = 0L
# totaux dans les deux sens (tnp = total nasty pkts,tgp = total good pkts)
dic['tnp'] = dic['npi'] + dic['npo']
dic['tgp'] = dic['inp'] + dic['outp']
return dic
if len(sys.argv) < 2:
sys.stderr.write("""usage: %s ethN [var1] [var2] [long ifname]\n
var1 and var2 can be :
in: incoming bytes
out: outgoing bytes
cols: collisions
inp: incoming packets
outp: outgoing packets
colr: collision ratio, in percent (cols / outp)
npi : incoming 'nasty' packets
npo : outgoing 'nasty' packets
mnpi : 1000 * npi
mnpo : 1000 * npo
npir: incoming 'nasty' packet ratio
npor: outgoing 'nasty' packet ratio
default var1 and var2 are in,out.
Result is to be fed to MRTG.
""" % (sys.argv[0]))
sys.exit(0)
iface = sys.argv[1]
ifname = iface
if len(sys.argv) > 2:
var1 = sys.argv[2]
if len(sys.argv) > 3:
var2 = sys.argv[3]
if len(sys.argv) > 4:
ifname = sys.argv[4]
else: var2 = 'out'
else:
var1 = 'in'
var2 = 'out'
fd = open('/proc/net/dev','r')
sl = fd.readlines()
fd.close()
Ifaces = {}
for s in sl:
ln = string.split(s,':')
if len(ln) < 2: continue
data = string.split(ln[1])
try :
n = long(data[1])
except : continue
for k in range(len(data)):
data[k] = long(data[k])
Ifaces[string.strip(ln[0])] = tuple_to_dico(data)
i = Ifaces[iface]
# python1.5 fait str(1234L) =="1234L", il faut enlever le L..
ver=sys.version[0]
if ver[0]=='1' :
s1 = str( i[var1])[:-1]
s2 = str( i[var2])[:-1]
else :
s1 = str( i[var1])
s2 = str( i[var2])
print "%s\n%s\n\n%s" % (s1, s2 ,ifname)