Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge pull request #1 from mquinson/master
[simgrid.git] / contrib / psg / src / example / symphony / SymphonyStatistics.java
1 package example.symphony;\r
2 \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
7 \r
8 /**\r
9  *\r
10  * @author Andrea Esposito <and1989@gmail.com>\r
11  */\r
12 public class SymphonyStatistics implements Control {\r
13 \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
22 \r
23     public SymphonyStatistics(String prefix) {\r
24         symphonyID = Configuration.getPid(prefix + "." + PAR_SYMPHONY);\r
25     }\r
26 \r
27     public boolean execute() {\r
28 \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
34 \r
35             for (Tuple<Message, Message> tupleMessage : tupleMessages) {\r
36 \r
37                 Message message = tupleMessage.x;\r
38 \r
39                 if (message != null) {\r
40                     switch (message.getType()) {\r
41                         case ROUTE:\r
42                             numRouteMsg++;\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
46                             }\r
47                             break;\r
48                         case ROUTE_FAIL:\r
49                             numRouteFailMsg++;\r
50                             break;\r
51                         case ROUTE_RESPONSE:\r
52                             numRouteResposeMsg++;\r
53                             break;\r
54                     }\r
55                 }\r
56             }\r
57 \r
58             symphony.clearHistoryMessage();\r
59         }\r
60 \r
61         printStatistics();\r
62 \r
63         return false;\r
64     }\r
65 \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
76     }\r
77 }\r