initial scp test
This commit is contained in:
parent
92ed6ffb92
commit
ad28ddaa63
|
@ -0,0 +1,3 @@
|
|||
download.png
|
||||
test.png
|
||||
.idea
|
|
@ -0,0 +1,167 @@
|
|||
"""
|
||||
script to do a basic holistic test of the cowmesh network,
|
||||
testing internet connection speed, and transfer speed,
|
||||
at and between all nodes in the mesh
|
||||
"""
|
||||
import os
|
||||
import time
|
||||
import asyncio, asyncssh, sys
|
||||
import subprocess
|
||||
|
||||
|
||||
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__))
|
||||
test_img_path = os.path.join(PROJECT_PATH, "test.png")
|
||||
|
||||
|
||||
node_dict = {
|
||||
"jagga-nuc": {
|
||||
"ip": "10.56.10.247",
|
||||
"user": "cow",
|
||||
"node_path": "/datadrive/data/cowmesh-network-test"
|
||||
},
|
||||
"redcottage-pi": {
|
||||
"ip": "10.56.148.122",
|
||||
"user": "admin",
|
||||
"node_path": "/home/admin/cowmesh-network-test"
|
||||
},
|
||||
"newgazebo-pi": {
|
||||
"ip": "10.56.11.111",
|
||||
"user": "pi",
|
||||
"node_path": "/home/pi/cowmesh-network-test"
|
||||
},
|
||||
}
|
||||
|
||||
# url for downloading test.png from the internet
|
||||
internet_url = "https://canalswans.commoninternet.net/test.png"
|
||||
|
||||
# boolean to prepare test, or just run it
|
||||
PREPARE_TEST = False
|
||||
|
||||
if PREPARE_TEST:
|
||||
# copy image to internet
|
||||
print("COPYING TEST IMG TO INTERNET DOWNLOADABLE LOCATION")
|
||||
internet_scp_cmd = "scp -i ~/.ssh/do_rsa2 {} root@canalswans.commoninternet.net:/srv/canalswans.commoninternet.net/test.png".format(test_img_path)
|
||||
os.system(internet_scp_cmd)
|
||||
|
||||
# first put the image on every node without testing the time (so that the test is prepared to run)
|
||||
for name, from_node_vals in node_dict.items():
|
||||
print("PREPARING NODE {}".format(name))
|
||||
ip = from_node_vals["ip"]
|
||||
dir_path = from_node_vals["node_path"]
|
||||
file_path = os.path.join(dir_path, "test.png")
|
||||
user = from_node_vals["user"]
|
||||
mkdir_cmd = "ssh {user}@{ip} 'mkdir -p {dir_path}'".format(user=user, ip=ip, dir_path=dir_path)
|
||||
os.system(mkdir_cmd)
|
||||
scp_cmd = "scp {test_img_path} {user}@{ip}:{file_path}".format(
|
||||
test_img_path=test_img_path,
|
||||
ip=ip,
|
||||
user=user,
|
||||
file_path=file_path
|
||||
)
|
||||
os.system(scp_cmd)
|
||||
|
||||
results = {}
|
||||
|
||||
async def run_test():
|
||||
# run the test on each node
|
||||
for from_name, from_node_vals in node_dict.items():
|
||||
from_ip = from_node_vals["ip"]
|
||||
from_dir_path = from_node_vals["node_path"]
|
||||
from_file_path = os.path.join(from_dir_path, "test.png")
|
||||
from_user = from_node_vals["user"]
|
||||
for to_name, to_node_vals in node_dict.items():
|
||||
if from_name == to_name:
|
||||
print("skip self")
|
||||
continue
|
||||
|
||||
print("** running test.png transfer test from {} to {}".format(from_name, to_name))
|
||||
|
||||
to_user = to_node_vals["user"]
|
||||
to_ip = to_node_vals["ip"]
|
||||
to_dir_path = to_node_vals["node_path"]
|
||||
to_file_path = os.path.join(to_dir_path, "download.png")
|
||||
|
||||
async with asyncssh.connect(from_ip, username=from_user) as conn:
|
||||
|
||||
scp_cmd = "scp -i {key_path} {from_file_path} {to_user}@{to_ip}:{to_file_path}".format(
|
||||
key_path="$HOME/.ssh/janastu",
|
||||
to_user=to_user,
|
||||
to_ip=to_ip,
|
||||
to_file_path=to_file_path,
|
||||
from_file_path=from_file_path
|
||||
)
|
||||
|
||||
print(scp_cmd)
|
||||
|
||||
start = time.time()
|
||||
result = await conn.run(scp_cmd)
|
||||
|
||||
if result.exit_status == 0:
|
||||
print(result.stdout, end='')
|
||||
end = time.time()
|
||||
elapsed = (end - start)
|
||||
result_key = "{}->{}".format(from_name, to_name)
|
||||
print("{}: {} seconds".format(result_key, elapsed))
|
||||
results[result_key] = elapsed
|
||||
else:
|
||||
print(result.stderr, end='', file=sys.stderr)
|
||||
print('Program exited with status %d' % result.exit_status,
|
||||
file=sys.stderr)
|
||||
results[result_key] = "error: {}".format(result.stderr)
|
||||
return
|
||||
|
||||
# scp_with_time_cmd = "set -e; /usr/bin/time -f '%e' {}".format(scp_cmd)
|
||||
# print("running: {}".format(scp_with_time_cmd))
|
||||
|
||||
|
||||
def run_laptop_test():
|
||||
from_name = "laptop"
|
||||
# also measure transfers from laptop
|
||||
for to_name, to_node_vals in node_dict.items():
|
||||
print("** running test.png transfer test from laptop to {}".format(to_name))
|
||||
|
||||
to_user = to_node_vals["user"]
|
||||
to_ip = to_node_vals["ip"]
|
||||
to_dir_path = to_node_vals["node_path"]
|
||||
to_file_path = os.path.join(to_dir_path, "download.png")
|
||||
|
||||
scp_cmd = "scp -i {key_path} {from_file_path} {to_user}@{to_ip}:{to_file_path}".format(
|
||||
key_path="$HOME/.ssh/janastu",
|
||||
to_user=to_user,
|
||||
to_ip=to_ip,
|
||||
to_file_path=to_file_path,
|
||||
from_file_path=test_img_path
|
||||
)
|
||||
|
||||
print(scp_cmd)
|
||||
|
||||
start = time.time()
|
||||
result = subprocess.run(scp_cmd, shell=True)
|
||||
|
||||
if result.returncode == 0:
|
||||
end = time.time()
|
||||
print("stdout: {}".format(result.stdout))
|
||||
elapsed = (end - start)
|
||||
result_key = "{}->{}".format(from_name, to_name)
|
||||
print("{}: {} seconds".format(result_key, elapsed))
|
||||
results[result_key] = elapsed
|
||||
else:
|
||||
print("stderr: {}".format(result.stderr))
|
||||
print('Program exited with status %d' % result.returncode,
|
||||
file=sys.stderr)
|
||||
results[result_key] = "error: {}".format(result.stderr)
|
||||
return
|
||||
|
||||
|
||||
try:
|
||||
asyncio.get_event_loop().run_until_complete(run_test())
|
||||
run_laptop_test()
|
||||
|
||||
print("** final results **")
|
||||
file_size = 13476
|
||||
for test_name, result in results.items():
|
||||
speed = file_size / float(result) / 1000.0
|
||||
print("{}: {:.2f} seconds, {:.2f} mbps".format(test_name, result, speed))
|
||||
|
||||
except (OSError, asyncssh.Error) as exc:
|
||||
sys.exit('SSH connection failed: ' + str(exc))
|
|
@ -0,0 +1,7 @@
|
|||
import numpy
|
||||
from PIL import Image
|
||||
|
||||
imsize = 2000
|
||||
imarray = numpy.random.rand(imsize,imsize,3) * 255
|
||||
im = Image.fromarray(imarray.astype('uint8')).convert('RGBA')
|
||||
im.save('test.png')
|
Loading…
Reference in New Issue