mirror of https://github.com/cppla/ServerStatus
				
				
				
			格式化代码,数据包增加丢包率packet
							parent
							
								
									46def9acb2
								
							
						
					
					
						commit
						1ecca6e444
					
				|  | @ -2,7 +2,7 @@ | |||
| # Update by : https://github.com/cppla/ServerStatus | ||||
| # 支持Python版本:2.7 to 3.5 | ||||
| # 支持操作系统: Linux, OSX, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures | ||||
| # 时间: 20180312 | ||||
| # 时间: 20180828 | ||||
| 
 | ||||
| 
 | ||||
| SERVER = "127.0.0.1" | ||||
|  | @ -22,93 +22,93 @@ import collections | |||
| import threading | ||||
| 
 | ||||
| def get_uptime(): | ||||
| 	f = open('/proc/uptime', 'r') | ||||
| 	uptime = f.readline() | ||||
| 	f.close() | ||||
| 	uptime = uptime.split('.', 2) | ||||
| 	time = int(uptime[0]) | ||||
| 	return int(time) | ||||
|     f = open('/proc/uptime', 'r') | ||||
|     uptime = f.readline() | ||||
|     f.close() | ||||
|     uptime = uptime.split('.', 2) | ||||
|     time = int(uptime[0]) | ||||
|     return int(time) | ||||
| 
 | ||||
| def get_memory(): | ||||
| 	re_parser = re.compile(r'^(?P<key>\S*):\s*(?P<value>\d*)\s*kB') | ||||
| 	result = dict() | ||||
| 	for line in open('/proc/meminfo'): | ||||
| 		match = re_parser.match(line) | ||||
| 		if not match: | ||||
| 			continue; | ||||
| 		key, value = match.groups(['key', 'value']) | ||||
| 		result[key] = int(value) | ||||
|     re_parser = re.compile(r'^(?P<key>\S*):\s*(?P<value>\d*)\s*kB') | ||||
|     result = dict() | ||||
|     for line in open('/proc/meminfo'): | ||||
|         match = re_parser.match(line) | ||||
|         if not match: | ||||
|             continue; | ||||
|         key, value = match.groups(['key', 'value']) | ||||
|         result[key] = int(value) | ||||
| 
 | ||||
| 	MemTotal = float(result['MemTotal']) | ||||
| 	MemFree = float(result['MemFree']) | ||||
| 	Cached = float(result['Cached']) | ||||
| 	MemUsed = MemTotal - (Cached + MemFree) | ||||
| 	SwapTotal = float(result['SwapTotal']) | ||||
| 	SwapFree = float(result['SwapFree']) | ||||
| 	return int(MemTotal), int(MemUsed), int(SwapTotal), int(SwapFree) | ||||
|     MemTotal = float(result['MemTotal']) | ||||
|     MemFree = float(result['MemFree']) | ||||
|     Cached = float(result['Cached']) | ||||
|     MemUsed = MemTotal - (Cached + MemFree) | ||||
|     SwapTotal = float(result['SwapTotal']) | ||||
|     SwapFree = float(result['SwapFree']) | ||||
|     return int(MemTotal), int(MemUsed), int(SwapTotal), int(SwapFree) | ||||
| 
 | ||||
| def get_hdd(): | ||||
| 	p = subprocess.check_output(['df', '-Tlm', '--total', '-t', 'ext4', '-t', 'ext3', '-t', 'ext2', '-t', 'reiserfs', '-t', 'jfs', '-t', 'ntfs', '-t', 'fat32', '-t', 'btrfs', '-t', 'fuseblk', '-t', 'zfs', '-t', 'simfs', '-t', 'xfs']).decode("Utf-8") | ||||
| 	total = p.splitlines()[-1] | ||||
| 	used = total.split()[3] | ||||
| 	size = total.split()[2] | ||||
| 	return int(size), int(used) | ||||
|     p = subprocess.check_output(['df', '-Tlm', '--total', '-t', 'ext4', '-t', 'ext3', '-t', 'ext2', '-t', 'reiserfs', '-t', 'jfs', '-t', 'ntfs', '-t', 'fat32', '-t', 'btrfs', '-t', 'fuseblk', '-t', 'zfs', '-t', 'simfs', '-t', 'xfs']).decode("Utf-8") | ||||
|     total = p.splitlines()[-1] | ||||
|     used = total.split()[3] | ||||
|     size = total.split()[2] | ||||
|     return int(size), int(used) | ||||
| 
 | ||||
| def get_time(): | ||||
| 	stat_file = file("/proc/stat", "r") | ||||
| 	time_list = stat_file.readline().split(' ')[2:6] | ||||
| 	stat_file.close() | ||||
| 	for i in range(len(time_list))  : | ||||
| 		time_list[i] = int(time_list[i]) | ||||
| 	return time_list | ||||
|     stat_file = file("/proc/stat", "r") | ||||
|     time_list = stat_file.readline().split(' ')[2:6] | ||||
|     stat_file.close() | ||||
|     for i in range(len(time_list))  : | ||||
|         time_list[i] = int(time_list[i]) | ||||
|     return time_list | ||||
| def delta_time(): | ||||
| 	x = get_time() | ||||
| 	time.sleep(INTERVAL) | ||||
| 	y = get_time() | ||||
| 	for i in range(len(x)): | ||||
| 		y[i]-=x[i] | ||||
| 	return y | ||||
|     x = get_time() | ||||
|     time.sleep(INTERVAL) | ||||
|     y = get_time() | ||||
|     for i in range(len(x)): | ||||
|         y[i]-=x[i] | ||||
|     return y | ||||
| def get_cpu(): | ||||
| 	t = delta_time() | ||||
| 	st = sum(t) | ||||
| 	if st == 0: | ||||
| 		st = 1 | ||||
| 	result = 100-(t[len(t)-1]*100.00/st) | ||||
| 	return round(result) | ||||
|     t = delta_time() | ||||
|     st = sum(t) | ||||
|     if st == 0: | ||||
|         st = 1 | ||||
|     result = 100-(t[len(t)-1]*100.00/st) | ||||
|     return round(result) | ||||
| 
 | ||||
| class Traffic: | ||||
| 	def __init__(self): | ||||
| 		self.rx = collections.deque(maxlen=10) | ||||
| 		self.tx = collections.deque(maxlen=10) | ||||
| 	def get(self): | ||||
| 		f = open('/proc/net/dev', 'r') | ||||
| 		net_dev = f.readlines() | ||||
| 		f.close() | ||||
| 		avgrx = 0; avgtx = 0 | ||||
|     def __init__(self): | ||||
|         self.rx = collections.deque(maxlen=10) | ||||
|         self.tx = collections.deque(maxlen=10) | ||||
|     def get(self): | ||||
|         f = open('/proc/net/dev', 'r') | ||||
|         net_dev = f.readlines() | ||||
|         f.close() | ||||
|         avgrx = 0; avgtx = 0 | ||||
| 
 | ||||
| 		for dev in net_dev[2:]: | ||||
| 			dev = dev.split(':') | ||||
| 			if dev[0].strip() == "lo" or dev[0].find("tun") > -1 \ | ||||
| 					or dev[0].find("docker") > -1 or dev[0].find("veth") > -1 \ | ||||
| 					or dev[0].find("br-") > -1: | ||||
| 				continue | ||||
| 			dev = dev[1].split() | ||||
| 			avgrx += int(dev[0]) | ||||
| 			avgtx += int(dev[8]) | ||||
|         for dev in net_dev[2:]: | ||||
|             dev = dev.split(':') | ||||
|             if dev[0].strip() == "lo" or dev[0].find("tun") > -1 \ | ||||
|                     or dev[0].find("docker") > -1 or dev[0].find("veth") > -1 \ | ||||
|                     or dev[0].find("br-") > -1: | ||||
|                 continue | ||||
|             dev = dev[1].split() | ||||
|             avgrx += int(dev[0]) | ||||
|             avgtx += int(dev[8]) | ||||
| 
 | ||||
| 		self.rx.append(avgrx) | ||||
| 		self.tx.append(avgtx) | ||||
| 		avgrx = 0; avgtx = 0 | ||||
|         self.rx.append(avgrx) | ||||
|         self.tx.append(avgtx) | ||||
|         avgrx = 0; avgtx = 0 | ||||
| 
 | ||||
| 		l = len(self.rx) | ||||
| 		for x in range(l - 1): | ||||
| 			avgrx += self.rx[x+1] - self.rx[x] | ||||
| 			avgtx += self.tx[x+1] - self.tx[x] | ||||
|         l = len(self.rx) | ||||
|         for x in range(l - 1): | ||||
|             avgrx += self.rx[x+1] - self.rx[x] | ||||
|             avgtx += self.tx[x+1] - self.tx[x] | ||||
| 
 | ||||
| 		avgrx = int(avgrx / l / INTERVAL) | ||||
| 		avgtx = int(avgtx / l / INTERVAL) | ||||
|         avgrx = int(avgrx / l / INTERVAL) | ||||
|         avgtx = int(avgtx / l / INTERVAL) | ||||
| 
 | ||||
| 		return avgrx, avgtx | ||||
|         return avgrx, avgtx | ||||
| 
 | ||||
| def liuliang(): | ||||
|     NET_IN = 0 | ||||
|  | @ -118,9 +118,9 @@ def liuliang(): | |||
|             netinfo = re.findall('([^\s]+):[\s]{0,}(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)', line) | ||||
|             if netinfo: | ||||
|                 if netinfo[0][0] == 'lo' or 'tun' in netinfo[0][0] \ | ||||
| 						or 'docker' in netinfo[0][0] or 'veth' in netinfo[0][0] \ | ||||
| 						or 'br-' in netinfo[0][0] \ | ||||
| 						or netinfo[0][1]=='0' or netinfo[0][9]=='0': | ||||
|                         or 'docker' in netinfo[0][0] or 'veth' in netinfo[0][0] \ | ||||
|                         or 'br-' in netinfo[0][0] \ | ||||
|                         or netinfo[0][1]=='0' or netinfo[0][9]=='0': | ||||
|                     continue | ||||
|                 else: | ||||
|                     NET_IN += int(netinfo[0][1]) | ||||
|  | @ -128,35 +128,39 @@ def liuliang(): | |||
|     return NET_IN, NET_OUT | ||||
| 
 | ||||
| def ip_status(): | ||||
| 	object_check = ['www.10010.com', 'www.189.cn', 'www.10086.cn'] | ||||
| 	ip_check = 0 | ||||
| 	for i in object_check: | ||||
| 		s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||
| 		s.settimeout(1) | ||||
| 		try: | ||||
| 			s.connect((i, 80)) | ||||
| 		except: | ||||
| 			ip_check += 1 | ||||
| 		s.close() | ||||
| 		del s | ||||
| 	if ip_check >= 2: | ||||
| 		return False | ||||
| 	else: | ||||
| 		return True | ||||
|     object_check = ['www.10010.com', 'www.189.cn', 'www.10086.cn'] | ||||
|     ip_check = 0 | ||||
|     for i in object_check: | ||||
|         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||
|         s.settimeout(1) | ||||
|         try: | ||||
|             s.connect((i, 80)) | ||||
|         except: | ||||
|             ip_check += 1 | ||||
|         s.close() | ||||
|         del s | ||||
|     if ip_check >= 2: | ||||
|         return False | ||||
|     else: | ||||
|         return True | ||||
| 
 | ||||
| def get_network(ip_version): | ||||
| 	if(ip_version == 4): | ||||
| 		HOST = "ipv4.google.com" | ||||
| 	elif(ip_version == 6): | ||||
| 		HOST = "ipv6.google.com" | ||||
| 	try: | ||||
| 		s = socket.create_connection((HOST, 80), 2) | ||||
| 		return True | ||||
| 	except: | ||||
| 		pass | ||||
| 	return False | ||||
|     if(ip_version == 4): | ||||
|         HOST = "ipv4.google.com" | ||||
|     elif(ip_version == 6): | ||||
|         HOST = "ipv6.google.com" | ||||
|     try: | ||||
|         s = socket.create_connection((HOST, 80), 2) | ||||
|         return True | ||||
|     except: | ||||
|         pass | ||||
|     return False | ||||
| 
 | ||||
| lostRate = {} | ||||
| lostRate = { | ||||
|     '10010': 0.0, | ||||
|     '189': 0.0, | ||||
|     '10086': 0.0 | ||||
| } | ||||
| def _ping_thread(host, mark): | ||||
|     output = os.popen('ping -O %s &' % host) | ||||
|     lostCount = 0 | ||||
|  | @ -175,33 +179,33 @@ def _ping_thread(host, mark): | |||
|             startTime = endTime | ||||
| 
 | ||||
| def get_packetLostRate(): | ||||
| 	t1 = threading.Thread( | ||||
| 		target=_ping_thread, | ||||
| 		kwargs={ | ||||
| 			'host': 'www.10010.com', | ||||
| 			'mark': '10010' | ||||
| 		} | ||||
| 	) | ||||
| 	t2 = threading.Thread( | ||||
| 		target=_ping_thread, | ||||
| 		kwargs={ | ||||
| 			'host': 'www.189.cn', | ||||
| 			'mark': '189' | ||||
| 		} | ||||
| 	) | ||||
| 	t3 = threading.Thread( | ||||
| 		target=_ping_thread, | ||||
| 		kwargs={ | ||||
| 			'host': 'bj.10086.cn', | ||||
| 			'mark': '10086' | ||||
| 		} | ||||
| 	) | ||||
| 	t1.setDaemon(True) | ||||
| 	t2.setDaemon(True) | ||||
| 	t3.setDaemon(True) | ||||
| 	t1.start() | ||||
| 	t2.start() | ||||
| 	t3.start() | ||||
|     t1 = threading.Thread( | ||||
|         target=_ping_thread, | ||||
|         kwargs={ | ||||
|             'host': 'www.10010.com', | ||||
|             'mark': '10010' | ||||
|         } | ||||
|     ) | ||||
|     t2 = threading.Thread( | ||||
|         target=_ping_thread, | ||||
|         kwargs={ | ||||
|             'host': 'www.189.cn', | ||||
|             'mark': '189' | ||||
|         } | ||||
|     ) | ||||
|     t3 = threading.Thread( | ||||
|         target=_ping_thread, | ||||
|         kwargs={ | ||||
|             'host': 'bj.10086.cn', | ||||
|             'mark': '10086' | ||||
|         } | ||||
|     ) | ||||
|     t1.setDaemon(True) | ||||
|     t2.setDaemon(True) | ||||
|     t3.setDaemon(True) | ||||
|     t1.start() | ||||
|     t2.start() | ||||
|     t3.start() | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     for argc in sys.argv: | ||||
|  | @ -217,80 +221,83 @@ if __name__ == '__main__': | |||
|             INTERVAL = int(argc.split('INTERVAL=')[-1]) | ||||
|     socket.setdefaulttimeout(30) | ||||
|     while 1: | ||||
| 		try: | ||||
| 			print("Connecting...") | ||||
| 			s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||
| 			s.connect((SERVER, PORT)) | ||||
| 			data = s.recv(1024) | ||||
| 			if data.find("Authentication required") > -1: | ||||
| 				s.send(USER + ':' + PASSWORD + '\n') | ||||
| 				data = s.recv(1024) | ||||
| 				if data.find("Authentication successful") < 0: | ||||
| 					print(data) | ||||
| 					raise socket.error | ||||
| 			else: | ||||
| 				print(data) | ||||
| 				raise socket.error | ||||
|         try: | ||||
|             print("Connecting...") | ||||
|             s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||
|             s.connect((SERVER, PORT)) | ||||
|             data = s.recv(1024) | ||||
|             if data.find("Authentication required") > -1: | ||||
|                 s.send(USER + ':' + PASSWORD + '\n') | ||||
|                 data = s.recv(1024) | ||||
|                 if data.find("Authentication successful") < 0: | ||||
|                     print(data) | ||||
|                     raise socket.error | ||||
|             else: | ||||
|                 print(data) | ||||
|                 raise socket.error | ||||
| 
 | ||||
| 			print(data) | ||||
| 			data = s.recv(1024) | ||||
| 			print(data) | ||||
|             print(data) | ||||
|             data = s.recv(1024) | ||||
|             print(data) | ||||
| 
 | ||||
| 			timer = 0 | ||||
| 			check_ip = 0 | ||||
| 			if data.find("IPv4") > -1: | ||||
| 				check_ip = 6 | ||||
| 			elif data.find("IPv6") > -1: | ||||
| 				check_ip = 4 | ||||
| 			else: | ||||
| 				print(data) | ||||
| 				raise socket.error | ||||
|             timer = 0 | ||||
|             check_ip = 0 | ||||
|             if data.find("IPv4") > -1: | ||||
|                 check_ip = 6 | ||||
|             elif data.find("IPv6") > -1: | ||||
|                 check_ip = 4 | ||||
|             else: | ||||
|                 print(data) | ||||
|                 raise socket.error | ||||
| 
 | ||||
| 			traffic = Traffic() | ||||
| 			traffic.get() | ||||
| 			while 1: | ||||
| 				CPU = get_cpu() | ||||
| 				NetRx, NetTx = traffic.get() | ||||
| 				NET_IN, NET_OUT = liuliang() | ||||
| 				Uptime = get_uptime() | ||||
| 				Load_1, Load_5, Load_15 = os.getloadavg() | ||||
| 				MemoryTotal, MemoryUsed, SwapTotal, SwapFree = get_memory() | ||||
| 				HDDTotal, HDDUsed = get_hdd() | ||||
| 				IP_STATUS = ip_status() | ||||
|             traffic = Traffic() | ||||
|             traffic.get() | ||||
|             while 1: | ||||
|                 CPU = get_cpu() | ||||
|                 NetRx, NetTx = traffic.get() | ||||
|                 NET_IN, NET_OUT = liuliang() | ||||
|                 Uptime = get_uptime() | ||||
|                 Load_1, Load_5, Load_15 = os.getloadavg() | ||||
|                 MemoryTotal, MemoryUsed, SwapTotal, SwapFree = get_memory() | ||||
|                 HDDTotal, HDDUsed = get_hdd() | ||||
|                 IP_STATUS = ip_status() | ||||
| 
 | ||||
| 				array = {} | ||||
| 				if not timer: | ||||
| 					array['online' + str(check_ip)] = get_network(check_ip) | ||||
| 					timer = 10 | ||||
| 				else: | ||||
| 					timer -= 1*INTERVAL | ||||
|                 array = {} | ||||
|                 if not timer: | ||||
|                     array['online' + str(check_ip)] = get_network(check_ip) | ||||
|                     timer = 10 | ||||
|                 else: | ||||
|                     timer -= 1*INTERVAL | ||||
| 
 | ||||
| 				array['uptime'] = Uptime | ||||
| 				array['load_1'] = Load_1 | ||||
| 				array['load_5'] = Load_5 | ||||
| 				array['load_15'] = Load_15 | ||||
| 				array['memory_total'] = MemoryTotal | ||||
| 				array['memory_used'] = MemoryUsed | ||||
| 				array['swap_total'] = SwapTotal | ||||
| 				array['swap_used'] = SwapTotal - SwapFree | ||||
| 				array['hdd_total'] = HDDTotal | ||||
| 				array['hdd_used'] = HDDUsed | ||||
| 				array['cpu'] = CPU | ||||
| 				array['network_rx'] = NetRx | ||||
| 				array['network_tx'] = NetTx | ||||
| 				array['network_in'] = NET_IN | ||||
| 				array['network_out'] = NET_OUT | ||||
| 				array['ip_status'] = IP_STATUS | ||||
|                 array['uptime'] = Uptime | ||||
|                 array['load_1'] = Load_1 | ||||
|                 array['load_5'] = Load_5 | ||||
|                 array['load_15'] = Load_15 | ||||
|                 array['memory_total'] = MemoryTotal | ||||
|                 array['memory_used'] = MemoryUsed | ||||
|                 array['swap_total'] = SwapTotal | ||||
|                 array['swap_used'] = SwapTotal - SwapFree | ||||
|                 array['hdd_total'] = HDDTotal | ||||
|                 array['hdd_used'] = HDDUsed | ||||
|                 array['cpu'] = CPU | ||||
|                 array['network_rx'] = NetRx | ||||
|                 array['network_tx'] = NetTx | ||||
|                 array['network_in'] = NET_IN | ||||
|                 array['network_out'] = NET_OUT | ||||
|                 array['ip_status'] = IP_STATUS | ||||
|                 array['ping_10010'] = lostRate.get('10010') * 100 | ||||
|                 array['ping_189'] = lostRate.get('189') * 100 | ||||
|                 array['ping_10086'] = lostRate.get('10086') * 100 | ||||
| 
 | ||||
| 				s.send("update " + json.dumps(array) + "\n") | ||||
| 		except KeyboardInterrupt: | ||||
| 			raise | ||||
| 		except socket.error: | ||||
| 			print("Disconnected...") | ||||
| 			# keep on trying after a disconnect | ||||
| 			s.close() | ||||
| 			time.sleep(3) | ||||
| 		except Exception as e: | ||||
| 			print("Caught Exception:", e) | ||||
| 			s.close() | ||||
| 			time.sleep(3) | ||||
|                 s.send("update " + json.dumps(array) + "\n") | ||||
|         except KeyboardInterrupt: | ||||
|             raise | ||||
|         except socket.error: | ||||
|             print("Disconnected...") | ||||
|             # keep on trying after a disconnect | ||||
|             s.close() | ||||
|             time.sleep(3) | ||||
|         except Exception as e: | ||||
|             print("Caught Exception:", e) | ||||
|             s.close() | ||||
|             time.sleep(3) | ||||
|  |  | |||
|  | @ -3,7 +3,7 @@ | |||
| # 依赖于psutil跨平台库: | ||||
| # 支持Python版本:2.6 to 3.5 (users of Python 2.4 and 2.5 may use 2.1.3 version) | ||||
| # 支持操作系统: Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures | ||||
| # 时间: 20180312 | ||||
| # 时间: 20180828 | ||||
| 
 | ||||
| SERVER = "127.0.0.1" | ||||
| PORT = 35601 | ||||
|  | @ -22,64 +22,64 @@ import sys | |||
| import threading | ||||
| 
 | ||||
| def get_uptime(): | ||||
| 	return int(time.time() - psutil.boot_time()) | ||||
|     return int(time.time() - psutil.boot_time()) | ||||
| 
 | ||||
| def get_memory(): | ||||
| 	Mem = psutil.virtual_memory() | ||||
| 	try: | ||||
| 		MemUsed = Mem.total - (Mem.cached + Mem.free) | ||||
| 	except: | ||||
| 		MemUsed = Mem.total - Mem.free | ||||
| 	return int(Mem.total/1024.0), int(MemUsed/1024.0) | ||||
|     Mem = psutil.virtual_memory() | ||||
|     try: | ||||
|         MemUsed = Mem.total - (Mem.cached + Mem.free) | ||||
|     except: | ||||
|         MemUsed = Mem.total - Mem.free | ||||
|     return int(Mem.total/1024.0), int(MemUsed/1024.0) | ||||
| 
 | ||||
| def get_swap(): | ||||
| 	Mem = psutil.swap_memory() | ||||
| 	return int(Mem.total/1024.0), int(Mem.used/1024.0) | ||||
|     Mem = psutil.swap_memory() | ||||
|     return int(Mem.total/1024.0), int(Mem.used/1024.0) | ||||
| 
 | ||||
| def get_hdd(): | ||||
| 	valid_fs = [ "ext4", "ext3", "ext2", "reiserfs", "jfs", "btrfs", "fuseblk", "zfs", "simfs", "ntfs", "fat32", "exfat", "xfs" ] | ||||
| 	disks = dict() | ||||
| 	size = 0 | ||||
| 	used = 0 | ||||
| 	for disk in psutil.disk_partitions(): | ||||
| 		if not disk.device in disks and disk.fstype.lower() in valid_fs: | ||||
| 			disks[disk.device] = disk.mountpoint | ||||
| 	for disk in disks.itervalues(): | ||||
| 		usage = psutil.disk_usage(disk) | ||||
| 		size += usage.total | ||||
| 		used += usage.used | ||||
| 	return int(size/1024.0/1024.0), int(used/1024.0/1024.0) | ||||
|     valid_fs = [ "ext4", "ext3", "ext2", "reiserfs", "jfs", "btrfs", "fuseblk", "zfs", "simfs", "ntfs", "fat32", "exfat", "xfs" ] | ||||
|     disks = dict() | ||||
|     size = 0 | ||||
|     used = 0 | ||||
|     for disk in psutil.disk_partitions(): | ||||
|         if not disk.device in disks and disk.fstype.lower() in valid_fs: | ||||
|             disks[disk.device] = disk.mountpoint | ||||
|     for disk in disks.itervalues(): | ||||
|         usage = psutil.disk_usage(disk) | ||||
|         size += usage.total | ||||
|         used += usage.used | ||||
|     return int(size/1024.0/1024.0), int(used/1024.0/1024.0) | ||||
| 
 | ||||
| def get_cpu(): | ||||
| 	return psutil.cpu_percent(interval=INTERVAL) | ||||
|     return psutil.cpu_percent(interval=INTERVAL) | ||||
| 
 | ||||
| class Traffic: | ||||
| 	def __init__(self): | ||||
| 		self.rx = collections.deque(maxlen=10) | ||||
| 		self.tx = collections.deque(maxlen=10) | ||||
| 	def get(self): | ||||
| 		avgrx = 0; avgtx = 0 | ||||
| 		for name, stats in psutil.net_io_counters(pernic=True).iteritems(): | ||||
| 			if name == "lo" or name.find("tun") > -1 \ | ||||
| 					or name.find("docker") > -1 or name.find("veth") > -1 \ | ||||
| 					or name.find("br-") > -1: | ||||
| 				continue | ||||
| 			avgrx += stats.bytes_recv | ||||
| 			avgtx += stats.bytes_sent | ||||
|     def __init__(self): | ||||
|         self.rx = collections.deque(maxlen=10) | ||||
|         self.tx = collections.deque(maxlen=10) | ||||
|     def get(self): | ||||
|         avgrx = 0; avgtx = 0 | ||||
|         for name, stats in psutil.net_io_counters(pernic=True).iteritems(): | ||||
|             if name == "lo" or name.find("tun") > -1 \ | ||||
|                     or name.find("docker") > -1 or name.find("veth") > -1 \ | ||||
|                     or name.find("br-") > -1: | ||||
|                 continue | ||||
|             avgrx += stats.bytes_recv | ||||
|             avgtx += stats.bytes_sent | ||||
| 
 | ||||
| 		self.rx.append(avgrx) | ||||
| 		self.tx.append(avgtx) | ||||
| 		avgrx = 0; avgtx = 0 | ||||
|         self.rx.append(avgrx) | ||||
|         self.tx.append(avgtx) | ||||
|         avgrx = 0; avgtx = 0 | ||||
| 
 | ||||
| 		l = len(self.rx) | ||||
| 		for x in range(l - 1): | ||||
| 			avgrx += self.rx[x+1] - self.rx[x] | ||||
| 			avgtx += self.tx[x+1] - self.tx[x] | ||||
|         l = len(self.rx) | ||||
|         for x in range(l - 1): | ||||
|             avgrx += self.rx[x+1] - self.rx[x] | ||||
|             avgtx += self.tx[x+1] - self.tx[x] | ||||
| 
 | ||||
| 		avgrx = int(avgrx / l / INTERVAL) | ||||
| 		avgtx = int(avgtx / l / INTERVAL) | ||||
|         avgrx = int(avgrx / l / INTERVAL) | ||||
|         avgtx = int(avgtx / l / INTERVAL) | ||||
| 
 | ||||
| 		return avgrx, avgtx | ||||
|         return avgrx, avgtx | ||||
| 
 | ||||
| def liuliang(): | ||||
|     NET_IN = 0 | ||||
|  | @ -87,8 +87,8 @@ def liuliang(): | |||
|     net = psutil.net_io_counters(pernic=True) | ||||
|     for k, v in net.items(): | ||||
|         if k == 'lo' or 'tun' in k \ | ||||
| 				or 'br-' in k \ | ||||
| 				or 'docker' in k or 'veth' in k: | ||||
|                 or 'br-' in k \ | ||||
|                 or 'docker' in k or 'veth' in k: | ||||
|             continue | ||||
|         else: | ||||
|             NET_IN += v[1] | ||||
|  | @ -96,35 +96,39 @@ def liuliang(): | |||
|     return NET_IN, NET_OUT | ||||
| 
 | ||||
| def ip_status(): | ||||
| 	object_check = ['www.10010.com', 'www.189.cn', 'www.10086.cn'] | ||||
| 	ip_check = 0 | ||||
| 	for i in object_check: | ||||
| 		s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||
| 		s.settimeout(1) | ||||
| 		try: | ||||
| 			s.connect((i, 80)) | ||||
| 		except: | ||||
| 			ip_check += 1 | ||||
| 		s.close() | ||||
| 		del s | ||||
| 	if ip_check >= 2: | ||||
| 		return False | ||||
| 	else: | ||||
| 		return True | ||||
|     object_check = ['www.10010.com', 'www.189.cn', 'www.10086.cn'] | ||||
|     ip_check = 0 | ||||
|     for i in object_check: | ||||
|         s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||
|         s.settimeout(1) | ||||
|         try: | ||||
|             s.connect((i, 80)) | ||||
|         except: | ||||
|             ip_check += 1 | ||||
|         s.close() | ||||
|         del s | ||||
|     if ip_check >= 2: | ||||
|         return False | ||||
|     else: | ||||
|         return True | ||||
| 
 | ||||
| def get_network(ip_version): | ||||
| 	if(ip_version == 4): | ||||
| 		HOST = "ipv4.google.com" | ||||
| 	elif(ip_version == 6): | ||||
| 		HOST = "ipv6.google.com" | ||||
| 	try: | ||||
| 		s = socket.create_connection((HOST, 80), 2) | ||||
| 		return True | ||||
| 	except: | ||||
| 		pass | ||||
| 	return False | ||||
|     if(ip_version == 4): | ||||
|         HOST = "ipv4.google.com" | ||||
|     elif(ip_version == 6): | ||||
|         HOST = "ipv6.google.com" | ||||
|     try: | ||||
|         s = socket.create_connection((HOST, 80), 2) | ||||
|         return True | ||||
|     except: | ||||
|         pass | ||||
|     return False | ||||
| 
 | ||||
| lostRate = {} | ||||
| lostRate = { | ||||
|     '10010': 0.0, | ||||
|     '189': 0.0, | ||||
|     '10086': 0.0 | ||||
| } | ||||
| def _ping_thread(host, mark): | ||||
|     output = os.popen('ping -O %s &' % host if 'linux' in sys.platform else 'ping %s -t &' % host) | ||||
|     lostCount = 0 | ||||
|  | @ -144,33 +148,33 @@ def _ping_thread(host, mark): | |||
|             startTime = endTime | ||||
| 
 | ||||
| def get_packetLostRate(): | ||||
| 	t1 = threading.Thread( | ||||
| 		target=_ping_thread, | ||||
| 		kwargs={ | ||||
| 			'host': 'www.10010.com', | ||||
| 			'mark': '10010' | ||||
| 		} | ||||
| 	) | ||||
| 	t2 = threading.Thread( | ||||
| 		target=_ping_thread, | ||||
| 		kwargs={ | ||||
| 			'host': 'www.189.cn', | ||||
| 			'mark': '189' | ||||
| 		} | ||||
| 	) | ||||
| 	t3 = threading.Thread( | ||||
| 		target=_ping_thread, | ||||
| 		kwargs={ | ||||
| 			'host': 'bj.10086.cn', | ||||
| 			'mark': '10086' | ||||
| 		} | ||||
| 	) | ||||
| 	t1.setDaemon(True) | ||||
| 	t2.setDaemon(True) | ||||
| 	t3.setDaemon(True) | ||||
| 	t1.start() | ||||
| 	t2.start() | ||||
| 	t3.start() | ||||
|     t1 = threading.Thread( | ||||
|         target=_ping_thread, | ||||
|         kwargs={ | ||||
|             'host': 'www.10010.com', | ||||
|             'mark': '10010' | ||||
|         } | ||||
|     ) | ||||
|     t2 = threading.Thread( | ||||
|         target=_ping_thread, | ||||
|         kwargs={ | ||||
|             'host': 'www.189.cn', | ||||
|             'mark': '189' | ||||
|         } | ||||
|     ) | ||||
|     t3 = threading.Thread( | ||||
|         target=_ping_thread, | ||||
|         kwargs={ | ||||
|             'host': 'bj.10086.cn', | ||||
|             'mark': '10086' | ||||
|         } | ||||
|     ) | ||||
|     t1.setDaemon(True) | ||||
|     t2.setDaemon(True) | ||||
|     t3.setDaemon(True) | ||||
|     t1.start() | ||||
|     t2.start() | ||||
|     t3.start() | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     for argc in sys.argv: | ||||
|  | @ -186,81 +190,84 @@ if __name__ == '__main__': | |||
|             INTERVAL = int(argc.split('INTERVAL=')[-1]) | ||||
|     socket.setdefaulttimeout(30) | ||||
|     while 1: | ||||
| 		try: | ||||
| 			print("Connecting...") | ||||
| 			s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||
| 			s.connect((SERVER, PORT)) | ||||
| 			data = s.recv(1024) | ||||
| 			if data.find("Authentication required") > -1: | ||||
| 				s.send(USER + ':' + PASSWORD + '\n') | ||||
| 				data = s.recv(1024) | ||||
| 				if data.find("Authentication successful") < 0: | ||||
| 					print(data) | ||||
| 					raise socket.error | ||||
| 			else: | ||||
| 				print(data) | ||||
| 				raise socket.error | ||||
|         try: | ||||
|             print("Connecting...") | ||||
|             s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) | ||||
|             s.connect((SERVER, PORT)) | ||||
|             data = s.recv(1024) | ||||
|             if data.find("Authentication required") > -1: | ||||
|                 s.send(USER + ':' + PASSWORD + '\n') | ||||
|                 data = s.recv(1024) | ||||
|                 if data.find("Authentication successful") < 0: | ||||
|                     print(data) | ||||
|                     raise socket.error | ||||
|             else: | ||||
|                 print(data) | ||||
|                 raise socket.error | ||||
| 
 | ||||
| 			print(data) | ||||
| 			data = s.recv(1024) | ||||
| 			print(data) | ||||
|             print(data) | ||||
|             data = s.recv(1024) | ||||
|             print(data) | ||||
| 
 | ||||
| 			timer = 0 | ||||
| 			check_ip = 0 | ||||
| 			if data.find("IPv4") > -1: | ||||
| 				check_ip = 6 | ||||
| 			elif data.find("IPv6") > -1: | ||||
| 				check_ip = 4 | ||||
| 			else: | ||||
| 				print(data) | ||||
| 				raise socket.error | ||||
|             timer = 0 | ||||
|             check_ip = 0 | ||||
|             if data.find("IPv4") > -1: | ||||
|                 check_ip = 6 | ||||
|             elif data.find("IPv6") > -1: | ||||
|                 check_ip = 4 | ||||
|             else: | ||||
|                 print(data) | ||||
|                 raise socket.error | ||||
| 
 | ||||
| 			traffic = Traffic() | ||||
| 			traffic.get() | ||||
| 			while 1: | ||||
| 				CPU = get_cpu() | ||||
| 				NetRx, NetTx = traffic.get() | ||||
| 				NET_IN, NET_OUT = liuliang() | ||||
| 				Uptime = get_uptime() | ||||
| 				Load_1, Load_5, Load_15 = os.getloadavg() if 'linux' in sys.platform else (0.0, 0.0, 0.0) | ||||
| 				MemoryTotal, MemoryUsed = get_memory() | ||||
| 				SwapTotal, SwapUsed = get_swap() | ||||
| 				HDDTotal, HDDUsed = get_hdd() | ||||
| 				IP_STATUS = ip_status() | ||||
|             traffic = Traffic() | ||||
|             traffic.get() | ||||
|             while 1: | ||||
|                 CPU = get_cpu() | ||||
|                 NetRx, NetTx = traffic.get() | ||||
|                 NET_IN, NET_OUT = liuliang() | ||||
|                 Uptime = get_uptime() | ||||
|                 Load_1, Load_5, Load_15 = os.getloadavg() if 'linux' in sys.platform else (0.0, 0.0, 0.0) | ||||
|                 MemoryTotal, MemoryUsed = get_memory() | ||||
|                 SwapTotal, SwapUsed = get_swap() | ||||
|                 HDDTotal, HDDUsed = get_hdd() | ||||
|                 IP_STATUS = ip_status() | ||||
| 
 | ||||
| 				array = {} | ||||
| 				if not timer: | ||||
| 					array['online' + str(check_ip)] = get_network(check_ip) | ||||
| 					timer = 10 | ||||
| 				else: | ||||
| 					timer -= 1*INTERVAL | ||||
|                 array = {} | ||||
|                 if not timer: | ||||
|                     array['online' + str(check_ip)] = get_network(check_ip) | ||||
|                     timer = 10 | ||||
|                 else: | ||||
|                     timer -= 1*INTERVAL | ||||
| 
 | ||||
| 				array['uptime'] = Uptime | ||||
| 				array['load_1'] = Load_1 | ||||
| 				array['load_5'] = Load_5 | ||||
| 				array['load_15'] = Load_15 | ||||
| 				array['memory_total'] = MemoryTotal | ||||
| 				array['memory_used'] = MemoryUsed | ||||
| 				array['swap_total'] = SwapTotal | ||||
| 				array['swap_used'] = SwapUsed | ||||
| 				array['hdd_total'] = HDDTotal | ||||
| 				array['hdd_used'] = HDDUsed | ||||
| 				array['cpu'] = CPU | ||||
| 				array['network_rx'] = NetRx | ||||
| 				array['network_tx'] = NetTx | ||||
| 				array['network_in'] = NET_IN | ||||
| 				array['network_out'] = NET_OUT | ||||
| 				array['ip_status'] = IP_STATUS | ||||
|                 array['uptime'] = Uptime | ||||
|                 array['load_1'] = Load_1 | ||||
|                 array['load_5'] = Load_5 | ||||
|                 array['load_15'] = Load_15 | ||||
|                 array['memory_total'] = MemoryTotal | ||||
|                 array['memory_used'] = MemoryUsed | ||||
|                 array['swap_total'] = SwapTotal | ||||
|                 array['swap_used'] = SwapUsed | ||||
|                 array['hdd_total'] = HDDTotal | ||||
|                 array['hdd_used'] = HDDUsed | ||||
|                 array['cpu'] = CPU | ||||
|                 array['network_rx'] = NetRx | ||||
|                 array['network_tx'] = NetTx | ||||
|                 array['network_in'] = NET_IN | ||||
|                 array['network_out'] = NET_OUT | ||||
|                 array['ip_status'] = IP_STATUS | ||||
|                 array['ping_10010'] = lostRate.get('10010') * 100 | ||||
|                 array['ping_189'] = lostRate.get('189') * 100 | ||||
|                 array['ping_10086'] = lostRate.get('10086') * 100 | ||||
| 
 | ||||
| 				s.send("update " + json.dumps(array) + "\n") | ||||
| 		except KeyboardInterrupt: | ||||
| 			raise | ||||
| 		except socket.error: | ||||
| 			print("Disconnected...") | ||||
| 			# keep on trying after a disconnect | ||||
| 			s.close() | ||||
| 			time.sleep(3) | ||||
| 		except Exception as e: | ||||
| 			print("Caught Exception:", e) | ||||
| 			s.close() | ||||
| 			time.sleep(3) | ||||
|                 s.send("update " + json.dumps(array) + "\n") | ||||
|         except KeyboardInterrupt: | ||||
|             raise | ||||
|         except socket.error: | ||||
|             print("Disconnected...") | ||||
|             # keep on trying after a disconnect | ||||
|             s.close() | ||||
|             time.sleep(3) | ||||
|         except Exception as e: | ||||
|             print("Caught Exception:", e) | ||||
|             s.close() | ||||
|             time.sleep(3) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 ubuntu
						ubuntu