修复两个严重的bug,原计算方式会导致网速奇高。

pull/86/head
macos 2020-04-07 17:03:29 +08:00
parent 3ab51d34a4
commit 2f7acc3564
2 changed files with 42 additions and 20 deletions

View File

@ -3,7 +3,7 @@
# Update by : https://github.com/cppla/ServerStatus # Update by : https://github.com/cppla/ServerStatus
# 支持Python版本2.7 to 3.7 # 支持Python版本2.7 to 3.7
# 支持操作系统: Linux, OSX, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures # 支持操作系统: Linux, OSX, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures
# 时间: 20200401 # 时间: 20200407
# 说明: 默认情况下修改server和user就可以了。丢包率监测方向可以自定义例如CU = "www.facebook.com"。 # 说明: 默认情况下修改server和user就可以了。丢包率监测方向可以自定义例如CU = "www.facebook.com"。
SERVER = "127.0.0.1" SERVER = "127.0.0.1"
@ -31,12 +31,9 @@ import collections
import threading import threading
def get_uptime(): def get_uptime():
f = open('/proc/uptime', 'r') with open('/proc/uptime', 'r') as f:
uptime = f.readline() uptime = f.readline().split('.', 2)
f.close() return int(uptime[0])
uptime = uptime.split('.', 2)
time = int(uptime[0])
return int(time)
def get_memory(): def get_memory():
re_parser = re.compile(r'^(?P<key>\S*):\s*(?P<value>\d*)\s*kB') re_parser = re.compile(r'^(?P<key>\S*):\s*(?P<value>\d*)\s*kB')
@ -61,9 +58,8 @@ def get_hdd():
return int(size), int(used) return int(size), int(used)
def get_time(): def get_time():
stat_file = open("/proc/stat", "r") with open("/proc/stat", "r") as f:
time_list = stat_file.readline().split(' ')[2:6] time_list = f.readline().split(' ')[2:6]
stat_file.close()
for i in range(len(time_list)) : for i in range(len(time_list)) :
time_list[i] = int(time_list[i]) time_list[i] = int(time_list[i])
return time_list return time_list
@ -84,10 +80,23 @@ def get_cpu():
result = 100-(t[len(t)-1]*100.00/st) result = 100-(t[len(t)-1]*100.00/st)
return round(result, 1) return round(result, 1)
traffic_clock = time.time()
traffic_diff = 0
def TCLOCK(func):
def wrapper(*args, **kwargs):
global traffic_clock, traffic_diff
now_clock = time.time()
traffic_diff = now_clock - traffic_clock
traffic_clock = now_clock
return func(*args, **kwargs)
return wrapper
class Traffic: class Traffic:
def __init__(self): def __init__(self):
self.rx = collections.deque(maxlen=10) self.rx = collections.deque(maxlen=10)
self.tx = collections.deque(maxlen=10) self.tx = collections.deque(maxlen=10)
@TCLOCK
def get(self): def get(self):
f = open('/proc/net/dev', 'r') f = open('/proc/net/dev', 'r')
net_dev = f.readlines() net_dev = f.readlines()
@ -114,8 +123,8 @@ class Traffic:
avgrx += self.rx[x+1] - self.rx[x] avgrx += self.rx[x+1] - self.rx[x]
avgtx += self.tx[x+1] - self.tx[x] avgtx += self.tx[x+1] - self.tx[x]
avgrx = int(avgrx / l / INTERVAL) avgrx = int(avgrx / l / traffic_diff)
avgtx = int(avgtx / l / INTERVAL) avgtx = int(avgtx / l / traffic_diff)
return avgrx, avgtx return avgrx, avgtx
@ -278,7 +287,7 @@ if __name__ == '__main__':
INTERVAL = int(argc.split('INTERVAL=')[-1]) INTERVAL = int(argc.split('INTERVAL=')[-1])
socket.setdefaulttimeout(30) socket.setdefaulttimeout(30)
get_packetLostRate() get_packetLostRate()
while 1: while True:
try: try:
print("Connecting...") print("Connecting...")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@ -310,7 +319,7 @@ if __name__ == '__main__':
traffic = Traffic() traffic = Traffic()
traffic.get() traffic.get()
while 1: while True:
CPU = get_cpu() CPU = get_cpu()
NetRx, NetTx = traffic.get() NetRx, NetTx = traffic.get()
NET_IN, NET_OUT = liuliang() NET_IN, NET_OUT = liuliang()

View File

@ -4,7 +4,7 @@
# 依赖于psutil跨平台库 # 依赖于psutil跨平台库
# 支持Python版本2.7 to 3.7 # 支持Python版本2.7 to 3.7
# 支持操作系统: Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures # 支持操作系统: Linux, Windows, OSX, Sun Solaris, FreeBSD, OpenBSD and NetBSD, both 32-bit and 64-bit architectures
# 时间: 20200401 # 时间: 20200407
# 说明: 默认情况下修改server和user就可以了。丢包率监测方向可以自定义例如CU = "www.facebook.com"。 # 说明: 默认情况下修改server和user就可以了。丢包率监测方向可以自定义例如CU = "www.facebook.com"。
SERVER = "127.0.0.1" SERVER = "127.0.0.1"
@ -58,10 +58,23 @@ def get_hdd():
def get_cpu(): def get_cpu():
return psutil.cpu_percent(interval=INTERVAL) return psutil.cpu_percent(interval=INTERVAL)
traffic_clock = time.time()
traffic_diff = 0
def TCLOCK(func):
def wrapper(*args, **kwargs):
global traffic_clock, traffic_diff
now_clock = time.time()
traffic_diff = now_clock - traffic_clock
traffic_clock = now_clock
return func(*args, **kwargs)
return wrapper
class Traffic: class Traffic:
def __init__(self): def __init__(self):
self.rx = collections.deque(maxlen=10) self.rx = collections.deque(maxlen=10)
self.tx = collections.deque(maxlen=10) self.tx = collections.deque(maxlen=10)
@TCLOCK
def get(self): def get(self):
avgrx = 0; avgtx = 0 avgrx = 0; avgtx = 0
for name, stats in psutil.net_io_counters(pernic=True).items(): for name, stats in psutil.net_io_counters(pernic=True).items():
@ -82,8 +95,8 @@ class Traffic:
avgrx += self.rx[x+1] - self.rx[x] avgrx += self.rx[x+1] - self.rx[x]
avgtx += self.tx[x+1] - self.tx[x] avgtx += self.tx[x+1] - self.tx[x]
avgrx = int(avgrx / l / INTERVAL) avgrx = int(avgrx / l / traffic_diff)
avgtx = int(avgtx / l / INTERVAL) avgtx = int(avgtx / l / traffic_diff)
return avgrx, avgtx return avgrx, avgtx