diff --git a/clients/client-linux.py b/clients/client-linux.py index 8fa8bb2..c946300 100755 --- a/clients/client-linux.py +++ b/clients/client-linux.py @@ -14,7 +14,9 @@ USER = "s01" PORT = 35601 PASSWORD = "USER_DEFAULT_PASSWORD" INTERVAL = 1 -PORBEPORT = 80 +PROBEPORT = 80 +PROBE_PROTOCOL_PREFER = "ipv4" # ipv4, ipv6 +PING_PACKET_HISTORY_LEN = 100 CU = "cu.tz.cloudcpp.com" CT = "ct.tz.cloudcpp.com" CM = "cm.tz.cloudcpp.com" @@ -26,8 +28,13 @@ import re import os import sys import json +import errno import subprocess import threading +try: + from queue import Queue # python3 +except ImportError: + from Queue import Queue # python2 def get_uptime(): with open('/proc/uptime', 'r') as f: @@ -116,7 +123,7 @@ def ip_status(): ip_check = 0 for i in [CU, CT, CM]: try: - socket.create_connection((i, PORBEPORT), timeout=1).close() + socket.create_connection((i, PROBEPORT), timeout=1).close() except: ip_check += 1 if ip_check >= 2: @@ -156,27 +163,38 @@ netSpeed = { def _ping_thread(host, mark, port): lostPacket = 0 - allPacket = 0 - startTime = time.time() + packet_queue = Queue(maxsize=PING_PACKET_HISTORY_LEN) + + IP = host + if host.count(':') < 1: # if not plain ipv6 address, means ipv4 address or hostname + try: + if PROBE_PROTOCOL_PREFER == 'ipv4': + IP = socket.getaddrinfo(host, None, socket.AF_INET)[0][4][0] + else: + IP = socket.getaddrinfo(host, None, socket.AF_INET6)[0][4][0] + except Exception: + pass while True: + if packet_queue.full(): + if packet_queue.get() == 0: + lostPacket -= 1 try: b = timeit.default_timer() - socket.create_connection((host, port), timeout=1).close() - pingTime[mark] = int((timeit.default_timer()-b)*1000) - except: - lostPacket += 1 - finally: - allPacket += 1 + socket.create_connection((IP, port), timeout=1).close() + pingTime[mark] = int((timeit.default_timer() - b) * 1000) + packet_queue.put(1) + except socket.error as error: + if error.errno == errno.ECONNREFUSED: + pingTime[mark] = int((timeit.default_timer() - b) * 1000) + packet_queue.put(1) + #elif error.errno == errno.ETIMEDOUT: + else: + lostPacket += 1 + packet_queue.put(0) - if allPacket > 100: - lostRate[mark] = float(lostPacket) / allPacket - - endTime = time.time() - if endTime - startTime > 3600: - lostPacket = 0 - allPacket = 0 - startTime = endTime + if packet_queue.qsize() > 30: + lostRate[mark] = float(lostPacket) / packet_queue.qsize() time.sleep(INTERVAL) @@ -211,7 +229,7 @@ def get_realtime_date(): kwargs={ 'host': CU, 'mark': '10010', - 'port': PORBEPORT + 'port': PROBEPORT } ) t2 = threading.Thread( @@ -219,7 +237,7 @@ def get_realtime_date(): kwargs={ 'host': CT, 'mark': '189', - 'port': PORBEPORT + 'port': PROBEPORT } ) t3 = threading.Thread( @@ -227,7 +245,7 @@ def get_realtime_date(): kwargs={ 'host': CM, 'mark': '10086', - 'port': PORBEPORT + 'port': PROBEPORT } ) t4 = threading.Thread( diff --git a/clients/client-psutil.py b/clients/client-psutil.py index 799ce56..80a9810 100755 --- a/clients/client-psutil.py +++ b/clients/client-psutil.py @@ -15,7 +15,9 @@ USER = "s01" PORT = 35601 PASSWORD = "USER_DEFAULT_PASSWORD" INTERVAL = 1 -PORBEPORT = 80 +PROBEPORT = 80 +PROBE_PROTOCOL_PREFER = "ipv4" # ipv4, ipv6 +PING_PACKET_HISTORY_LEN = 100 CU = "cu.tz.cloudcpp.com" CT = "ct.tz.cloudcpp.com" CM = "cm.tz.cloudcpp.com" @@ -28,6 +30,11 @@ import json import psutil import sys import threading +import threading +try: + from queue import Queue # python3 +except ImportError: + from Queue import Queue # python2 def get_uptime(): return int(time.time() - psutil.boot_time()) @@ -100,7 +107,7 @@ def ip_status(): ip_check = 0 for i in [CU, CT, CM]: try: - socket.create_connection((i, PORBEPORT), timeout=1).close() + socket.create_connection((i, PROBEPORT), timeout=1).close() except: ip_check += 1 if ip_check >= 2: @@ -140,27 +147,38 @@ netSpeed = { def _ping_thread(host, mark, port): lostPacket = 0 - allPacket = 0 - startTime = time.time() + packet_queue = Queue(maxsize=PING_PACKET_HISTORY_LEN) + + IP = host + if host.count(':') < 1: # if not plain ipv6 address, means ipv4 address or hostname + try: + if PROBE_PROTOCOL_PREFER == 'ipv4': + IP = socket.getaddrinfo(host, None, socket.AF_INET)[0][4][0] + else: + IP = socket.getaddrinfo(host, None, socket.AF_INET6)[0][4][0] + except Exception: + pass while True: + if packet_queue.full(): + if packet_queue.get() == 0: + lostPacket -= 1 try: b = timeit.default_timer() - socket.create_connection((host, port), timeout=1).close() + socket.create_connection((IP, port), timeout=1).close() pingTime[mark] = int((timeit.default_timer() - b) * 1000) - except: - lostPacket += 1 - finally: - allPacket += 1 + packet_queue.put(1) + except socket.error as error: + if error.errno == errno.ECONNREFUSED: + pingTime[mark] = int((timeit.default_timer() - b) * 1000) + packet_queue.put(1) + #elif error.errno == errno.ETIMEDOUT: + else: + lostPacket += 1 + packet_queue.put(0) - if allPacket > 100: - lostRate[mark] = float(lostPacket) / allPacket - - endTime = time.time() - if endTime - startTime > 3600: - lostPacket = 0 - allPacket = 0 - startTime = endTime + if packet_queue.qsize() > 30: + lostRate[mark] = float(lostPacket) / packet_queue.qsize() time.sleep(INTERVAL) @@ -191,7 +209,7 @@ def get_realtime_date(): kwargs={ 'host': CU, 'mark': '10010', - 'port': PORBEPORT + 'port': PROBEPORT } ) t2 = threading.Thread( @@ -199,7 +217,7 @@ def get_realtime_date(): kwargs={ 'host': CT, 'mark': '189', - 'port': PORBEPORT + 'port': PROBEPORT } ) t3 = threading.Thread( @@ -207,7 +225,7 @@ def get_realtime_date(): kwargs={ 'host': CM, 'mark': '10086', - 'port': PORBEPORT + 'port': PROBEPORT } ) t4 = threading.Thread(