[tor-commits] [metrics-web/master] Fix missing values in direct users graphs.

karsten at torproject.org karsten at torproject.org
Tue Jun 19 07:06:04 UTC 2012


commit f00cfbe8f43d851b5e7a1f32336b20880e312cb6
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Tue Jun 19 08:56:50 2012 +0200

    Fix missing values in direct users graphs.
    
    When we didn't have a single directory mirror reporting requests from a
    given country, we treated these dates as "don't have any data" and
    interrupted drawing the line.  This makes sense for times when there was a
    general problem with statistics gathering in the network; we wouldn't want
    all graphs to drop to zero in that case.  But if there was no such
    network-wide event, we could interpret "no data for that country, but lots
    of data for other countries" as "no users from that country" and continue
    drawing the line at 0 users.
    
    Fixes the rest of #6170.
---
 rserve/graphs.R |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/rserve/graphs.R b/rserve/graphs.R
index 30413b8..41dd22b 100644
--- a/rserve/graphs.R
+++ b/rserve/graphs.R
@@ -656,26 +656,34 @@ plot_direct_users <- function(start, end, country, events, path, nocutoff,
     dpi) {
   drv <- dbDriver("PostgreSQL")
   con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
-  q <- paste("SELECT date, r, bwp, brn, bwn, brp, bwr, brr ",
+  q <- paste("SELECT date, r, bwp, brn, bwn, brp, bwr, brr, country ",
       "FROM user_stats WHERE date >= '", start, "' AND date <= '", end,
       "' ", ifelse(nocutoff == "off",
       " AND date < (SELECT MAX(date) FROM user_stats) - 1 ", ""),
-      " AND country = '", ifelse(country == "all", "zy", country), "'",
-      sep = "")
+      " AND (country = 'zy'", ifelse(country == "all", "",
+      paste(" OR country = '", country, "'", sep = "")), ")", sep = "")
   rs <- dbSendQuery(con, q)
   u <- fetch(rs, n = -1)
   dbDisconnect(con)
   dbUnloadDriver(drv)
+  a <- u[u$country == "zy", ]
+  if (country != "all")
+    u <- u[u$country == country, ]
   u <- data.frame(date = u$date,
        users = u$r * (u$bwp * u$brn / u$bwn - u$brp) /
                (u$bwr * u$brn / u$bwn - u$brr) / 10)
   dates <- seq(from = as.Date(start, "%Y-%m-%d"),
       to = as.Date(end, "%Y-%m-%d"), by="1 day")
-  missing <- setdiff(dates, u$date)
+  missing <- setdiff(dates, a$date)
   if (length(missing) > 0)
     u <- rbind(u,
         data.frame(date = as.Date(missing, origin = "1970-01-01"),
         users = NA))
+  missing <- setdiff(dates, u$date)
+  if (length(missing) > 0)
+    u <- rbind(u,
+        data.frame(date = as.Date(missing, origin = "1970-01-01"),
+        users = 0))
   title <- ifelse(country == "all",
     "Directly connecting users from all countries\n",
     paste("Directly connecting users from ", countryname(country), "\n",



More information about the tor-commits mailing list