Skip to content

Add transmitted vs received statistics #16

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all 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
28 changes: 23 additions & 5 deletions tcp_latency/tcp_latency.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ def measure_latency(
last_latency_point = latency_point(
host=host, port=port, timeout=timeout,
)

latency_points.append(last_latency_point)

if human_output:
if i == 0:
print('tcp-latency {}'.format(host))
Expand All @@ -85,14 +88,14 @@ def measure_latency(
)
if i == len(range(runs))-1:
print(f'--- {host} tcp-latency statistics ---')
print(f'{i+1} packets transmitted')
if latency_points:
statistics = generate_statistics(latency_points)
print(statistics)
times = [point for point in latency_points if point]
if times:
print(
f'rtt min/avg/max = {min(latency_points)}/{mean(latency_points)}/{max(latency_points)} ms', # noqa: E501
f'rtt min/avg/max = {min(times)}/{mean(times)}/{max(times)} ms', # noqa: E501
)

latency_points.append(last_latency_point)

return latency_points


Expand Down Expand Up @@ -138,6 +141,21 @@ def _human_output(host: str, port: int, timeout: int, latency_point: float, seq_
print(f'{host}: tcp seq={seq_number} port={port} timeout={timeout} failed')


def generate_statistics(latency_point_list):
""" Build the statistics string

Args:
latency_point_list: list of latency points
Returns:
A string indicating some metrics of the latency points
"""
transmitted = len(latency_point_list)
received = len([point for point in latency_point_list if point])
loss = 100 - (received / transmitted * 100)

return f'{transmitted} packets transmitted, {received} packets received, {loss}% packet loss'


def _main():
args = _parse_arguments()
measure_latency(
Expand Down
28 changes: 26 additions & 2 deletions tests/tcp_latency_test.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from tcp_latency import latency_point
from tcp_latency import measure_latency
from tcp_latency import latency_point, measure_latency, generate_statistics


def test_latencyPoint_unreachable_host():
Expand Down Expand Up @@ -31,3 +30,28 @@ def test_tcpLatency_valid_list_return():

for element in latency_run:
assert isinstance(element, float) or None


def test_generate_statistics():
latency_points = [1.0, None, 1.0, 1.0, None]

statistics_string = generate_statistics(latency_points)

assert statistics_string == '5 packets transmitted, 3 packets received, 40.0% packet loss'


def test_generate_statistics_with_100_loss():
latency_points = [None, None, None, None, None]

statistics_string = generate_statistics(latency_points)

assert statistics_string == '5 packets transmitted, 0 packets received, 100.0% packet loss'


def test_generate_statistics_with_0_loss():
latency_points = [1.0, 2.0, 3.0, 4.0, 5.0]

statistics_string = generate_statistics(latency_points)

assert statistics_string == '5 packets transmitted, 5 packets received, 0.0% packet loss'