1 package example.symphony;
\r
3 import peersim.config.Configuration;
\r
4 import peersim.core.Control;
\r
5 import peersim.core.Network;
\r
6 import peersim.core.Node;
\r
10 * @author Andrea Esposito <and1989@gmail.com>
\r
12 public class SymphonyStatistics implements Control {
\r
14 private static final String PAR_SYMPHONY = "symphony";
\r
15 private final int symphonyID;
\r
16 private long totalMsg = 0;
\r
17 private long numRouteResposeMsg = 0;
\r
18 private long numRouteMsg = 0;
\r
19 private long numRouteFailMsg = 0;
\r
20 private long numRouteFoundManagerMsg = 0;
\r
21 private double mediaHopRouteResponseMsg = 0.0;
\r
23 public SymphonyStatistics(String prefix) {
\r
24 symphonyID = Configuration.getPid(prefix + "." + PAR_SYMPHONY);
\r
27 public boolean execute() {
\r
29 AdapterIterableNetwork itNetwork = new AdapterIterableNetwork();
\r
30 for (Node node : itNetwork) {
\r
31 SymphonyProtocol symphony = (SymphonyProtocol) node.getProtocol(symphonyID);
\r
32 Tuple<Message, Message>[] tupleMessages = symphony.getHistoryMessage();
\r
33 totalMsg += tupleMessages.length;
\r
35 for (Tuple<Message, Message> tupleMessage : tupleMessages) {
\r
37 Message message = tupleMessage.x;
\r
39 if (message != null) {
\r
40 switch (message.getType()) {
\r
43 if (tupleMessage.y != null && tupleMessage.y.getType() == Message.MessageType.ROUTE_RESPONSE) {
\r
44 numRouteFoundManagerMsg++;
\r
45 mediaHopRouteResponseMsg = ((mediaHopRouteResponseMsg * (numRouteFoundManagerMsg - 1)) + message.getHop()) / (double) numRouteFoundManagerMsg;
\r
51 case ROUTE_RESPONSE:
\r
52 numRouteResposeMsg++;
\r
58 symphony.clearHistoryMessage();
\r
66 private void printStatistics() {
\r
67 System.out.println("### Statistics ###");
\r
68 System.out.println("- Total Messages: " + totalMsg);
\r
69 System.out.println("- Total Route Messages: " + numRouteMsg);
\r
70 System.out.println("- Found Manager Route Message: " + numRouteFoundManagerMsg);
\r
71 System.out.println("- Response Message: " + numRouteResposeMsg);
\r
72 System.out.println("- Fail Message: " + numRouteFailMsg);
\r
73 System.out.println();
\r
74 System.out.println("Average Hop:" + mediaHopRouteResponseMsg + " Expected value (k = log n): " + (Math.log(Network.size()) / Math.log(2)));
\r
75 System.out.println("### END ###\n");
\r