Skip to content
This repository was archived by the owner on Mar 28, 2024. It is now read-only.
Open
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 32 additions & 19 deletions src/netrics/netson.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,22 @@ def update_max_speed(self, measured_down, measured_up):

self.speed_db.update({'test': True})


# function taken from
# https://stackoverflow.com/questions/11264005/using-a-regex-to-match-ip-addresses
def valid_ip(self, address):
"""
Check if a site in self.sites is an IP address
"""
try:
host_bytes = address.split('.')
valid = [int(b) for b in host_bytes]
valid = [b for b in valid if b >=0 and b<=255]
return len(host_bytes) == 4 and len(valid) == 4
except:
return False


def ipquery(self, key="ipquery", run_test=True):
j4 = None
#j6 = None
Expand Down Expand Up @@ -363,6 +379,7 @@ def ping_latency(self, key, run_test):

self.results[key] = {}
for site in sites:

ping_cmd = "ping -i {:.2f} -c {:d} -w {:d} {:s}".format(
0.25, 10, 5, site)

Expand All @@ -372,13 +389,12 @@ def ping_latency(self, key, run_test):
label = site

ping_res[label] = {}

ping_res[label], err = self.popen_exec(ping_cmd)

if len(err) > 0:
print(f"ERROR: {err}")
log.error(err)
self.results[key][label + "_error"] = err.strip()
ping_res[label] = { 'error' : f'{err}' }
error_found = True

if "Name or service not known" in err or \
Expand All @@ -396,7 +412,6 @@ def ping_latency(self, key, run_test):
ping_res[label], re.MULTILINE)[0])
except IndexError:
self.results[key][label + "_error"] = 'Packet Loss IndexError'
ping_res[label] = {'error': 'Packet Loss IndexErorr'}
error_found = True
continue

Expand All @@ -406,10 +421,18 @@ def ping_latency(self, key, run_test):
, ping_res[label])[0]
except IndexError:
self.results[key][label + "_error"] = 'Probe IndexError'
ping_res[label] = {'error': 'Probe IndexErorr'}
error_found = True
continue


try:
ping_ip = re.findall(
'PING.*\((.*)\) \d',
ping_res[label]
)[0]
except IndexError:
self.results[key][label + "_error"] = 'Probe IndexError: Could not find IP'
error_found = True
continue

ping_rtt_ms = [float(v) for v in ping_rtt_ms]

Expand All @@ -418,18 +441,22 @@ def ping_latency(self, key, run_test):
self.results[key][label + "_rtt_max_ms"] = ping_rtt_ms[2]
self.results[key][label + "_rtt_avg_ms"] = ping_rtt_ms[1]
self.results[key][label + "_rtt_mdev_ms"] = ping_rtt_ms[3]
self.results[key][label + "_ip_address"] = ping_ip

if not self.quiet:
print(f'\n --- {label} ping latency (MANDATORY) ---')
print(f'IP Address: {ping_ip}')
print(f'Packet Loss: {ping_pkt_loss}%')
print(f'Average RTT: {ping_rtt_ms[0]} (ms)')
print(f'Minimum RTT: {ping_rtt_ms[1]} (ms)')
print(f'Maximum RTT: {ping_rtt_ms[2]} (ms)')
print(f'RTT Std Dev: {ping_rtt_ms[3]} (ms)')

self.results[key]["error"] = error_found

return ping_res


def last_mile_latency(self, key, run_test):
"""
Method records RTT to earliest node with public IP Address along path
Expand Down Expand Up @@ -693,20 +720,6 @@ def latency_under_load(self, key, run_test, client, port):
self.results[key]['error'] = error_found
return ping_res

# function taken from
# https://stackoverflow.com/questions/11264005/using-a-regex-to-match-ip-addresses
def valid_ip(self, address):
"""
Check if a site in self.sites is an IP address
"""
try:
host_bytes = address.split('.')
valid = [int(b) for b in host_bytes]
valid = [b for b in valid if b >=0 and b<=255]
return len(host_bytes) == 4 and len(valid) == 4
except:
return False


def dns_latency(self, key, run_test):
"""
Expand Down