mirror of
https://github.com//cppla/ServerStatus
synced 2025-06-02 13:49:49 +08:00
扔到线程里,优化网速展示
This commit is contained in:
parent
2f7acc3564
commit
518543edb8
@ -27,7 +27,6 @@ import os
|
||||
import sys
|
||||
import json
|
||||
import subprocess
|
||||
import collections
|
||||
import threading
|
||||
|
||||
def get_uptime():
|
||||
@ -80,54 +79,6 @@ def get_cpu():
|
||||
result = 100-(t[len(t)-1]*100.00/st)
|
||||
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:
|
||||
def __init__(self):
|
||||
self.rx = collections.deque(maxlen=10)
|
||||
self.tx = collections.deque(maxlen=10)
|
||||
|
||||
@TCLOCK
|
||||
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 "lo" in dev[0] or "tun" in dev[0] \
|
||||
or "docker" in dev[0] or "veth" in dev[0] \
|
||||
or "br-" in dev[0] or "vmbr" in dev[0] \
|
||||
or "vnet" in dev[0] or "kube" in dev[0]:
|
||||
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
|
||||
|
||||
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 / traffic_diff)
|
||||
avgtx = int(avgtx / l / traffic_diff)
|
||||
|
||||
return avgrx, avgtx
|
||||
|
||||
def liuliang():
|
||||
NET_IN = 0
|
||||
NET_OUT = 0
|
||||
@ -199,6 +150,15 @@ pingTime = {
|
||||
'189': 0,
|
||||
'10086': 0
|
||||
}
|
||||
netSpeed = {
|
||||
'netrx': 0.0,
|
||||
'nettx': 0.0,
|
||||
'clock': 0.0,
|
||||
'diff': 0.0,
|
||||
'avgrx': 0,
|
||||
'avgtx': 0
|
||||
}
|
||||
|
||||
def _ping_thread(host, mark, port):
|
||||
lostPacket = 0
|
||||
allPacket = 0
|
||||
@ -226,9 +186,34 @@ def _ping_thread(host, mark, port):
|
||||
allPacket = 0
|
||||
startTime = endTime
|
||||
|
||||
time.sleep(1)
|
||||
time.sleep(INTERVAL)
|
||||
|
||||
def get_packetLostRate():
|
||||
def _net_speed():
|
||||
while True:
|
||||
with open("/proc/net/dev", "r") as f:
|
||||
net_dev = f.readlines()
|
||||
avgrx = 0
|
||||
avgtx = 0
|
||||
for dev in net_dev[2:]:
|
||||
dev = dev.split(':')
|
||||
if "lo" in dev[0] or "tun" in dev[0] \
|
||||
or "docker" in dev[0] or "veth" in dev[0] \
|
||||
or "br-" in dev[0] or "vmbr" in dev[0] \
|
||||
or "vnet" in dev[0] or "kube" in dev[0]:
|
||||
continue
|
||||
dev = dev[1].split()
|
||||
avgrx += int(dev[0])
|
||||
avgtx += int(dev[8])
|
||||
now_clock = time.time()
|
||||
netSpeed["diff"] = now_clock - netSpeed["clock"]
|
||||
netSpeed["clock"] = now_clock
|
||||
netSpeed["netrx"] = int((avgrx - netSpeed["avgrx"]) / netSpeed["diff"])
|
||||
netSpeed["nettx"] = int((avgtx - netSpeed["avgtx"]) / netSpeed["diff"])
|
||||
netSpeed["avgrx"] = avgrx
|
||||
netSpeed["avgtx"] = avgtx
|
||||
time.sleep(INTERVAL)
|
||||
|
||||
def get_realtime_date():
|
||||
t1 = threading.Thread(
|
||||
target=_ping_thread,
|
||||
kwargs={
|
||||
@ -253,12 +238,17 @@ def get_packetLostRate():
|
||||
'port': PORBEPORT
|
||||
}
|
||||
)
|
||||
t4 = threading.Thread(
|
||||
target=_net_speed,
|
||||
)
|
||||
t1.setDaemon(True)
|
||||
t2.setDaemon(True)
|
||||
t3.setDaemon(True)
|
||||
t4.setDaemon(True)
|
||||
t1.start()
|
||||
t2.start()
|
||||
t3.start()
|
||||
t4.start()
|
||||
|
||||
def byte_str(object):
|
||||
'''
|
||||
@ -286,7 +276,7 @@ if __name__ == '__main__':
|
||||
elif 'INTERVAL' in argc:
|
||||
INTERVAL = int(argc.split('INTERVAL=')[-1])
|
||||
socket.setdefaulttimeout(30)
|
||||
get_packetLostRate()
|
||||
get_realtime_date()
|
||||
while True:
|
||||
try:
|
||||
print("Connecting...")
|
||||
@ -317,11 +307,8 @@ if __name__ == '__main__':
|
||||
print(data)
|
||||
raise socket.error
|
||||
|
||||
traffic = Traffic()
|
||||
traffic.get()
|
||||
while True:
|
||||
CPU = get_cpu()
|
||||
NetRx, NetTx = traffic.get()
|
||||
NET_IN, NET_OUT = liuliang()
|
||||
Uptime = get_uptime()
|
||||
Load_1, Load_5, Load_15 = os.getloadavg()
|
||||
@ -347,8 +334,8 @@ if __name__ == '__main__':
|
||||
array['hdd_total'] = HDDTotal
|
||||
array['hdd_used'] = HDDUsed
|
||||
array['cpu'] = CPU
|
||||
array['network_rx'] = NetRx
|
||||
array['network_tx'] = NetTx
|
||||
array['network_rx'] = netSpeed.get("netrx")
|
||||
array['network_tx'] = netSpeed.get("nettx")
|
||||
array['network_in'] = NET_IN
|
||||
array['network_out'] = NET_OUT
|
||||
array['ip_status'] = IP_STATUS
|
||||
|
@ -25,7 +25,6 @@ import time
|
||||
import timeit
|
||||
import os
|
||||
import json
|
||||
import collections
|
||||
import psutil
|
||||
import sys
|
||||
import threading
|
||||
@ -58,48 +57,6 @@ def get_hdd():
|
||||
def get_cpu():
|
||||
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:
|
||||
def __init__(self):
|
||||
self.rx = collections.deque(maxlen=10)
|
||||
self.tx = collections.deque(maxlen=10)
|
||||
|
||||
@TCLOCK
|
||||
def get(self):
|
||||
avgrx = 0; avgtx = 0
|
||||
for name, stats in psutil.net_io_counters(pernic=True).items():
|
||||
if "lo" in name or "tun" in name \
|
||||
or "docker" in name or "veth" in name \
|
||||
or "br-" in name or "vmbr" in name \
|
||||
or "vnet" in name or "kube" in name:
|
||||
continue
|
||||
avgrx += stats.bytes_recv
|
||||
avgtx += stats.bytes_sent
|
||||
|
||||
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]
|
||||
|
||||
avgrx = int(avgrx / l / traffic_diff)
|
||||
avgtx = int(avgtx / l / traffic_diff)
|
||||
|
||||
return avgrx, avgtx
|
||||
|
||||
def liuliang():
|
||||
NET_IN = 0
|
||||
NET_OUT = 0
|
||||
@ -172,6 +129,15 @@ pingTime = {
|
||||
'189': 0,
|
||||
'10086': 0
|
||||
}
|
||||
netSpeed = {
|
||||
'netrx': 0.0,
|
||||
'nettx': 0.0,
|
||||
'clock': 0.0,
|
||||
'diff': 0.0,
|
||||
'avgrx': 0,
|
||||
'avgtx': 0
|
||||
}
|
||||
|
||||
def _ping_thread(host, mark, port):
|
||||
lostPacket = 0
|
||||
allPacket = 0
|
||||
@ -199,9 +165,34 @@ def _ping_thread(host, mark, port):
|
||||
allPacket = 0
|
||||
startTime = endTime
|
||||
|
||||
time.sleep(1)
|
||||
time.sleep(INTERVAL)
|
||||
|
||||
def get_packetLostRate():
|
||||
def _net_speed():
|
||||
while True:
|
||||
with open("/proc/net/dev", "r") as f:
|
||||
net_dev = f.readlines()
|
||||
avgrx = 0
|
||||
avgtx = 0
|
||||
for dev in net_dev[2:]:
|
||||
dev = dev.split(':')
|
||||
if "lo" in dev[0] or "tun" in dev[0] \
|
||||
or "docker" in dev[0] or "veth" in dev[0] \
|
||||
or "br-" in dev[0] or "vmbr" in dev[0] \
|
||||
or "vnet" in dev[0] or "kube" in dev[0]:
|
||||
continue
|
||||
dev = dev[1].split()
|
||||
avgrx += int(dev[0])
|
||||
avgtx += int(dev[8])
|
||||
now_clock = time.time()
|
||||
netSpeed["diff"] = now_clock - netSpeed["clock"]
|
||||
netSpeed["clock"] = now_clock
|
||||
netSpeed["netrx"] = int((avgrx - netSpeed["avgrx"]) / netSpeed["diff"])
|
||||
netSpeed["nettx"] = int((avgtx - netSpeed["avgtx"]) / netSpeed["diff"])
|
||||
netSpeed["avgrx"] = avgrx
|
||||
netSpeed["avgtx"] = avgtx
|
||||
time.sleep(INTERVAL)
|
||||
|
||||
def get_realtime_date():
|
||||
t1 = threading.Thread(
|
||||
target=_ping_thread,
|
||||
kwargs={
|
||||
@ -226,12 +217,17 @@ def get_packetLostRate():
|
||||
'port': PORBEPORT
|
||||
}
|
||||
)
|
||||
t4 = threading.Thread(
|
||||
target=_net_speed,
|
||||
)
|
||||
t1.setDaemon(True)
|
||||
t2.setDaemon(True)
|
||||
t3.setDaemon(True)
|
||||
t4.setDaemon(True)
|
||||
t1.start()
|
||||
t2.start()
|
||||
t3.start()
|
||||
t4.start()
|
||||
|
||||
def byte_str(object):
|
||||
'''
|
||||
@ -259,7 +255,7 @@ if __name__ == '__main__':
|
||||
elif 'INTERVAL' in argc:
|
||||
INTERVAL = int(argc.split('INTERVAL=')[-1])
|
||||
socket.setdefaulttimeout(30)
|
||||
get_packetLostRate()
|
||||
get_realtime_date()
|
||||
while 1:
|
||||
try:
|
||||
print("Connecting...")
|
||||
@ -290,11 +286,8 @@ if __name__ == '__main__':
|
||||
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)
|
||||
@ -321,8 +314,8 @@ if __name__ == '__main__':
|
||||
array['hdd_total'] = HDDTotal
|
||||
array['hdd_used'] = HDDUsed
|
||||
array['cpu'] = CPU
|
||||
array['network_rx'] = NetRx
|
||||
array['network_tx'] = NetTx
|
||||
array['network_rx'] = netSpeed.get("netrx")
|
||||
array['network_tx'] = netSpeed.get("nettx")
|
||||
array['network_in'] = NET_IN
|
||||
array['network_out'] = NET_OUT
|
||||
array['ip_status'] = IP_STATUS
|
||||
|
Loading…
x
Reference in New Issue
Block a user