[tor-commits] [onionperf/master] Split visualizations by public and onion service.

karsten at torproject.org karsten at torproject.org
Sat May 30 13:43:07 UTC 2020


commit dbd7b5040c97f12ca79e23a72a7172696de6f6e1
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Tue May 26 11:37:29 2020 +0200

    Split visualizations by public and onion service.
    
    Fixes #34216.
---
 onionperf/visualization.py | 97 ++++++++++++++++++++++++++--------------------
 1 file changed, 55 insertions(+), 42 deletions(-)

diff --git a/onionperf/visualization.py b/onionperf/visualization.py
index 92727e3..a4b2a47 100644
--- a/onionperf/visualization.py
+++ b/onionperf/visualization.py
@@ -12,6 +12,7 @@ import matplotlib.pyplot as plt
 import pandas as pd
 import seaborn as sns
 import datetime
+import numpy as np
 
 class Visualization(object, metaclass=ABCMeta):
 
@@ -54,6 +55,7 @@ class TGenVisualization(Visualization):
                 for transfer_id, transfer_data in tgen_transfers.items():
                     transfer = {"transfer_id": transfer_id, "label": label,
                                 "filesize_bytes": transfer_data["filesize_bytes"]}
+                    transfer["server"] = "onion" if ".onion:" in transfer_data["endpoint_remote"] else "public"
                     if "elapsed_seconds" in transfer_data:
                         s = transfer_data["elapsed_seconds"]
                         if "first_byte" in s:
@@ -68,64 +70,75 @@ class TGenVisualization(Visualization):
         self.data = pd.DataFrame.from_records(transfers, index="transfer_id")
 
     def __plot_firstbyte_ecdf(self):
-        self.__draw_ecdf(x="time_to_first_byte", hue="label", hue_name="Data set",
-                         data=self.data, title="Time to download first byte",
-                         xlabel="Download time (s)", ylabel="Cumulative Fraction")
+        for server in self.data["server"].unique():
+            self.__draw_ecdf(x="time_to_first_byte", hue="label", hue_name="Data set",
+                             data=self.data[self.data["server"] == server],
+                             title="Time to download first byte from {0} service".format(server),
+                             xlabel="Download time (s)", ylabel="Cumulative Fraction")
 
     def __plot_firstbyte_time(self):
-        for bytes in self.data["filesize_bytes"].unique():
-            self.__draw_timeplot(x="start", y="time_to_first_byte", hue="label", hue_name="Data set",
-                                 data=self.data[self.data["filesize_bytes"]==bytes],
-                                 title="Time to download first of {0} bytes over time".format(bytes),
-                                 xlabel="Download start time", ylabel="Download time (s)")
+        for bytes in np.sort(self.data["filesize_bytes"].unique()):
+            for server in self.data["server"].unique():
+                self.__draw_timeplot(x="start", y="time_to_first_byte", hue="label", hue_name="Data set",
+                                     data=self.data[(self.data["server"] == server) & (self.data["filesize_bytes"] == bytes)],
+                                     title="Time to download first of {0} bytes from {1} service over time".format(bytes, server),
+                                     xlabel="Download start time", ylabel="Download time (s)")
 
     def __plot_lastbyte_ecdf(self):
-        for bytes in self.data["filesize_bytes"].unique():
-            self.__draw_ecdf(x="time_to_last_byte", hue="label", hue_name="Data set",
-                             data=self.data[self.data["filesize_bytes"]==bytes],
-                             title="Time to download last of {0} bytes".format(bytes),
-                             xlabel="Download time (s)", ylabel="Cumulative Fraction")
+        for bytes in np.sort(self.data["filesize_bytes"].unique()):
+            for server in self.data["server"].unique():
+                self.__draw_ecdf(x="time_to_last_byte", hue="label", hue_name="Data set",
+                                 data=self.data[(self.data["server"] == server) & (self.data["filesize_bytes"] == bytes)],
+                                 title="Time to download last of {0} bytes from {1} service".format(bytes, server),
+                                 xlabel="Download time (s)", ylabel="Cumulative Fraction")
 
     def __plot_lastbyte_box(self):
-        for bytes in self.data["filesize_bytes"].unique():
-            self.__draw_boxplot(x="label", y="time_to_last_byte",
-                                data=self.data[self.data["filesize_bytes"]==bytes],
-                                title="Time to download last of {0} bytes".format(bytes),
-                                xlabel="Data set", ylabel="Download time (s)")
+        for bytes in np.sort(self.data["filesize_bytes"].unique()):
+            for server in self.data["server"].unique():
+                self.__draw_boxplot(x="label", y="time_to_last_byte",
+                                    data=self.data[(self.data["server"] == server) & (self.data["filesize_bytes"] == bytes)],
+                                    title="Time to download last of {0} bytes from {1} service".format(bytes, server),
+                                    xlabel="Data set", ylabel="Download time (s)")
 
     def __plot_lastbyte_bar(self):
-        for bytes in self.data["filesize_bytes"].unique():
-            self.__draw_barplot(x="label", y="time_to_last_byte",
-                                data=self.data[self.data["filesize_bytes"]==bytes],
-                                title="Mean time to download last of {0} bytes".format(bytes),
-                                xlabel="Data set", ylabel="Downloads time (s)")
+        for bytes in np.sort(self.data["filesize_bytes"].unique()):
+            for server in self.data["server"].unique():
+                self.__draw_barplot(x="label", y="time_to_last_byte",
+                                    data=self.data[(self.data["server"] == server) & (self.data["filesize_bytes"] == bytes)],
+                                    title="Mean time to download last of {0} bytes from {1} service".format(bytes, server),
+                                    xlabel="Data set", ylabel="Downloads time (s)")
 
     def __plot_lastbyte_time(self):
-        for bytes in self.data["filesize_bytes"].unique():
-            self.__draw_timeplot(x="start", y="time_to_last_byte", hue="label", hue_name="Data set",
-                                 data=self.data[self.data["filesize_bytes"] == bytes],
-                                 title="Time to download last of {0} bytes over time".format(bytes),
-                                 xlabel="Download start time", ylabel="Download time (s)")
+        for bytes in np.sort(self.data["filesize_bytes"].unique()):
+            for server in self.data["server"].unique():
+                self.__draw_timeplot(x="start", y="time_to_last_byte", hue="label", hue_name="Data set",
+                                     data=self.data[(self.data["server"] == server) & (self.data["filesize_bytes"] == bytes)],
+                                     title="Time to download last of {0} bytes from {1} service over time".format(bytes, server),
+                                     xlabel="Download start time", ylabel="Download time (s)")
 
     def __plot_downloads_count(self):
-        for bytes in self.data["filesize_bytes"].unique():
-            self.__draw_countplot(x="label",
-                                 data=self.data[self.data["filesize_bytes"] == bytes],
-                                 xlabel="Data set", ylabel="Downloads completed (#)",
-                                 title="Number of downloads of {0} bytes completed".format(bytes))
+        for bytes in np.sort(self.data["filesize_bytes"].unique()):
+            for server in self.data["server"].unique():
+                self.__draw_countplot(x="label",
+                                     data=self.data[(self.data["server"] == server) & (self.data["filesize_bytes"] == bytes)],
+                                     xlabel="Data set", ylabel="Downloads completed (#)",
+                                     title="Number of downloads of {0} bytes completed from {1} service".format(bytes, server))
 
     def __plot_errors_count(self):
-        if "error_code" in self.data.columns:
-            self.__draw_countplot(x="error_code", hue="label", hue_name="Data set", data=self.data,
-                                  xlabel="Error code", ylabel="Downloads failed (#)",
-                                  title="Number of downloads failed")
+        for server in self.data["server"].unique():
+            if "error_code" in self.data.columns and self.data[self.data["server"] == server]["error_code"].count() > 0:
+                self.__draw_countplot(x="error_code", hue="label", hue_name="Data set",
+                                      data=self.data[self.data["server"] == server],
+                                      xlabel="Error code", ylabel="Downloads failed (#)",
+                                      title="Number of downloads failed from {0} service".format(server))
 
     def __plot_errors_time(self):
-        if "error_code" in self.data.columns:
-            self.__draw_stripplot(x="start", y="error_code", hue="label", hue_name="Data set",
-                                 data = self.data,
-                                 xlabel="Download start time", ylabel="Error code",
-                                 title="Downloads failed over time")
+        for server in self.data["server"].unique():
+            if "error_code" in self.data.columns and self.data[self.data["server"] == server]["error_code"].count() > 0:
+                self.__draw_stripplot(x="start", y="error_code", hue="label", hue_name="Data set",
+                                     data=self.data[self.data["server"] == server],
+                                     xlabel="Download start time", ylabel="Error code",
+                                     title="Downloads failed over time from {0} service".format(server))
 
     def __draw_ecdf(self, x, hue, hue_name, data, title, xlabel, ylabel):
         data = data.dropna(subset=[x])



More information about the tor-commits mailing list