Last active
October 3, 2019 18:00
-
-
Save menangen/31b8694983a1326a884b1e03f5ad7b34 to your computer and use it in GitHub Desktop.
Python Async Ping subprocess
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Austria: 40ms | |
Smolensk: 20ms | |
Sofia Bulgaria: 50ms | |
Tambov: 24ms | |
Moscow MTS: 14ms | |
Yandex Cloud: 17ms | |
Novosibirsk: 65ms | |
Yaroslavl: 19ms | |
Krasnodar: 37ms | |
Minsk: 54ms | |
Finland GCE: 0ms | |
Rostov: 38ms | |
Samara: 28ms | |
Ekaterinburg: 42ms | |
Germany GCE: 32ms | |
Budapest Hungary: 31ms | |
Novosib: 65ms | |
Buharest Romania: 43ms | |
Zurih: 38ms | |
Seoul: 280ms |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"Austria": ["aws.at", "sos-at-vie-1.exo.io", "eth0.store-front016.vie1.exoscale.net", "eth0.store-front015.vie1.exoscale.net", "eth0.db-proxy005.vie1.exoscale.net", "62.99.130.186"], | |
"Sofia Bulgaria": ["sos-bg-sof-1.exo.io", "194.182.176.76", "eth0.store-front073.sof1.exoscale.net", "lo.db-proxy009.sof1.exoscale.net", "lo.kube-master009.sof1.exoscale.net"], | |
"Smolensk": ["mannet.ane4k.in", "ns2.mannet.ru", "smolensk.speedtest.rt.ru", "91.203.178.17"], | |
"Kursk": ["speedtest.kursk.ertelecom.ru"], | |
"Belgorod": ["speedtest.31stk.ru"], | |
"Orel": ["speedtest1.orel.beeline.ru"], | |
"Lipetsk": ["188.235.104.179"], | |
"Tambov": ["kolovatoff.ru", "odb.tambov.gov.ru", "nikitin.tambov.ru"], | |
"Voronezh": ["109.195.54.187"], | |
"Saratov": ["srt1.speedtest.corbina.net", "speedtest.saratov.ertelecom.ru"], | |
"Novosibirsk": ["iaas.nsk.cloud.mts.ru", "vb.nsk.cloud.mts.ru"], | |
"Moscow MTS": ["176.118.28.1", "213.108.129.31", "cp.cloud.mts.by", "178.159.253.1"], | |
"Yaroslavl MTS": ["vb.spb.cloud.mts.ru"], | |
"SPB": ["92.53.68.204", "141.8.193.216", "5.3.5.17"], | |
"Tver": ["speedtest.tver.ertelecom.ru"], | |
"Kostroma": ["kostroma.speedtest.rt.ru"], | |
"Yandex Cloud": ["84.201.145.195", "84.201.146.2"], | |
"Moscow": ["185.22.234.115", "188.122.82.53"], | |
"Minsk": ["ns1.internet.mts.by", "ns2.internet.mts.by", "internet.velcom.by","217.21.54.173", "217.21.60.2", "217.21.60.1"], | |
"Kiev": ["176.37.49.53", "77.120.60.195"], | |
"N-Novgorod": ["dns2.ertelecom.ru"], | |
"Krasnodar": ["85.175.4.251", "77.233.10.37"], | |
"Rostov": ["speedtest.di-dk.ru", "rnd-speedtest.corbina.net","77.233.10.37", "213.138.77.17", "st.rostov.ertelecom.ru", "87.117.3.121", "speedtest1.rnd.beeline.ru"], | |
"Astrahan": ["213.80.166.5", "www.astrg.ru"], | |
"Yaroslavl": ["speedtest.yar.ertelecom.ru", "176.214.79.191", "185.59.138.230"], | |
"Samara": ["46.20.67.17"], | |
"Ekaterinburg": ["213.87.75.162"], | |
"Krasnoyarsk": ["speedtest.krk.ru", "cctv.krsk.ertelecom.ru"], | |
"Novosib": ["185.59.139.20", "176.118.30.218"], | |
"Omsk": ["omsk1.speedtest.corbina.net"], | |
"Arhangelsk": ["arhangelsk.speedtest.rt.ru"], | |
"Germany GCE": ["35.246.226.21", "35.246.226.2"], | |
"Finland GCE": ["35.228.81.190", "35.228.81.9", "35.228.82.1"], | |
"Budapest Hungary": ["www.gts.hu", "213.181.208.240", "91.219.236.1", "91.219.236.2"], | |
"Egypt": ["41.187.113.18"], | |
"Seoul": ["121.139.218.165", "121.139.218.1", "121.139.218.3"], | |
"Buharest Romania": ["nxdata.ro", "85.204.49.4", "85.204.49.1", "85.204.49.17", "185.105.5.100", "185.105.5.1"], | |
"Zurih": ["34.65.230.2", "34.65.230.17"], | |
"Perm": ["79.141.48.1", "212.33.226.65"], | |
"Kurgan": ["speedtest1.kurgan.beeline.ru"], | |
"Stavropol": ["stavropol-speedtest.corbina.net", "speedtest1.stv.beeline.ru"], | |
"Sochi": ["speed2.bisv.ru", "sochi-speedtest.corbina.net","speedtest1.sch.beeline.ru"], | |
"Warsaw": ["waw.as16276.ovh", "72.247.182.18", "72.247.182.15"], | |
"Praga": ["download.superhosting.cz"], | |
"Romania Buharest": ["nxdata.ro", "85.204.49.17", "188.172.254.18", "185.105.5.100"], | |
"London": ["108.61.196.100"], | |
"France Paris": ["rds.eu-west-3.amazonaws.com", "compute.P19.cloud.ovh.net"], | |
"France Marseille": ["40.101.92.8", "83.156.122.1", "83.156.122.80", "88.179.19.78", "sl-01-mrs.fr.seacomnet.com"], | |
"France Strasburg": ["164.132.96.83", "compute.sbg1.cloud.ovh.net", "compute.sbg4.cloud.ovh.net", "sbg.as16276.ovh"], | |
"France Gra": ["gra.as16276.ovh"], | |
"France Rbx": ["rbx.as16276.ovh"], | |
"Milan": ["193.58.239.1", "speed.speedymilan.net", "speedtest.networkgames.eu", "ookla-mil.seeweb.it"], | |
"AWS Stockholm": ["rds.eu-north-1.amazonaws.com"] | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from platform import system | |
from json import load | |
from os import path | |
import signal | |
import asyncio | |
import re | |
dirname, filename = path.split(path.abspath(__file__)) | |
min_pattern = re.compile("min") | |
ms_pattern = re.compile("\d+") | |
result = {} | |
def get_hosts(): | |
with open(f"{dirname}/hosts.json", "r") as f: | |
try: | |
zones = load(f) | |
except: | |
print("JSON parse error") | |
hosts_list = [] | |
for location, hosts in zones.items(): | |
for host in hosts: | |
hosts_list.append({"area": location, "host": host}) | |
return hosts_list | |
async def ping(host, p): | |
city = host.get("area") | |
node = host.get("host") | |
shell = f'ping {p} {node}' | |
proc = await asyncio.create_subprocess_shell( | |
shell, | |
stdout=asyncio.subprocess.PIPE, | |
stderr=asyncio.subprocess.PIPE) | |
stdout, stderr = await proc.communicate() | |
# code = proc.returncode | |
data = stdout or stderr | |
text = data.decode() | |
# print(text) | |
ping_line = min_pattern.search(text) | |
if ping_line: | |
start, end = ping_line.span() | |
line = text[start:] | |
# print(line) | |
ms = ms_pattern.search(line) | |
start, end = ms.span() | |
value = int(line[start:end]) | |
print(f'[ping {city} | {value} ms]') | |
old_value = result.get(city) | |
if old_value: | |
value = min(old_value, value) | |
result[city] = value | |
else: | |
print(f"Problem with {node}") | |
async def main(p): | |
hosts = get_hosts() | |
# print(hosts) | |
tasks = [ | |
ping(host, p) for host in hosts | |
] | |
await asyncio.gather(*tasks) | |
if __name__ == '__main__': | |
name = system() | |
linux = name == "Linux" | |
print(f"{name}: Creating event loop...") | |
loop = asyncio.get_event_loop() | |
def ask_exit(): | |
print("***** Exit signal") | |
loop.stop() | |
for signame in {'SIGINT', 'SIGTERM'}: | |
loop.add_signal_handler(getattr(signal, signame), ask_exit) | |
params = "-c2 -w2" if linux else "-c2 -i 1 -t 2" | |
asyncio.run(main(params)) | |
print("==============\n\n") | |
for location, ms in result.items(): | |
print(f"\t{location}: {ms}ms") |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Smolensk: 30ms | |
Kursk: 42ms | |
Orel: 41ms | |
Austria: 88ms | |
Belgorod: 51ms | |
Lipetsk: 43ms | |
Tambov: 46ms | |
Voronezh: 48ms | |
Sofia Bulgaria: 101ms | |
Moscow MTS: 37ms | |
Saratov: 52ms | |
Yaroslavl MTS: 45ms | |
SPB: 45ms | |
Tver: 39ms | |
Yandex Cloud: 38ms | |
Novosibirsk: 85ms | |
Moscow: 35ms | |
Kostroma: 57ms | |
Minsk: 47ms | |
Kiev: 55ms | |
N-Novgorod: 40ms | |
Krasnodar: 54ms | |
Rostov: 58ms | |
Yaroslavl: 41ms | |
Astrahan: 57ms | |
Samara: 51ms | |
Ekaterinburg: 70ms | |
Krasnoyarsk: 87ms | |
Arhangelsk: 63ms | |
Finland GCE: 53ms | |
Novosib: 85ms | |
Omsk: 76ms | |
Germany GCE: 85ms | |
Budapest Hungary: 83ms | |
Egypt: 124ms | |
Buharest Romania: 102ms | |
Perm: 44ms | |
Kurgan: 64ms | |
Sochi: 69ms | |
Stavropol: 73ms | |
Zurih: 86ms | |
Praga: 82ms | |
Warsaw: 95ms | |
Budapest: 84ms | |
London: 83ms | |
Romania Buharest: 101ms | |
France Marseille: 92ms | |
France Strasburg: 76ms | |
France Gra: 83ms | |
Milan: 82ms | |
France Rbx: 86ms | |
Seoul: 336ms | |
France Paris: 80ms | |
AWS Stockholm: 96ms |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment