[tor-commits] [atlas/master] Adds aggregation search by version number (Fixes: #6855)
irl at torproject.org
irl at torproject.org
Fri Jan 12 08:32:49 UTC 2018
commit ba625b42b7bf1dc7d549a7702b8c806f5d5c8891
Author: Iain R. Learmonth <irl at fsfe.org>
Date: Fri Jan 12 02:35:50 2018 +0000
Adds aggregation search by version number (Fixes: #6855)
---
js/collections/aggregates.js | 9 ++++++++-
js/models/aggregate.js | 3 ++-
js/views/aggregate/search.js | 4 ++--
js/views/search/main.js | 4 ++++
templates/aggregate/search.html | 24 +++++++++++++++---------
templates/search/main.html | 1 +
6 files changed, 32 insertions(+), 13 deletions(-)
diff --git a/js/collections/aggregates.js b/js/collections/aggregates.js
index b7354f4..9ddce23 100644
--- a/js/collections/aggregates.js
+++ b/js/collections/aggregates.js
@@ -7,7 +7,7 @@ define([
], function($, _, Backbone, aggregateModel){
var aggregatesCollection = Backbone.Collection.extend({
model: aggregateModel,
- baseurl: 'https://onionoo.torproject.org/details?running=true&type=relay&fields=country,guard_probability,middle_probability,exit_probability,consensus_weight,consensus_weight_fraction,advertised_bandwidth,flags,as_number,as_name,measured',
+ baseurl: 'https://onionoo.torproject.org/details?running=true&type=relay&fields=country,guard_probability,middle_probability,exit_probability,consensus_weight,consensus_weight_fraction,advertised_bandwidth,flags,as_number,as_name,measured,version',
url: '',
aType: 'cc',
lookup: function(options) {
@@ -35,6 +35,7 @@ define([
var ccAggregate = false;
var asAggregate = false;
+ var versionAggregate = false;
if (collection.aType == "all") {
aggregateKey = "zz"; // A user-assigned ISO 3166-1 code, but really just a static key
@@ -44,6 +45,9 @@ define([
} else if (collection.aType == "as") {
aggregateKey = relay.as_number;
asAggregate = true;
+ } else if (collection.aType == "version") {
+ aggregateKey = relay.version.split(".").slice(0, 3).join(".") + ".";
+ versionAggregate = true;
} else {
aggregateKey = relay.country + "/" + relay.as_number;
ccAggregate = asAggregate = true;
@@ -61,6 +65,9 @@ define([
} else {
aggregates[aggregateKey].as = new Set();
}
+ if (versionAggregate) {
+ aggregates[aggregateKey].version = aggregateKey;
+ }
aggregates[aggregateKey].as_name = relay.as_name;
}
diff --git a/js/models/aggregate.js b/js/models/aggregate.js
index 50740df..6c2a059 100644
--- a/js/models/aggregate.js
+++ b/js/models/aggregate.js
@@ -19,7 +19,8 @@ define([
consensus_weight_to_bandwidth_count: 0,
relays: 0,
guards: 0,
- exits: 0
+ exits: 0,
+ version: null
});
return aggregateModel;
});
diff --git a/js/views/aggregate/search.js b/js/views/aggregate/search.js
index b3eeaeb..5cb8c82 100644
--- a/js/views/aggregate/search.js
+++ b/js/views/aggregate/search.js
@@ -21,17 +21,17 @@ define([
var compiledTemplate = _.template(aggregateSearchTemplate)
this.$el.html(compiledTemplate({query: query,
aggregates: this.collection.models,
+ aType: this.collection.aType,
countries: CountryCodes,
error: this.error,
relaysPublished: this.relaysPublished,
bridgesPublished: this.bridgesPublished}));
// This creates the table using DataTables
- //loadSortingExtensions();
var oTable = $('#torstatus_results').dataTable({
"sDom": "<\"top\"l>rt<\"bottom\"ip><\"clear\">",
"bStateSave": false,
- "aaSorting": [[2, "desc"]],
+ "aaSorting": [[(this.collection.aType == "version") ? 3 : 2, "desc"]],
"fnDrawCallback": function( oSettings ) {
$(".tip").tooltip({'html': true});
}
diff --git a/js/views/search/main.js b/js/views/search/main.js
index 58d6401..23b0240 100644
--- a/js/views/search/main.js
+++ b/js/views/search/main.js
@@ -94,6 +94,10 @@ define([
return goAggregate("ascc")
});
+ $("#do-advanced-aggregation-version").bind('click', function(){
+ return goAggregate("version")
+ });
+
$("#home-advanced-search").bind('submit', function(){
var query = buildAdvancedQuery();
document.location = "#search/"+encodeURI(query);
diff --git a/templates/aggregate/search.html b/templates/aggregate/search.html
index f8f364e..d71f6e4 100644
--- a/templates/aggregate/search.html
+++ b/templates/aggregate/search.html
@@ -40,6 +40,7 @@
<table class="table table-hover table-striped" id="torstatus_results">
<thead>
<tr>
+ <% if (aType == "version") { %><th>Version</th><% } %>
<th>Country</sup></th>
<th>Autonomous System</th>
<th>Consensus Weight</th>
@@ -56,25 +57,30 @@
<% _.each(aggregates, function(aggregate) { %>
<tr>
+ <% if (aType == "version") { %>
+ <td>
+ <%= aggregate.version %>
+ </td>
+ <% } %>
<td>
<% if ((typeof aggregate.country) == "string") { %>
- <a href="#search/<%= (query) ? query + " " : "" %><% if (query.indexOf("country:") == -1) { %>country:<%= aggregate.country %><% } %>"><img class="inline country" src="img/cc/<%= aggregate.country %>.png"> <%= countries[aggregate.country] %></a>
+ <a href="#search/<%= (query) ? query + " " : "" %><%= (aggregate.version) ? "version:" + aggregate.version + " " : "" %><% if (query.indexOf("country:") == -1) { %>country:<%= aggregate.country %><% } %>"><img class="inline country" src="img/cc/<%= aggregate.country %>.png"> <%= countries[aggregate.country] %></a>
<% } else { %>
<% if ((typeof aggregate.as) == "string") { %>
- (<a href="#aggregate/ascc/<%= (query) ? query + " " : "" %><% if (query.indexOf("as:") == -1) { %>as:<%= aggregate.as %><% } %>"><%= aggregate.country.size %> distinct</a>)
+ (<a href="#aggregate/ascc/<%= (query) ? query + " " : "" %><%= (aggregate.version) ? "version:" + aggregate.version + " " : "" %><% if (query.indexOf("as:") == -1) { %>as:<%= aggregate.as %><% } %>"><%= aggregate.country.size %> distinct</a>)
<% } else { %>
- (<a href="#aggregate/cc<%= (query) ? "/" + query : "" %>"><%= aggregate.country.size %> distinct</a>)
+ (<a href="#aggregate/cc<%= (query || aggregate.version) ? "/" : "" %><% (query) ? query + " " : "" %><%= (aggregate.version) ? "version:" + aggregate.version + " " : "" %>"><%= aggregate.country.size %> distinct</a>)
<% } %>
<% } %>
</td>
<td>
<% if ((typeof aggregate.as) == "string") { %>
- <a href="#search/<%= (query) ? query + " " : "" %><% if (query.indexOf("as:") == -1) { %>as:<%= aggregate.as %><% } %>"><%= aggregate.as_name %> (<%= aggregate.as %>)</a>
+ <a href="#search/<%= (query) ? query + " " : "" %><%= (aggregate.version) ? "version:" + aggregate.version + " " : "" %><% if (query.indexOf("as:") == -1) { %>as:<%= aggregate.as %><% } %>"><%= aggregate.as_name %> (<%= aggregate.as %>)</a>
<% } else { %>
<% if ((typeof aggregate.country) == "string") { %>
- (<a href="#aggregate/ascc/<%= (query) ? query + " " : "" %><% if (query.indexOf("country:") == -1) { %>country:<%= aggregate.country %><% } %>"><%= aggregate.as.size %> distinct</a>)
+ (<a href="#aggregate/ascc/<%= (query) ? query + " " : "" %><%= (aggregate.version) ? "version:" + aggregate.version + " " : "" %><% if (query.indexOf("country:") == -1) { %>country:<%= aggregate.country %><% } %>"><%= aggregate.as.size %> distinct</a>)
<% } else { %>
- (<a href="#aggregate/as<%= (query) ? "/" + query : "" %>"><%= aggregate.as.size %> distinct</a>)
+ (<a href="#aggregate/as<%= (query || aggregate.version) ? "/" : "" %><% (query) ? query + " " : "" %><%= (aggregate.version) ? "version:" + aggregate.version + " " : "" %>"><%= aggregate.as.size %> distinct</a>)
<% } %>
<% } %>
</td>
@@ -85,21 +91,21 @@
<td data-order="<%= aggregate.exit_probability %>"><%= (aggregate.exit_probability * 100).toFixed(4) %>%</td>
<td>
<% if ((typeof aggregate.as) == "string" || (typeof aggregate.country) == "string") { %>
- <a href="#search/<% if ((typeof aggregate.as) == "string" && query.indexOf("as:") == -1) { %>as:<%= aggregate.as %> <% } if ((typeof aggregate.country) == "string" && query.indexOf("country:") == -1) { %>country:<%= aggregate.country %> <% } %><%= (query) ? query + " " : "" %>"><%= aggregate.relays %></a>
+ <a href="#search/<% if ((typeof aggregate.as) == "string" && query.indexOf("as:") == -1) { %>as:<%= aggregate.as %> <% } if ((typeof aggregate.country) == "string" && query.indexOf("country:") == -1) { %>country:<%= aggregate.country %> <% } %><%= (query) ? query + " " : "" %><%= (aggregate.version) ? "version:" + aggregate.version + " " : "" %>"><%= aggregate.relays %></a>
<% } else { %>
<%= aggregate.relays %>
<% } %>
</td>
<td>
<% if (aggregate.guards > 0) { %>
- <a href="#search/<% if ((typeof aggregate.as) == "string" && query.indexOf("as:") == -1) { %>as:<%= aggregate.as %> <% } if ((typeof aggregate.country) == "string" && query.indexOf("country:") == -1) { %>country:<%= aggregate.country %> <% } %><%= (query) ? query + " " : "" %><% if (query.indexOf("flag:") == -1) { %>flag:guard<% } %>"><%= aggregate.guards %></a></td>
+ <a href="#search/<% if ((typeof aggregate.as) == "string" && query.indexOf("as:") == -1) { %>as:<%= aggregate.as %> <% } if ((typeof aggregate.country) == "string" && query.indexOf("country:") == -1) { %>country:<%= aggregate.country %> <% } %><%= (query) ? query + " " : "" %><% if (query.indexOf("flag:") == -1) { %>flag:guard <% } %><%= (aggregate.version) ? "version:" + aggregate.version + " " : "" %>"><%= aggregate.guards %></a></td>
<% } else { %>
0
<% } %>
</td>
<td>
<% if (aggregate.exits > 0) { %>
- <a href="#search/<% if ((typeof aggregate.as) == "string" && query.indexOf("as:") == -1) { %>as:<%= aggregate.as %> <% } if ((typeof aggregate.country) == "string" && query.indexOf("country:") == -1) { %>country:<%= aggregate.country %> <% } %><%= (query) ? query + " " : "" %><% if (query.indexOf("flag:") == -1) { %>flag:exit<% } %>"><%= aggregate.exits %></a></td>
+ <a href="#search/<% if ((typeof aggregate.as) == "string" && query.indexOf("as:") == -1) { %>as:<%= aggregate.as %> <% } if ((typeof aggregate.country) == "string" && query.indexOf("country:") == -1) { %>country:<%= aggregate.country %> <% } %><%= (query) ? query + " " : "" %><% if (query.indexOf("flag:") == -1) { %>flag:exit <% } %><%= (aggregate.version) ? "version:" + aggregate.version + " " : "" %>"><%= aggregate.exits %></a></td>
<% } else { %>
0
<% } %>
diff --git a/templates/search/main.html b/templates/search/main.html
index ee0a0ff..b69612c 100644
--- a/templates/search/main.html
+++ b/templates/search/main.html
@@ -133,6 +133,7 @@ or exit relay filtered by the search parameters.</p>
<button id="do-advanced-aggregation-as" class="btn btn-secondary tip" type="button" title="Aggregate by Autonomous System">by AS</button>
<button id="do-advanced-aggregation-cc" class="btn btn-secondary tip" type="button" title="Aggregate by Country">by CC</button>
<button id="do-advanced-aggregation-ascc" class="btn btn-secondary tip" type="button" title="Aggregate by both Autonomous System and Country">by AS+CC</button>
+ <button id="do-advanced-aggregation-version" class="btn btn-secondary tip" type="button" title="Aggregate by Version">by Version</button>
</p>
</form>
<p><sup>†</sup> These options are ignored when performing an aggregation as the aggregated searches are restricted to only currently running relays.</p>
More information about the tor-commits
mailing list