diff --git a/clients/client-linux.py b/clients/client-linux.py
index 0e5002d..b038267 100755
--- a/clients/client-linux.py
+++ b/clients/client-linux.py
@@ -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)
diff --git a/clients/client-psutil.py b/clients/client-psutil.py
index 0d5cc86..32956bb 100755
--- a/clients/client-psutil.py
+++ b/clients/client-psutil.py
@@ -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)