[tor-commits] [metrics-web/master] Drop filesize parameter from torperf failures graph.

karsten at torproject.org karsten at torproject.org
Thu Jun 25 19:39:54 UTC 2020


commit 0b246ad078e4b548041ea9ef49089c12c3625fdd
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Thu Jun 25 19:53:28 2020 +0200

    Drop filesize parameter from torperf failures graph.
    
    Implements tpo/metrics/website#40001.
---
 src/main/R/rserver/rserve-init.R                   | 27 ++++-----------
 .../torproject/metrics/stats/onionperf/Main.java   | 19 ++++-------
 src/main/resources/web/json/metrics.json           |  3 +-
 src/main/resources/web/jsps/stats.jsp              |  3 +-
 src/main/sql/onionperf/init-onionperf.sql          | 38 ++--------------------
 5 files changed, 19 insertions(+), 71 deletions(-)

diff --git a/src/main/R/rserver/rserve-init.R b/src/main/R/rserver/rserve-init.R
index 3ad89ce..e475e95 100644
--- a/src/main/R/rserver/rserve-init.R
+++ b/src/main/R/rserver/rserve-init.R
@@ -611,36 +611,26 @@ plot_torperf <- function(start_p, end_p, server_p, filesize_p, path_p) {
 }
 
 prepare_torperf_failures <- function(start_p = NULL, end_p = NULL,
-    server_p = NULL, filesize_p = NULL) {
-  read_csv(file = paste(stats_dir, "torperf-1.1.csv", sep = ""),
+    server_p = NULL) {
+  read_csv(file = paste(stats_dir, "onionperf-failures.csv", sep = ""),
       col_types = cols(
         date = col_date(format = ""),
-        filesize = col_double(),
         source = col_character(),
         server = col_character(),
-        q1 = col_skip(),
-        md = col_skip(),
-        q3 = col_skip(),
         timeouts = col_double(),
         failures = col_double(),
         requests = col_double())) %>%
     filter(if (!is.null(start_p)) date >= as.Date(start_p) else TRUE) %>%
     filter(if (!is.null(end_p)) date <= as.Date(end_p) else TRUE) %>%
-    filter(if (!is.null(filesize_p))
-        filesize == ifelse(filesize_p == "50kb", 50 * 1024,
-        ifelse(filesize_p == "1mb", 1024 * 1024, 5 * 1024 * 1024)) else
-        TRUE) %>%
     filter(if (!is.null(server_p)) server == server_p else TRUE) %>%
     filter(requests > 0) %>%
-    transmute(date, filesize, source, server, timeouts = timeouts / requests,
+    transmute(date, source, server, timeouts = timeouts / requests,
         failures = failures / requests)
 }
 
-plot_torperf_failures <- function(start_p, end_p, server_p, filesize_p,
-    path_p) {
-  prepare_torperf_failures(start_p, end_p, server_p, filesize_p) %>%
-    filter(source != "") %>%
-    gather(variable, value, -c(date, filesize, source, server)) %>%
+plot_torperf_failures <- function(start_p, end_p, server_p, path_p) {
+  prepare_torperf_failures(start_p, end_p, server_p) %>%
+    gather(variable, value, -c(date, source, server)) %>%
     mutate(variable = factor(variable, levels = c("timeouts", "failures"),
       labels = c("Timeouts", "Failures"))) %>%
     ggplot(aes(x = date, y = value, colour = source)) +
@@ -650,10 +640,7 @@ plot_torperf_failures <- function(start_p, end_p, server_p, filesize_p,
     scale_y_continuous(name = "", labels = percent, limits = c(0, NA)) +
     scale_colour_hue(name = "Source") +
     facet_grid(variable ~ .) +
-    ggtitle(paste("Timeouts and failures of",
-        ifelse(filesize_p == "50kb", "50 KiB",
-        ifelse(filesize_p == "1mb", "1 MiB", "5 MiB")),
-        "requests to", server_p, "server")) +
+    ggtitle(paste("Timeouts and failures of requests to", server_p, "server")) +
     labs(caption = copyright_notice) +
     theme(legend.position = "top")
   ggsave(filename = path_p, width = 8, height = 5, dpi = 150)
diff --git a/src/main/java/org/torproject/metrics/stats/onionperf/Main.java b/src/main/java/org/torproject/metrics/stats/onionperf/Main.java
index 02fa08b..5cbd518 100644
--- a/src/main/java/org/torproject/metrics/stats/onionperf/Main.java
+++ b/src/main/java/org/torproject/metrics/stats/onionperf/Main.java
@@ -49,8 +49,8 @@ public class Main {
     writeStatistics(
         new File(baseDir, "stats/onionperf-including-partials.csv").toPath(),
         queryOnionperfIncludingPartials(connection));
-    writeStatistics(new File(baseDir, "stats/torperf-1.1.csv").toPath(),
-        queryOnionPerf(connection));
+    writeStatistics(new File(baseDir, "stats/onionperf-failures.csv").toPath(),
+        queryOnionperfFailures(connection));
     writeStatistics(new File(baseDir, "stats/buildtimes.csv").toPath(),
         queryBuildTimes(connection));
     writeStatistics(new File(baseDir, "stats/latencies.csv").toPath(),
@@ -281,26 +281,21 @@ public class Main {
     return statistics;
   }
 
-  static List<String> queryOnionPerf(Connection connection)
+  static List<String> queryOnionperfFailures(Connection connection)
       throws SQLException {
     logger.info("Querying timeout and failure statistics from database.");
     List<String> statistics = new ArrayList<>();
-    statistics
-        .add("date,filesize,source,server,q1,md,q3,timeouts,failures,requests");
+    statistics.add("date,source,server,timeouts,failures,requests");
     Statement st = connection.createStatement();
-    String queryString = "SELECT date, filesize, source, server, q1, md, q3, "
-        + "timeouts, failures, requests FROM onionperf";
+    String queryString = "SELECT date, source, server, timeouts, failures, "
+        + "requests FROM onionperf_failures";
     DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
     try (ResultSet rs = st.executeQuery(queryString)) {
       while (rs.next()) {
-        statistics.add(String.format("%s,%d,%s,%s,%.0f,%.0f,%.0f,%d,%d,%d",
+        statistics.add(String.format("%s,%s,%s,%d,%d,%d",
             dateFormat.format(rs.getDate("date")),
-            rs.getInt("filesize"),
             getStringFromResultSet(rs, "source"),
             getStringFromResultSet(rs, "server"),
-            getDoubleFromResultSet(rs, "q1"),
-            getDoubleFromResultSet(rs, "md"),
-            getDoubleFromResultSet(rs, "q3"),
             rs.getInt("timeouts"),
             rs.getInt("failures"),
             rs.getInt("requests")));
diff --git a/src/main/resources/web/json/metrics.json b/src/main/resources/web/json/metrics.json
index f2b36a5..4735359 100644
--- a/src/main/resources/web/json/metrics.json
+++ b/src/main/resources/web/json/metrics.json
@@ -291,8 +291,7 @@
     "parameters": [
       "start",
       "end",
-      "server",
-      "filesize"
+      "server"
     ]
   },
   {
diff --git a/src/main/resources/web/jsps/stats.jsp b/src/main/resources/web/jsps/stats.jsp
index ad6c566..37e5bbb 100644
--- a/src/main/resources/web/jsps/stats.jsp
+++ b/src/main/resources/web/jsps/stats.jsp
@@ -57,6 +57,7 @@ https://metrics.torproject.org/identifier.csv
 <li><b>December 18, 2019:</b> Added <a href="#bridgedb-transport">BridgeDB requests by requested transport</a> and <a href="#bridgedb-distributor">BridgeDB requests by distributor</a> graphs.</li>
 <li><b>May 24, 2020:</b> Included version 3 onion service measurements in <a href="#torperf">Time to download files over Tor</a>, <a href="#torperf-failures">Timeouts and failures of downloading files over Tor</a>, <a href="#onionperf-buildtimes">Circuit build times</a>, <a href="#onionperf-latencies">Circuit round-trip latencies</a> graphs.</li>
 <li><b>May 24, 2020:</b> Included partial downloads of larger file sizes in <a href="#torperf">Time to download files over Tor</a> graph.</li>
+<li><b>June 25, 2020:</b> Removed filesize parameter from <a href="#torperf-failures">Timeouts and failures of downloading files over Tor</a> graphs.</li>
 </ul>
 
 </div>
@@ -576,14 +577,12 @@ Performance <a href="#performance" name="performance" class="anchor">#</a></h2>
 <li><b>start:</b> First UTC date (YYYY-MM-DD) to include in the file.</li>
 <li><b>end:</b> Last UTC date (YYYY-MM-DD) to include in the file.</li>
 <li><b>server:</b> Either <b>"public"</b> for requests to a server on the public internet, or <b>"onion"</b> for requests to an onion server.</li>
-<li><b>filesize:</b> Size of the downloaded file in bytes, with pre-defined possible values: <b>"50kb"</b>, <b>"1mb"</b>, or <b>"5mb"</b>.</li>
 </ul>
 
 <h4>Columns</h4>
 
 <ul>
 <li><b>date:</b> UTC date (YYYY-MM-DD) when download performance was measured.</li>
-<li><b>filesize:</b> Size of the downloaded file in bytes.</li>
 <li><b>source:</b> Name of the OnionPerf or Torperf service performing measurements.</li>
 <li><b>server:</b> Either <b>"public"</b> if the request was made to a server on the public internet, or <b>"onion"</b> if the request was made to an onion server.</li>
 <li><b>timeouts:</b> Fraction of requests that timed out when attempting to download the static file over Tor.</li>
diff --git a/src/main/sql/onionperf/init-onionperf.sql b/src/main/sql/onionperf/init-onionperf.sql
index ebe9f77..7c8a859 100644
--- a/src/main/sql/onionperf/init-onionperf.sql
+++ b/src/main/sql/onionperf/init-onionperf.sql
@@ -110,43 +110,11 @@ SELECT date,
 FROM grouped
 ORDER BY date, filesize, source, server;
 
-CREATE OR REPLACE VIEW onionperf AS
-SELECT date,
-  filesize,
-  source,
-  server,
-  CASE WHEN q IS NULL THEN NULL ELSE q[1] END AS q1,
-  CASE WHEN q IS NULL THEN NULL ELSE q[2] END AS md,
-  CASE WHEN q IS NULL THEN NULL ELSE q[3] END AS q3,
-  timeouts,
-  failures,
-  requests
-FROM (
+CREATE OR REPLACE VIEW onionperf_failures AS
 SELECT DATE(start) AS date,
-  filesize,
   source,
   CASE WHEN endpointremote LIKE '%.onion:%' THEN 'onion'
     ELSE 'public' END AS server,
-  CASE WHEN COUNT(*) > 0 THEN
-    PERCENTILE_CONT(ARRAY[0.25,0.5,0.75]) WITHIN GROUP(ORDER BY datacomplete)
-    ELSE NULL END AS q,
-  COUNT(CASE WHEN didtimeout OR datacomplete < 1 THEN 1 ELSE NULL END)
-    AS timeouts,
-  COUNT(CASE WHEN NOT didtimeout AND datacomplete >= 1
-    AND readbytes < filesize THEN 1 ELSE NULL END) AS failures,
-  COUNT(*) AS requests
-FROM measurements
-WHERE DATE(start) < current_date - 1
-GROUP BY date, filesize, source, server
-UNION
-SELECT DATE(start) AS date,
-  filesize,
-  '' AS source,
-  CASE WHEN endpointremote LIKE '%.onion:%' THEN 'onion'
-    ELSE 'public' END AS server,
-  CASE WHEN COUNT(*) > 0 THEN
-    PERCENTILE_CONT(ARRAY[0.25,0.5,0.75]) WITHIN GROUP(ORDER BY datacomplete)
-    ELSE NULL END AS q,
   COUNT(CASE WHEN didtimeout OR datacomplete < 1 THEN 1 ELSE NULL END)
     AS timeouts,
   COUNT(CASE WHEN NOT didtimeout AND datacomplete >= 1
@@ -154,8 +122,8 @@ SELECT DATE(start) AS date,
   COUNT(*) AS requests
 FROM measurements
 WHERE DATE(start) < current_date - 1
-GROUP BY date, filesize, 3, server) sub
-ORDER BY date, filesize, source, server;
+GROUP BY date, source, server
+ORDER BY date, source, server;
 
 CREATE OR REPLACE VIEW buildtimes_stats AS
 SELECT date,



More information about the tor-commits mailing list