54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
import requests
|
|
import datetime
|
|
import model
|
|
import config
|
|
|
|
|
|
def get_servers():
|
|
js = config.read_json()
|
|
_servers = js["servers"]
|
|
servers_dic = {}
|
|
for s in _servers:
|
|
servers_dic[s] = {}
|
|
servers_dic[s]["name"] = s
|
|
servers_dic[s]["url"] = _servers[s]["url"]
|
|
return servers_dic
|
|
|
|
|
|
# file_size if byte
|
|
# longest_time seconds
|
|
def download_file(chunk_size=4 * 1024, file_size=100 * 1024 * 1024, longest_time=60):
|
|
servers = get_servers()
|
|
for server_name in servers:
|
|
server = servers[server_name]
|
|
url = server["url"]
|
|
server_name = server["name"]
|
|
chunk_read = 0
|
|
s_time = datetime.datetime.now()
|
|
duration = longest_time
|
|
try:
|
|
with requests.get(url, stream=True, timeout=longest_time) as r:
|
|
for chunk in r.iter_content(chunk_size):
|
|
if chunk:
|
|
chunk_read += len(chunk)
|
|
e_time = datetime.datetime.now()
|
|
duration = (e_time - s_time).total_seconds()
|
|
if chunk_read >= file_size:
|
|
break
|
|
if duration >= longest_time:
|
|
print(
|
|
"{server} longer than {longest_time} seconds. Stopped.".format(
|
|
longest_time=longest_time, server=server_name
|
|
)
|
|
)
|
|
break
|
|
speed = chunk_read / duration / 1024 / 1024 * 8 # mega bit
|
|
model.add_record(server_name, speed)
|
|
print("{server}:{speed} Mbit/s".format(server=server_name, speed=speed))
|
|
except requests.exceptions.Timeout as e:
|
|
print(
|
|
"timeout before wait {timeout} seconds. Error:{err}".format(
|
|
err=str(e), timeout=longest_time
|
|
)
|
|
)
|