急着测试,宿便改了改,加了TX信息,全局变量太弱了,啥时候改成yield
#!/usr/bin/env python
######################################
#nic_traffic.pl => nic_status.py
#HuiLi
#2015-07-07
######################################
import sys
import time
import os
import re
import copy
#import threading
class Status(object):
def __init__(self):
self.color = {
'purple': '\033[1;35;2m',
'red': '\033[1;31;2m',
'green': '\033[1;32;2m',
'default': '\033[0;0m'
}
self.freshtime = 1
self.maxnic = 4
self.width = 10
self.G = 1024 * 1024 * 1024
self.M = 1024 * 1024
self.K = 1024
self.commlen = 120
def __printf(self, string):
sys.stdout.write(string)
sys.stdout.flush()
def __purple(self, string):
return '%s%s%s' %(self.color['purple'], string, self.color['default'])
def __red(self, string):
return '%s%s%s' %(self.color['red'], string, self.color['default'])
def __green(self, string):
return '%s%s%s' %(self.color['green'], string, self.color['default'])
def __theme(self, front, end, num, bool):
num = self.__int2str(num)
if bool == 'wrong':
self.__printf('| ' + front + self.__red(num) + end + '\n')
elif bool == 'right':
self.__printf('| ' + front + self.__green(num) + end + ' ')
else:
print 'color flag error'
sys.exit(0)
def __gettime(self):
nowtime = time.strftime('%Y-%m-%d %H:%M:%S')
return nowtime
def __parser(self, nic):
data = {}
pattern_nic = '%s:' %nic
try:
nicpf = open('/proc/net/dev', 'r')
except IOError, e:
sys.exit(0)
for eachLine in nicpf:
eachLine = eachLine.strip()
info_nic = re.search(pattern_nic, eachLine)
if info_nic is not None:
nic_status = eachLine.split()
data['rx_bytes'] = int(nic_status[1]) * 8
data['rx_packets'] = int(nic_status[2])
data['rx_dropped'] = int(nic_status[4])
data['tx_bytes'] = int(nic_status[9]) * 8
data['tx_packets'] = int(nic_status[10])
data['tx_dropped'] = int(nic_status[12])
return data
def __int2str(self, num):
if num > self.G:
num = '%.1f G' %(num * 1.0 / self.G)
elif num > self.M:
num = '%.1f M' %(num * 1.0 / self.M)
elif num > self.K:
num = '%.1f K' %(num * 1.0 / self.K)
else:
num = '%.1f ' %(num * 1.0)
return num
def __show(self, nic, b, p, d, flag):
self.__printf(self.__gettime())
self.__printf(self.__purple(nic.center(self.width)))
self.__theme(flag + ' bps: ', ' bits/s', b, 'right')
self.__theme(flag + ' packets: ', ' pkts/s', p, 'right')
self.__theme(flag + ' dropped: ', ' pkts/s', d, 'wrong')
def process(self, nic, number):
self.__count(nic, number)
def __count(self, nic, number):
global rx_b0, rx_b1, rx_b2, rx_b3, rx_p0, rx_p1, rx_p2, rx_p3, rx_d0, rx_d1, rx_d2, rx_d3
global tx_b0, tx_b1, tx_b2, tx_b3, tx_p0, tx_p1, tx_p2, tx_p3, tx_d0, tx_d1, tx_d2, tx_d3
dict = self.__parser(nic)
if number == 0:
self.__show(nic, dict['rx_bytes'] - rx_b0, dict['rx_packets'] - rx_p0, dict['rx_dropped'] - rx_d0, 'rx')
rx_b0, rx_p0, rx_d0 = dict['rx_bytes'], dict['rx_packets'], dict['rx_dropped']
self.__show(nic, dict['tx_bytes'] - tx_b0, dict['tx_packets'] - tx_p0, dict['tx_dropped'] - tx_d0, 'tx')
tx_b0, tx_p0, tx_d0 = dict['tx_bytes'], dict['tx_packets'], dict['tx_dropped']
elif number == 1:
self.__show(nic, dict['rx_bytes'] - rx_b1, dict['rx_packets'] - rx_p1, dict['rx_dropped'] - rx_d1, 'rx')
rx_b1, rx_p1, rx_d1 = dict['rx_bytes'], dict['rx_packets'], dict['rx_dropped']
self.__show(nic, dict['tx_bytes'] - tx_b1, dict['tx_packets'] - tx_p1, dict['tx_dropped'] - tx_d1, 'tx')
tx_b1, tx_p1, tx_d1 = dict['tx_bytes'], dict['tx_packets'], dict['tx_dropped']
elif number == 2:
self.__show(nic, dict['rx_bytes'] - rx_b2, dict['rx_packets'] - rx_p2, dict['rx_dropped'] - rx_d2, 'rx')
rx_b2, rx_p2, rx_d2 = dict['rx_bytes'], dict['rx_packets'], dict['rx_dropped']
self.__show(nic, dict['tx_bytes'] - tx_b2, dict['tx_packets'] - tx_p2, dict['tx_dropped'] - tx_d2, 'tx')
tx_b2, tx_p2, tx_d2 = dict['tx_bytes'], dict['tx_packets'], dict['tx_dropped']
elif number == 3:
self.__show(nic, dict['rx_bytes'] - rx_b3, dict['rx_packets'] - rx_p3, dict['rx_dropped'] - rx_d3, 'rx')
rx_b3, rx_p3, rx_d3 = dict['rx_bytes'], dict['rx_packets'], dict['rx_dropped']
self.__show(nic, dict['tx_bytes'] - tx_b3, dict['tx_packets'] - tx_p3, dict['tx_dropped'] - tx_d3, 'tx')
tx_b3, tx_p3, tx_d3 = dict['tx_bytes'], dict['tx_packets'], dict['tx_dropped']
else:
print 'Sorry, nic argv more than maxnic !'
sys.exit(0)
rx_b0 = rx_b1 = rx_b2 = rx_b3 = 0
rx_p0 = rx_p1 = rx_p2 = rx_p3 = 0
rx_d0 = rx_d1 = rx_d2 = rx_d3 = 0
tx_b0 = tx_b1 = tx_b2 = tx_b3 = 0
tx_p0 = tx_p1 = tx_p2 = tx_p3 = 0
tx_d0 = tx_d1 = tx_d2 = tx_d3 = 0
if __name__ == '__main__':
status = Status()
while 1:
number = 0
print '#' * status.commlen
for nic in sys.argv[1:]:
#t = threading.Thread(target = status.process(nic, number))
#t.start()
status.process(nic, number)
number = (number + 1) % status.maxnic
time.sleep(status.freshtime)
