Commit 29ed0d6e authored by Ubuntu's avatar Ubuntu

Added delay results

parent 8a8c6079
......@@ -3,9 +3,21 @@ Module to calculate RTT
:author: gurnoorsingh (20221024)
"""
import re
import time
import requests
import subprocess
import numpy as np
def myping(host, num=10):
command = f"sudo ping -f -c {num} -W 0.5 {host}"
with subprocess.Popen(command, stdout=subprocess.PIPE, stderr=None, shell=True) as process:
output = process.communicate()[0].decode("utf-8")
results = re.findall(".*min/avg/max/mdev = (.*?) ms", output)[0]
avg_rtt = float(results.split('/')[1])
return int(avg_rtt * 1e6)
def RTT(url):
times = []
......@@ -22,7 +34,9 @@ def RTT(url):
def main():
# url address
url = "http://oregong-algorand-test-1.algorand-testnet.network:4161"
print(RTT(url))
url = "londong-algorand-test-2.algorand-testnet.network"
url = "singaporeg-algorand-test-1.algorand-testnet.network"
print(myping(url))
if __name__ == '__main__':
main()
\ No newline at end of file
RELAYS = [
'r19.algorand-testnet.network:4161', 'relay-virginia-testnet-algorand.algorand-testnet.network:4161', 'oregong-algorand-test-1.algorand-testnet.network:4161', 'singaporeg-algorand-test-1.algorand-testnet.network:4161', 'londong-algorand-test-2.algorand-testnet.network:4161', 'singaporeg-algorand-test-2.algorand-testnet.network:4161', 'relay-switzerland1-testnet-algorand.algorand-testnet.network:80', 'londong-algorand-test-1.algorand-testnet.network:4161']
\ No newline at end of file
"""
Module to get delays between different nodes
:author: gurnoorsingh(20221110)
"""
import re
import os
import json
import subprocess
from constants import RELAYS
from tqdm import tqdm
from txn_to_sender_map import get_txn_receiver_stats
def get_sender_relay():
log_file_path = "/home/azureuser/.algorand/node.log"
command = f"grep OutgoingPeers {log_file_path} | tail -n 1"
with subprocess.Popen(command, stdout=subprocess.PIPE, stderr=None, shell=True) as process:
output = process.communicate()[0].decode("utf-8")
endpoint = json.loads(output)["details"]["OutgoingPeers"][0]["Endpoint"]
return endpoint
def send_txn_and_get_txn_id():
command = "bash /home/azureuser/algorand-topology/scripts/create_txn.sh"
with subprocess.Popen(command, stdout=subprocess.PIPE, stderr=None, shell=True) as process:
output = process.communicate()[0].decode("utf-8")
txn_id = re.findall(".*Signed transaction with txID: ([A-Z0-9]+).*", output)[0]
return txn_id
def filter_logs_by_txn_id(txn_id):
log_file_path = "/home/azureuser/node/data/node.log"
os.system(f"grep {txn_id} {log_file_path} > filtered_logs/data_{txn_id}")
def main():
COUNT = 10
sender_relay = get_sender_relay()
print("sender:", sender_relay)
delays = dict()
for relay in RELAYS:
if relay != sender_relay:
delays[relay] = 0
for _ in tqdm(range(COUNT)):
assert get_sender_relay() == sender_relay
txn_id = send_txn_and_get_txn_id()
filter_logs_by_txn_id(txn_id)
print("txn_id:", txn_id)
receiver_stats = get_txn_receiver_stats(txn_id)
for relay in receiver_stats.keys():
if relay != sender_relay:
delays[relay] += receiver_stats[relay] - receiver_stats[sender_relay]
for relay in RELAYS:
if relay != sender_relay:
delays[relay] /= COUNT
sorted_delays = dict(sorted(delays.items(), key=lambda x: x[1]))
for relay, delay in sorted_delays.items():
print(relay, delay if delay !=0 else 'N/A')
if __name__ == '__main__':
main()
\ No newline at end of file
relay-virginia-testnet-algorand.algorand-testnet.network:4161 N/A
singaporeg-algorand-test-2.algorand-testnet.network:4161 564853.2
r19.algorand-testnet.network:4161 56054838.6
oregong-algorand-test-1.algorand-testnet.network:4161 88953393.2
londong-algorand-test-1.algorand-testnet.network:4161 97196197.3
londong-algorand-test-2.algorand-testnet.network:4161 103101327.5
relay-switzerland1-testnet-algorand.algorand-testnet.network:80 175895236.9
\ No newline at end of file
{'r19.algorand-testnet.network:4161', 'relay-virginia-testnet-algorand.algorand-testnet.network:4161', 'oregong-algorand-test-1.algorand-testnet.network:4161', 'singaporeg-algorand-test-1.algorand-testnet.network:4161', 'londong-algorand-test-2.algorand-testnet.network:4161', 'singaporeg-algorand-test-2.algorand-testnet.network:4161', 'relay-switzerland1-testnet-algorand.algorand-testnet.network:80', 'londong-algorand-test-1.algorand-testnet.network:4161'}
\ No newline at end of file
......@@ -3,7 +3,7 @@
RECEIVER_ADDR=MADR6ILGZJOMAMGWOR7MRMQP35QQO6CVFBX27Z7ILR4U4WIDKMO7G3477E
SENDER_ADDR=RO7RK3WNLEJPYSK7AP3OX75LCN3NNH7VV7OQE7HFNWBPTQ3FOBW74NUC3I
SENDER_SECRET_KEY=dpvglDQSyHCmncqwcqQjji0uhZXt8eWCvGlDBL88r9CLvxVuzVkS/ElfA/br/6sTdtaf9a/dAnzlbYL5w2VwbQ==
ALGOD_ADDR=http://127.0.0.1:33391
ALGOD_ADDR=http://$(cat /home/azureuser/.algorand/algod.net)
ALGOD_TOKEN=19fe428d54999193ab72951ba00ab20d8d32b5d02c291a5bf5d061944d0cd922
python3 /home/azureuser/algorand-topology/create_txn.py -r $RECEIVER_ADDR \
......
......@@ -2,49 +2,56 @@
Module to process log file for received messages from relays
:author: gurnoorsingh (20221024)
"""
import os
import re
import json
from collections import defaultdict
from RTT import RTT
BASE_DIR = "/home/azureuser/node/data"
FILENAME = "node.log"
MSG_RECEIVED_IDENTIFIER = "got a tx group with IDs"
tx_senders_map = defaultdict(lambda: [])
relay_set = set()
with open(os.path.join(BASE_DIR, FILENAME)) as fh:
for line in fh.readlines():
try:
row = json.loads(line)
except:
continue
if row["msg"].startswith(MSG_RECEIVED_IDENTIFIER):
txn_ids_str = re.findall(f".*{MSG_RECEIVED_IDENTIFIER} \[(.*?)\].*", row["msg"])[0]
txn_ids = [x.strip() for x in txn_ids_str.split()]
sender = re.findall(".*rootURL:(.*?)\s.*", row["msg"])[0]
recv_time = int(re.findall(".*at.*?([0-9]+).*", row["msg"])[0])
txn_size = len(re.findall(".*uint8=\[(.*?)\]", row["msg"])[0].split())
# add sender and received time to txn sender map
for txn in txn_ids:
tx_senders_map[txn].append((sender, recv_time, txn_size))
# add sender address to set of relays
relay_set.add(sender)
TXN_ID = "UCPRQGVTATHIFUEUX3ZVJC3FK2W4YLTDOFXEW563ZCAGNLMBZ5HQ"
send_times = []
for k, v in tx_senders_map.items():
if k == TXN_ID:
for sender, recv_time in v:
send_time = recv_time - RTT(f"http://{sender}")//2
print(f"Received time: {recv_time}\nSend time: {send_time}")
send_times.append((sender, send_time))
send_times.sort(key=lambda x: x[1])
print(send_times)
from RTT import myping
def get_txn_receiver_stats(txn_id):
send_time_values = dict()
filename = f"/home/azureuser/algorand-topology/filtered_logs/data_{txn_id}"
MSG_RECEIVED_IDENTIFIER = "got a tx group with IDs"
with open(filename) as fh:
for line in fh.readlines():
try:
row = json.loads(line)
except:
continue
if row["msg"].startswith(MSG_RECEIVED_IDENTIFIER):
txn_ids_str = re.findall(f".*{MSG_RECEIVED_IDENTIFIER} \[(.*?)\].*", row["msg"])[0]
txn_ids = [x.strip() for x in txn_ids_str.split()]
assert txn_id in txn_ids
sender = re.findall(".*rootURL:(.*?)\s.*", row["msg"])[0]
recv_time = int(re.findall(".*at.*?([0-9]+) with data.*", row["msg"])[0])
txn_size = len(re.findall(".*uint8=\[(.*?)\]", row["msg"])[0].split())
try:
send_time = recv_time - myping(f"{sender.split(':')[0]}")//2
send_time_values[sender] = send_time
except Exception as e:
print(e, sender)
return send_time_values
def main():
print(get_txn_receiver_stats("ESSEGXUEITTMHO4SI37W6BNBUYHHQQE4YNORJ7TEA5VX6ISJDWAA"))
if __name__ == '__main__':
main()
# TXN_ID = "F7CCM55MJB7FBW5G37MKQLF34Z75M3ZKUDTR7STZC2YHFO6YQOUA"
# send_times = []
# for k, v in tx_senders_map.items():
# if k == TXN_ID:
# for sender, recv_time in v:
# send_time = recv_time - RTT(f"http://{sender}")//2
# print(f"Received time: {recv_time}\nSend time: {send_time}")
# send_times.append((sender, send_time))
# send_times.sort(key=lambda x: x[1])
# print(send_times)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment