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