Skip to content

Commit 518543e

Browse files
author
macos
committed
扔到线程里,优化网速展示
1 parent 2f7acc3 commit 518543e

File tree

2 files changed

+88
-108
lines changed

2 files changed

+88
-108
lines changed

clients/client-linux.py

Lines changed: 44 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import sys
2828
import json
2929
import subprocess
30-
import collections
3130
import threading
3231

3332
def get_uptime():
@@ -80,54 +79,6 @@ def get_cpu():
8079
result = 100-(t[len(t)-1]*100.00/st)
8180
return round(result, 1)
8281

83-
traffic_clock = time.time()
84-
traffic_diff = 0
85-
def TCLOCK(func):
86-
def wrapper(*args, **kwargs):
87-
global traffic_clock, traffic_diff
88-
now_clock = time.time()
89-
traffic_diff = now_clock - traffic_clock
90-
traffic_clock = now_clock
91-
return func(*args, **kwargs)
92-
return wrapper
93-
94-
class Traffic:
95-
def __init__(self):
96-
self.rx = collections.deque(maxlen=10)
97-
self.tx = collections.deque(maxlen=10)
98-
99-
@TCLOCK
100-
def get(self):
101-
f = open('/proc/net/dev', 'r')
102-
net_dev = f.readlines()
103-
f.close()
104-
avgrx = 0; avgtx = 0
105-
106-
for dev in net_dev[2:]:
107-
dev = dev.split(':')
108-
if "lo" in dev[0] or "tun" in dev[0] \
109-
or "docker" in dev[0] or "veth" in dev[0] \
110-
or "br-" in dev[0] or "vmbr" in dev[0] \
111-
or "vnet" in dev[0] or "kube" in dev[0]:
112-
continue
113-
dev = dev[1].split()
114-
avgrx += int(dev[0])
115-
avgtx += int(dev[8])
116-
117-
self.rx.append(avgrx)
118-
self.tx.append(avgtx)
119-
avgrx = 0; avgtx = 0
120-
121-
l = len(self.rx)
122-
for x in range(l - 1):
123-
avgrx += self.rx[x+1] - self.rx[x]
124-
avgtx += self.tx[x+1] - self.tx[x]
125-
126-
avgrx = int(avgrx / l / traffic_diff)
127-
avgtx = int(avgtx / l / traffic_diff)
128-
129-
return avgrx, avgtx
130-
13182
def liuliang():
13283
NET_IN = 0
13384
NET_OUT = 0
@@ -199,6 +150,15 @@ def get_network(ip_version):
199150
'189': 0,
200151
'10086': 0
201152
}
153+
netSpeed = {
154+
'netrx': 0.0,
155+
'nettx': 0.0,
156+
'clock': 0.0,
157+
'diff': 0.0,
158+
'avgrx': 0,
159+
'avgtx': 0
160+
}
161+
202162
def _ping_thread(host, mark, port):
203163
lostPacket = 0
204164
allPacket = 0
@@ -226,9 +186,34 @@ def _ping_thread(host, mark, port):
226186
allPacket = 0
227187
startTime = endTime
228188

229-
time.sleep(1)
189+
time.sleep(INTERVAL)
230190

231-
def get_packetLostRate():
191+
def _net_speed():
192+
while True:
193+
with open("/proc/net/dev", "r") as f:
194+
net_dev = f.readlines()
195+
avgrx = 0
196+
avgtx = 0
197+
for dev in net_dev[2:]:
198+
dev = dev.split(':')
199+
if "lo" in dev[0] or "tun" in dev[0] \
200+
or "docker" in dev[0] or "veth" in dev[0] \
201+
or "br-" in dev[0] or "vmbr" in dev[0] \
202+
or "vnet" in dev[0] or "kube" in dev[0]:
203+
continue
204+
dev = dev[1].split()
205+
avgrx += int(dev[0])
206+
avgtx += int(dev[8])
207+
now_clock = time.time()
208+
netSpeed["diff"] = now_clock - netSpeed["clock"]
209+
netSpeed["clock"] = now_clock
210+
netSpeed["netrx"] = int((avgrx - netSpeed["avgrx"]) / netSpeed["diff"])
211+
netSpeed["nettx"] = int((avgtx - netSpeed["avgtx"]) / netSpeed["diff"])
212+
netSpeed["avgrx"] = avgrx
213+
netSpeed["avgtx"] = avgtx
214+
time.sleep(INTERVAL)
215+
216+
def get_realtime_date():
232217
t1 = threading.Thread(
233218
target=_ping_thread,
234219
kwargs={
@@ -253,12 +238,17 @@ def get_packetLostRate():
253238
'port': PORBEPORT
254239
}
255240
)
241+
t4 = threading.Thread(
242+
target=_net_speed,
243+
)
256244
t1.setDaemon(True)
257245
t2.setDaemon(True)
258246
t3.setDaemon(True)
247+
t4.setDaemon(True)
259248
t1.start()
260249
t2.start()
261250
t3.start()
251+
t4.start()
262252

263253
def byte_str(object):
264254
'''
@@ -286,7 +276,7 @@ def byte_str(object):
286276
elif 'INTERVAL' in argc:
287277
INTERVAL = int(argc.split('INTERVAL=')[-1])
288278
socket.setdefaulttimeout(30)
289-
get_packetLostRate()
279+
get_realtime_date()
290280
while True:
291281
try:
292282
print("Connecting...")
@@ -317,11 +307,8 @@ def byte_str(object):
317307
print(data)
318308
raise socket.error
319309

320-
traffic = Traffic()
321-
traffic.get()
322310
while True:
323311
CPU = get_cpu()
324-
NetRx, NetTx = traffic.get()
325312
NET_IN, NET_OUT = liuliang()
326313
Uptime = get_uptime()
327314
Load_1, Load_5, Load_15 = os.getloadavg()
@@ -347,8 +334,8 @@ def byte_str(object):
347334
array['hdd_total'] = HDDTotal
348335
array['hdd_used'] = HDDUsed
349336
array['cpu'] = CPU
350-
array['network_rx'] = NetRx
351-
array['network_tx'] = NetTx
337+
array['network_rx'] = netSpeed.get("netrx")
338+
array['network_tx'] = netSpeed.get("nettx")
352339
array['network_in'] = NET_IN
353340
array['network_out'] = NET_OUT
354341
array['ip_status'] = IP_STATUS

clients/client-psutil.py

Lines changed: 44 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import timeit
2626
import os
2727
import json
28-
import collections
2928
import psutil
3029
import sys
3130
import threading
@@ -58,48 +57,6 @@ def get_hdd():
5857
def get_cpu():
5958
return psutil.cpu_percent(interval=INTERVAL)
6059

61-
traffic_clock = time.time()
62-
traffic_diff = 0
63-
def TCLOCK(func):
64-
def wrapper(*args, **kwargs):
65-
global traffic_clock, traffic_diff
66-
now_clock = time.time()
67-
traffic_diff = now_clock - traffic_clock
68-
traffic_clock = now_clock
69-
return func(*args, **kwargs)
70-
return wrapper
71-
72-
class Traffic:
73-
def __init__(self):
74-
self.rx = collections.deque(maxlen=10)
75-
self.tx = collections.deque(maxlen=10)
76-
77-
@TCLOCK
78-
def get(self):
79-
avgrx = 0; avgtx = 0
80-
for name, stats in psutil.net_io_counters(pernic=True).items():
81-
if "lo" in name or "tun" in name \
82-
or "docker" in name or "veth" in name \
83-
or "br-" in name or "vmbr" in name \
84-
or "vnet" in name or "kube" in name:
85-
continue
86-
avgrx += stats.bytes_recv
87-
avgtx += stats.bytes_sent
88-
89-
self.rx.append(avgrx)
90-
self.tx.append(avgtx)
91-
avgrx = 0; avgtx = 0
92-
93-
l = len(self.rx)
94-
for x in range(l - 1):
95-
avgrx += self.rx[x+1] - self.rx[x]
96-
avgtx += self.tx[x+1] - self.tx[x]
97-
98-
avgrx = int(avgrx / l / traffic_diff)
99-
avgtx = int(avgtx / l / traffic_diff)
100-
101-
return avgrx, avgtx
102-
10360
def liuliang():
10461
NET_IN = 0
10562
NET_OUT = 0
@@ -172,6 +129,15 @@ def get_network(ip_version):
172129
'189': 0,
173130
'10086': 0
174131
}
132+
netSpeed = {
133+
'netrx': 0.0,
134+
'nettx': 0.0,
135+
'clock': 0.0,
136+
'diff': 0.0,
137+
'avgrx': 0,
138+
'avgtx': 0
139+
}
140+
175141
def _ping_thread(host, mark, port):
176142
lostPacket = 0
177143
allPacket = 0
@@ -199,9 +165,34 @@ def _ping_thread(host, mark, port):
199165
allPacket = 0
200166
startTime = endTime
201167

202-
time.sleep(1)
168+
time.sleep(INTERVAL)
203169

204-
def get_packetLostRate():
170+
def _net_speed():
171+
while True:
172+
with open("/proc/net/dev", "r") as f:
173+
net_dev = f.readlines()
174+
avgrx = 0
175+
avgtx = 0
176+
for dev in net_dev[2:]:
177+
dev = dev.split(':')
178+
if "lo" in dev[0] or "tun" in dev[0] \
179+
or "docker" in dev[0] or "veth" in dev[0] \
180+
or "br-" in dev[0] or "vmbr" in dev[0] \
181+
or "vnet" in dev[0] or "kube" in dev[0]:
182+
continue
183+
dev = dev[1].split()
184+
avgrx += int(dev[0])
185+
avgtx += int(dev[8])
186+
now_clock = time.time()
187+
netSpeed["diff"] = now_clock - netSpeed["clock"]
188+
netSpeed["clock"] = now_clock
189+
netSpeed["netrx"] = int((avgrx - netSpeed["avgrx"]) / netSpeed["diff"])
190+
netSpeed["nettx"] = int((avgtx - netSpeed["avgtx"]) / netSpeed["diff"])
191+
netSpeed["avgrx"] = avgrx
192+
netSpeed["avgtx"] = avgtx
193+
time.sleep(INTERVAL)
194+
195+
def get_realtime_date():
205196
t1 = threading.Thread(
206197
target=_ping_thread,
207198
kwargs={
@@ -226,12 +217,17 @@ def get_packetLostRate():
226217
'port': PORBEPORT
227218
}
228219
)
220+
t4 = threading.Thread(
221+
target=_net_speed,
222+
)
229223
t1.setDaemon(True)
230224
t2.setDaemon(True)
231225
t3.setDaemon(True)
226+
t4.setDaemon(True)
232227
t1.start()
233228
t2.start()
234229
t3.start()
230+
t4.start()
235231

236232
def byte_str(object):
237233
'''
@@ -259,7 +255,7 @@ def byte_str(object):
259255
elif 'INTERVAL' in argc:
260256
INTERVAL = int(argc.split('INTERVAL=')[-1])
261257
socket.setdefaulttimeout(30)
262-
get_packetLostRate()
258+
get_realtime_date()
263259
while 1:
264260
try:
265261
print("Connecting...")
@@ -290,11 +286,8 @@ def byte_str(object):
290286
print(data)
291287
raise socket.error
292288

293-
traffic = Traffic()
294-
traffic.get()
295289
while 1:
296290
CPU = get_cpu()
297-
NetRx, NetTx = traffic.get()
298291
NET_IN, NET_OUT = liuliang()
299292
Uptime = get_uptime()
300293
Load_1, Load_5, Load_15 = os.getloadavg() if 'linux' in sys.platform else (0.0, 0.0, 0.0)
@@ -321,8 +314,8 @@ def byte_str(object):
321314
array['hdd_total'] = HDDTotal
322315
array['hdd_used'] = HDDUsed
323316
array['cpu'] = CPU
324-
array['network_rx'] = NetRx
325-
array['network_tx'] = NetTx
317+
array['network_rx'] = netSpeed.get("netrx")
318+
array['network_tx'] = netSpeed.get("nettx")
326319
array['network_in'] = NET_IN
327320
array['network_out'] = NET_OUT
328321
array['ip_status'] = IP_STATUS

0 commit comments

Comments
 (0)