[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] [ernie/master] Add summary on overlap between votes and consensus.
Author: Karsten Loesing <karsten.loesing@xxxxxxx>
Date: Tue, 20 Apr 2010 17:55:01 +0200
Subject: Add summary on overlap between votes and consensus.
Commit: bf228ede23b2c309c118b11078fbb8084d18434c
---
src/ConsensusHealthChecker.java | 77 +++++++++++++++++++++++++++++++++++++++
1 files changed, 77 insertions(+), 0 deletions(-)
diff --git a/src/ConsensusHealthChecker.java b/src/ConsensusHealthChecker.java
index a86dcea..127e5f2 100644
--- a/src/ConsensusHealthChecker.java
+++ b/src/ConsensusHealthChecker.java
@@ -67,6 +67,15 @@ public class ConsensusHealthChecker {
new TreeMap<String, String>();
SortedMap<String, SortedSet<String>> votesAssignedFlags =
new TreeMap<String, SortedSet<String>>();
+ SortedMap<String, String> votesKnownFlags =
+ new TreeMap<String, String>();
+ SortedMap<String, SortedMap<String, Integer>> flagsAgree =
+ new TreeMap<String, SortedMap<String, Integer>>();
+ SortedMap<String, SortedMap<String, Integer>> flagsLost =
+ new TreeMap<String, SortedMap<String, Integer>>();
+ SortedMap<String, SortedMap<String, Integer>> flagsMissing =
+ new TreeMap<String, SortedMap<String, Integer>>();
+
/* Read consensus and parse all information that we want to compare to
* votes. */
@@ -158,6 +167,7 @@ public class ConsensusHealthChecker {
+ " <td>" + dirSource + "</td>\n"
+ " <td>" + voteKnownFlags + "</td>\n"
+ " </tr>\n");
+ votesKnownFlags.put(dirSource, voteKnownFlags);
for (String flag : voteKnownFlags.substring(
"known-flags ".length()).split(" ")) {
allKnownFlags.add(flag);
@@ -571,14 +581,28 @@ public class ConsensusHealthChecker {
int flagsWritten = 0;
for (String flag : relevantFlags) {
bw.write(flagsWritten++ > 0 ? "<br/>" : "");
+ SortedMap<String, SortedMap<String, Integer>> sums = null;
if (flags.contains(" " + flag)) {
if (consensusFlags == null ||
consensusFlags.contains(" " + flag)) {
bw.write(flag);
+ sums = flagsAgree;
} else {
bw.write("<font color=\"red\">" + flag + "</font>");
+ sums = flagsLost;
}
+ } else {
+ sums = flagsMissing;
}
+ SortedMap<String, Integer> sum = null;
+ if (sums.containsKey(dir)) {
+ sum = sums.get(dir);
+ } else {
+ sum = new TreeMap<String, Integer>();
+ sums.put(dir, sum);
+ }
+ sum.put(flag, sum.containsKey(flag) ?
+ sum.get(flag) + 1 : 1);
}
bw.write("</td>\n");
} else {
@@ -602,6 +626,59 @@ public class ConsensusHealthChecker {
}
bw.write(" </table>\n");
+ /* Write bandwidth scanner status. */
+ bw.write(" <br/>\n"
+ + " <h3>Overlap between votes and consensus</h3>\n"
+ + " <br/>\n"
+ + " <table border=\"0\" cellpadding=\"4\" "
+ + "cellspacing=\"0\" summary=\"\">\n"
+ + " <colgroup>\n"
+ + " <col width=\"160\">\n"
+ + " <col width=\"210\">\n"
+ + " <col width=\"210\">\n"
+ + " <col width=\"210\">\n"
+ + " </colgroup>\n");
+ bw.write(" <tr><td/><td><b>only in vote</b></td>"
+ + "<td><b>in vote and consensus</b></td>"
+ + "<td><b>only in consensus</b></td>\n");
+ for (String dir : allKnownVotes) {
+ boolean firstFlagWritten = false;
+ String[] flags = votesKnownFlags.get(dir).substring(
+ "known-flags ".length()).split(" ");
+ for (String flag : flags) {
+ bw.write(" <tr>\n");
+ if (firstFlagWritten) {
+ bw.write(" <td/>\n");
+ } else {
+ bw.write(" <td>" + dir + "</td>\n");
+ firstFlagWritten = true;
+ }
+ if (flagsLost.containsKey(dir) &&
+ flagsLost.get(dir).containsKey(flag)) {
+ bw.write(" <td>" + flagsLost.get(dir).get(flag)
+ + " " + flag + "</td>\n");
+ } else {
+ bw.write(" <td/>\n");
+ }
+ if (flagsAgree.containsKey(dir) &&
+ flagsAgree.get(dir).containsKey(flag)) {
+ bw.write(" <td>" + flagsAgree.get(dir).get(flag)
+ + " " + flag + "</td>\n");
+ } else {
+ bw.write(" <td/>\n");
+ }
+ if (flagsMissing.containsKey(dir) &&
+ flagsMissing.get(dir).containsKey(flag)) {
+ bw.write(" <td>" + flagsMissing.get(dir).get(flag)
+ + " " + flag + "</td>\n");
+ } else {
+ bw.write(" <td/>\n");
+ }
+ bw.write(" </tr>\n");
+ }
+ }
+ bw.write(" </table>\n");
+
/* Finish writing. */
bw.write(" </div>\n"
+ " </div>\n"
--
1.6.5