diff --git a/scripts/ci/locustfile.py b/scripts/ci/locustfile.py index 984b0683c..7715d35cf 100644 --- a/scripts/ci/locustfile.py +++ b/scripts/ci/locustfile.py @@ -1,4 +1,4 @@ -from locust import HttpUser, TaskSet, task, between +from locust import HttpUser, TaskSet, task, between, events import csv import random from collections import defaultdict @@ -66,3 +66,41 @@ class OSRMUser(HttpUser): tasks = [OSRMTasks] wait_time = between(0.01, 0.1) + @events.quitting.add_listener + def _(environment, **kwargs): + def calculate_percentiles(stats, percentiles): + response_times = sorted(stats.get_response_times()) + percentile_values = {} + for percentile in percentiles: + rank = int(len(response_times) * (percentile / 100)) + percentile_values[percentile] = response_times[rank-1] if rank > 0 else 0 + return percentile_values + + nearest_stats = environment.stats.get("/nearest/v1/driving", "GET") + route_stats = environment.stats.get("/route/v1/driving", "GET") + + nearest_percentiles = calculate_percentiles(nearest_stats, [95, 99]) + route_percentiles = calculate_percentiles(route_stats, [95, 99]) + + print("\nAggregated Statistics for /nearest/v1/driving:") + print(f"Request Count: {nearest_stats.num_requests}") + print(f"Failure Count: {nearest_stats.num_failures}") + print(f"Median Response Time: {nearest_stats.median_response_time}") + print(f"Average Response Time: {nearest_stats.avg_response_time}") + print(f"Min Response Time: {nearest_stats.min_response_time}") + print(f"Max Response Time: {nearest_stats.max_response_time}") + print(f"Average Content Size: {nearest_stats.avg_content_length}") + print(f"p95 Response Time: {nearest_percentiles[95]}") + print(f"p99 Response Time: {nearest_percentiles[99]}") + + print("\nAggregated Statistics for /route/v1/driving:") + print(f"Request Count: {route_stats.num_requests}") + print(f"Failure Count: {route_stats.num_failures}") + print(f"Median Response Time: {route_stats.median_response_time}") + print(f"Average Response Time: {route_stats.avg_response_time}") + print(f"Min Response Time: {route_stats.min_response_time}") + print(f"Max Response Time: {route_stats.max_response_time}") + print(f"Average Content Size: {route_stats.avg_content_length}") + print(f"p95 Response Time: {route_percentiles[95]}") + print(f"p99 Response Time: {route_percentiles[99]}") +