-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvultr_speed_test.py
72 lines (58 loc) · 1.98 KB
/
vultr_speed_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/env python
import subprocess
import requests
import json
import sys
from bs4 import BeautifulSoup
from multiprocessing import Pool
target_url = "https://www.vultr.com/faq/"
def get_geo_link():
rsp = requests.get(target_url)
soup = BeautifulSoup(rsp.content)
geo_map = []
for elem in soup.select('#speedtest_v4 > tr'):
all_tds = elem.findAll('td')
geo_location = all_tds[0].text.strip()
ping_url = all_tds[2].findAll("a")[0]['href'].strip()
geo_map.append((geo_location, ping_url))
return geo_map
def fmt_speed(speed):
if speed < 1024:
return "%s B/s" % speed
elif speed < 1024*1024:
return "%s KB/s" % (speed*1.0/1024)
else:
return "%s MB/s" % (speed*1.0/1024/1024)
def speed_test(geo_info):
geo_loc, ping_url = geo_info
output_format = """{
"speed": %{speed_download}
}
"""
cmd = ["curl", "-w", output_format, "-s", "-o", "/dev/null", "-m", "10", ping_url]
# print " ".join(cmd)
output = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].strip()
# print>>sys.stderr, output
data = json.loads(output)
info = (geo_loc, fmt_speed(data["speed"]), data["speed"])
return info
if __name__ == '__main__':
geo_map = get_geo_link()
# pool = Pool(10)
geo_speed = []
print "="*10 + "start speed testing..." + "="*10
for geo_info in geo_map:
print
print "testing [%s] by %s" % (geo_info[0], geo_info[1])
geo_loc, speedstr, speed = speed_test(geo_info)
print "speed to [%s] is %s" % (geo_loc, speedstr)
geo_speed.append((geo_loc, speedstr, speed))
print "="*10 + "end speed testing..." + "="*10
print
print
print
print "+"*20 + "speed rank" + "+"*20
geo_speed.sort(key=lambda x: x[2], reverse=True)
for (geo_loc, speedstr, speed) in geo_speed:
print "[%s]:%s" % (geo_loc, speedstr)
print "+"*20 + "end speed rank" + "+"*20