为了测试丢包情况,重新弄了一个网卡数据信息脚本,比较随意
#!/usr/bin/env python
######################################
#nic_traffic.pl => nic_status.py
#HuiLi
######################################
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_pkt = 'RX packets:(\d+)?.*dropped:(\d+)?'
pattern_byte = 'RX bytes:(\d+)?'
rxlist = []
try:
nicpf = os.popen('ifconfig %s | grep RX' %nic)
except IOError, e:
sys.exit(0)
for eachLine in nicpf:
eachLine = eachLine.strip()
rxlist.append(eachLine)
info_pkt = re.search(pattern_pkt, rxlist[0])
info_byte = re.search(pattern_byte, rxlist[1])
if info_pkt is not None:
data['packets'] = int(info_pkt.group(1))
data['dropped'] = int(info_pkt.group(2))
if info_byte is not None:
data['bytes'] = int(info_byte.group(1))
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):
self.__printf(self.__gettime())
self.__printf(self.__purple(nic.center(self.width)))
self.__theme('bps: ', ' bits/s', b, 'right')
self.__theme('packets: ', ' pkts/s', p, 'right')
self.__theme('dropped: ', ' pkts/s', d, 'wrong')
def process(self, nic, number):
self.__count(nic, number)
def __count(self, nic, number):
global b0, b1, b2, b3, p0, p1, p2, p3, d0, d1, d2, d3
dict = self.__parser(nic)
if number == 0:
self.__show(nic, 8 * (dict['bytes'] - b0), dict['packets'] - p0, dict['dropped'] - d0)
b0, p0, d0 = dict['bytes'], dict['packets'], dict['dropped']
elif number == 1:
self.__show(nic, 8 * (dict['bytes'] - b1), dict['packets'] - p1, dict['dropped'] - d1)
b1, p1, d1 = dict['bytes'], dict['packets'], dict['dropped']
elif number == 2:
self.__show(nic, 8 * (dict['bytes'] - b2), dict['packets'] - p2, dict['dropped'] - d2)
b2, p2, d2 = dict['bytes'], dict['packets'], dict['dropped']
elif number == 3:
self.__show(nic, 8 * (dict['bytes'] - b3), dict['packets'] - p3, dict['dropped'] - d3)
b3, p3, d3 = dict['bytes'], dict['packets'], dict['dropped']
else:
print 'Sorry, nic argv more than maxnic !'
sys.exit(0)
b0 = b1 = b2 = b3 = 0
p0 = p1 = p2 = p3 = 0
d0 = d1 = d2 = 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)
运行打印网卡信息:
[lihui@localhost ~]# ./nic_status.py eth0 lo xge1 ######################################################################################################################## 2015-05-22 01:27:32 eth0 | bps: 2.7 K bits/s | packets: 5.0 pkts/s | dropped: 0.0 pkts/s 2015-05-22 01:27:32 lo | bps: 81.7 M bits/s | packets: 16.7 K pkts/s | dropped: 0.0 pkts/s 2015-05-22 01:27:32 xge1 | bps: 1.7 G bits/s | packets: 956.3 K pkts/s | dropped: 0.0 pkts/s ######################################################################################################################## 2015-05-22 01:27:33 eth0 | bps: 1.4 K bits/s | packets: 3.0 pkts/s | dropped: 0.0 pkts/s 2015-05-22 01:27:33 lo | bps: 82.2 M bits/s | packets: 16.8 K pkts/s | dropped: 0.0 pkts/s 2015-05-22 01:27:33 xge1 | bps: 1.7 G bits/s | packets: 966.6 K pkts/s | dropped: 0.0 pkts/s ######################################################################################################################## 2015-05-22 01:27:34 eth0 | bps: 1.4 K bits/s | packets: 3.0 pkts/s | dropped: 0.0 pkts/s 2015-05-22 01:27:34 lo | bps: 81.5 M bits/s | packets: 16.7 K pkts/s | dropped: 0.0 pkts/s 2015-05-22 01:27:34 xge1 | bps: 1.6 G bits/s | packets: 956.5 K pkts/s | dropped: 0.0 pkts/s ######################################################################################################################## 2015-05-22 01:27:35 eth0 | bps: 1.4 K bits/s | packets: 3.0 pkts/s | dropped: 0.0 pkts/s 2015-05-22 01:27:35 lo | bps: 81.8 M bits/s | packets: 16.5 K pkts/s | dropped: 0.0 pkts/s 2015-05-22 01:27:35 xge1 | bps: 1.7 G bits/s | packets: 961.9 K pkts/s | dropped: 0.0 pkts/s ########################################################################################################################
