[or-cvs] [metrics-web/master] Add resolution parameter to user graphs and sort countries.

karsten at torproject.org karsten at torproject.org
Mon Jan 31 10:36:21 UTC 2011


commit f6cf3c778e92ed59de6b4022881131b4e4843de2
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Mon Jan 31 11:35:15 2011 +0100

    Add resolution parameter to user graphs and sort countries.
---
 rserve/graphs.R                                    |    8 ++--
 .../ernie/web/GraphParameterChecker.java           |   24 ++++++++-
 web/WEB-INF/users.jsp                              |   56 ++++++++++++--------
 3 files changed, 60 insertions(+), 28 deletions(-)

diff --git a/rserve/graphs.R b/rserve/graphs.R
index 89bd3ac..3d0da80 100644
--- a/rserve/graphs.R
+++ b/rserve/graphs.R
@@ -212,7 +212,7 @@ plot_relayflags_hour <- function(start, end, flags, path) {
   ggsave(filename = path, width = 8, height = 5, dpi = 72)
 }
 
-plot_direct_users <- function(start, end, country, path) {
+plot_direct_users <- function(start, end, country, path, dpi) {
   drv <- dbDriver("PostgreSQL")
   con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
   q <- paste("SELECT date, r, bwp, brn, bwn, brp, bwr, brr ",
@@ -260,10 +260,10 @@ plot_direct_users <- function(start, end, country, path) {
     scale_y_continuous(name = "", limits = c(0, max(u$users,
         na.rm = TRUE)), formatter = formatter) +
     opts(title = title)
-  ggsave(filename = path, width = 8, height = 5, dpi = 72)
+  ggsave(filename = path, width = 8, height = 5, dpi = as.numeric(dpi))
 }
 
-plot_bridge_users <- function(start, end, country, path) {
+plot_bridge_users <- function(start, end, country, path, dpi) {
   drv <- dbDriver("PostgreSQL")
   con <- dbConnect(drv, user = dbuser, password = dbpassword, dbname = db)
   q <- paste("SELECT date, users FROM bridge_stats ",
@@ -308,7 +308,7 @@ plot_bridge_users <- function(start, end, country, path) {
     scale_y_continuous(name = "", limits = c(0, max(bridgeusers$users,
         na.rm = TRUE)), formatter = formatter) +
     opts(title = title)
-  ggsave(filename = path, width = 8, height = 5, dpi = 72)
+  ggsave(filename = path, width = 8, height = 5, dpi = as.numeric(dpi))
 }
 
 plot_gettor <- function(start, end, bundle, path) {
diff --git a/src/org/torproject/ernie/web/GraphParameterChecker.java b/src/org/torproject/ernie/web/GraphParameterChecker.java
index 3d1648b..fe9bc3b 100644
--- a/src/org/torproject/ernie/web/GraphParameterChecker.java
+++ b/src/org/torproject/ernie/web/GraphParameterChecker.java
@@ -48,9 +48,9 @@ public class GraphParameterChecker {
     this.availableGraphs.put("bandwidth", "start,end,filename");
     this.availableGraphs.put("dirbytes", "start,end,filename");
     this.availableGraphs.put("direct-users",
-        "start,end,country,filename");
+        "start,end,country,filename,dpi");
     this.availableGraphs.put("bridge-users",
-         "start,end,country,filename");
+         "start,end,country,filename,dpi");
     this.availableGraphs.put("gettor", "start,end,bundle,filename");
     this.availableGraphs.put("torperf",
          "start,end,source,filesize,filename");
@@ -68,6 +68,7 @@ public class GraphParameterChecker {
     this.knownParameterValues.put("bundle", "all,en,zh_CN,fa");
     this.knownParameterValues.put("source", "all,siv,moria,torperf");
     this.knownParameterValues.put("filesize", "50kb,1mb,5mb");
+    this.knownParameterValues.put("dpi", "72,150,300");
   }
 
   /**
@@ -263,6 +264,25 @@ public class GraphParameterChecker {
       }
     }
 
+
+    /* Parse graph resolution in dpi. The default is 72. */
+    if (supportedGraphParameters.contains("dpi")) {
+      String[] dpiParameter = (String[]) requestParameters.get("dpi");
+      if (dpiParameter != null) {
+        List<String> knownDpis = Arrays.asList(
+            this.knownParameterValues.get("dpi").split(","));
+        if (dpiParameter.length != 1 ||
+            dpiParameter[0] == null ||
+            !Pattern.matches("[0-9]{1,4}", dpiParameter[0]) ||
+            !knownDpis.contains(dpiParameter[0])) {
+          return null;
+        }
+      } else {
+        dpiParameter = new String[] { "72" };
+      }
+      recognizedGraphParameters.put("dpi", dpiParameter);
+    }
+
     /* We now have a map with all required graph parameters. Return it. */
     return recognizedGraphParameters;
   }
diff --git a/web/WEB-INF/users.jsp b/web/WEB-INF/users.jsp
index bbca073..bc98e9c 100644
--- a/web/WEB-INF/users.jsp
+++ b/web/WEB-INF/users.jsp
@@ -37,50 +37,56 @@ based on the requests seen by a few dozen directory mirrors.</p>
     </p><p>
       Source: <select name="country">
         <option value="all" selected>All users</option>
-        <option value="ae">United Arab Emirates</option>
+        <option value="dz">Algeria</option>
         <option value="au">Australia</option>
         <option value="bh">Bahrain</option>
         <option value="br">Brazil</option>
+        <option value="mm">Burma</option>
         <option value="ca">Canada</option>
         <option value="cn">China</option>
         <option value="cu">Cuba</option>
-        <option value="de">Germany</option>
         <option value="dj">Djibouti</option>
-        <option value="dz">Algeria</option>
         <option value="eg">Egypt</option>
         <option value="et">Ethiopia</option>
         <option value="fr">France</option>
-        <option value="gb">U.K.</option>
-        <option value="il">Israel</option>
+        <option value="de">Germany</option>
         <option value="ir">Iran</option>
-        <option value="it">Italy</option>
         <option value="iq">Iraq</option>
-        <option value="jo">Jordan</option>
+        <option value="il">Israel</option>
+        <option value="it">Italy</option>
         <option value="jp">Japan</option>
-        <option value="kp">North Korea</option>
-        <option value="kr">South Korea</option>
+        <option value="jo">Jordan</option>
         <option value="kw">Kuwait</option>
         <option value="lb">Lebanon</option>
         <option value="ly">Libya</option>
         <option value="ma">Morocco</option>
-        <option value="mm">Burma</option>
+        <option value="kp">North Korea</option>
         <option value="om">Oman</option>
-        <option value="pl">Poland</option>
         <option value="ps">Palestinian territories</option>
+        <option value="pl">Poland</option>
         <option value="qa">Qatar</option>
         <option value="ru">Russia</option>
         <option value="sa">Saudi Arabia</option>
+        <option value="kr">South Korea</option>
         <option value="sd">Sudan</option>
         <option value="se">Sweden</option>
         <option value="sy">Syria</option>
         <option value="tn">Tunisia</option>
         <option value="tm">Turkmenistan</option>
+        <option value="ae">U.A.E.</option>
+        <option value="gb">U.K.</option>
         <option value="us">U.S.A.</option>
         <option value="uz">Uzbekistan</option>
         <option value="vn">Vietnam</option>
         <option value="ye">Yemen</option>
       </select>
     </p><p>
+      Resolution: <select name="dpi">
+        <option value="72" selected>Screen - 576x360</option>
+        <option value="150">Print low - 1200x750</option>
+        <option value="300">Print high - 2400x1500</option>
+      </select>
+    </p><p>
     <input class="submit" type="submit" value="Update graph">
     </p>
   </div>
@@ -114,50 +120,56 @@ by a few hundred bridges.</p>
     </p><p>
       Source: <select name="country">
         <option value="all" selected>All users</option>
-        <option value="ae">United Arab Emirates</option>
+        <option value="dz">Algeria</option>
         <option value="au">Australia</option>
         <option value="bh">Bahrain</option>
         <option value="br">Brazil</option>
+        <option value="mm">Burma</option>
         <option value="ca">Canada</option>
         <option value="cn">China</option>
         <option value="cu">Cuba</option>
-        <option value="de">Germany</option>
         <option value="dj">Djibouti</option>
-        <option value="dz">Algeria</option>
         <option value="eg">Egypt</option>
         <option value="et">Ethiopia</option>
         <option value="fr">France</option>
-        <option value="gb">U.K.</option>
-        <option value="il">Israel</option>
+        <option value="de">Germany</option>
         <option value="ir">Iran</option>
-        <option value="it">Italy</option>
         <option value="iq">Iraq</option>
-        <option value="jo">Jordan</option>
+        <option value="il">Israel</option>
+        <option value="it">Italy</option>
         <option value="jp">Japan</option>
-        <option value="kp">North Korea</option>
-        <option value="kr">South Korea</option>
+        <option value="jo">Jordan</option>
         <option value="kw">Kuwait</option>
         <option value="lb">Lebanon</option>
         <option value="ly">Libya</option>
         <option value="ma">Morocco</option>
-        <option value="mm">Burma</option>
+        <option value="kp">North Korea</option>
         <option value="om">Oman</option>
-        <option value="pl">Poland</option>
         <option value="ps">Palestinian territories</option>
+        <option value="pl">Poland</option>
         <option value="qa">Qatar</option>
         <option value="ru">Russia</option>
         <option value="sa">Saudi Arabia</option>
+        <option value="kr">South Korea</option>
         <option value="sd">Sudan</option>
         <option value="se">Sweden</option>
         <option value="sy">Syria</option>
         <option value="tn">Tunisia</option>
         <option value="tm">Turkmenistan</option>
+        <option value="ae">U.A.E.</option>
+        <option value="gb">U.K.</option>
         <option value="us">U.S.A.</option>
         <option value="uz">Uzbekistan</option>
         <option value="vn">Vietnam</option>
         <option value="ye">Yemen</option>
       </select>
     </p><p>
+      Resolution: <select name="dpi">
+        <option value="72" selected>Screen - 576x360</option>
+        <option value="150">Print low - 1200x750</option>
+        <option value="300">Print high - 2400x1500</option>
+      </select>
+    </p><p>
     <input class="submit" type="submit" value="Update graph">
     </p>
   </div>



More information about the tor-commits mailing list