X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ff6cb26262ba25fefdf1265628265a75d790ebd6..200986a368bbbbb5df459d43cbc7f5ef3d7678db:/contrib/psg/src/example/symphony/SymphonyStatistics.java diff --git a/contrib/psg/src/example/symphony/SymphonyStatistics.java b/contrib/psg/src/example/symphony/SymphonyStatistics.java new file mode 100644 index 0000000000..4e97219654 --- /dev/null +++ b/contrib/psg/src/example/symphony/SymphonyStatistics.java @@ -0,0 +1,77 @@ +package example.symphony; + +import peersim.config.Configuration; +import peersim.core.Control; +import peersim.core.Network; +import peersim.core.Node; + +/** + * + * @author Andrea Esposito + */ +public class SymphonyStatistics implements Control { + + private static final String PAR_SYMPHONY = "symphony"; + private final int symphonyID; + private long totalMsg = 0; + private long numRouteResposeMsg = 0; + private long numRouteMsg = 0; + private long numRouteFailMsg = 0; + private long numRouteFoundManagerMsg = 0; + private double mediaHopRouteResponseMsg = 0.0; + + public SymphonyStatistics(String prefix) { + symphonyID = Configuration.getPid(prefix + "." + PAR_SYMPHONY); + } + + public boolean execute() { + + AdapterIterableNetwork itNetwork = new AdapterIterableNetwork(); + for (Node node : itNetwork) { + SymphonyProtocol symphony = (SymphonyProtocol) node.getProtocol(symphonyID); + Tuple[] tupleMessages = symphony.getHistoryMessage(); + totalMsg += tupleMessages.length; + + for (Tuple tupleMessage : tupleMessages) { + + Message message = tupleMessage.x; + + if (message != null) { + switch (message.getType()) { + case ROUTE: + numRouteMsg++; + if (tupleMessage.y != null && tupleMessage.y.getType() == Message.MessageType.ROUTE_RESPONSE) { + numRouteFoundManagerMsg++; + mediaHopRouteResponseMsg = ((mediaHopRouteResponseMsg * (numRouteFoundManagerMsg - 1)) + message.getHop()) / (double) numRouteFoundManagerMsg; + } + break; + case ROUTE_FAIL: + numRouteFailMsg++; + break; + case ROUTE_RESPONSE: + numRouteResposeMsg++; + break; + } + } + } + + symphony.clearHistoryMessage(); + } + + printStatistics(); + + return false; + } + + private void printStatistics() { + System.out.println("### Statistics ###"); + System.out.println("- Total Messages: " + totalMsg); + System.out.println("- Total Route Messages: " + numRouteMsg); + System.out.println("- Found Manager Route Message: " + numRouteFoundManagerMsg); + System.out.println("- Response Message: " + numRouteResposeMsg); + System.out.println("- Fail Message: " + numRouteFailMsg); + System.out.println(); + System.out.println("Average Hop:" + mediaHopRouteResponseMsg + " Expected value (k = log n): " + (Math.log(Network.size()) / Math.log(2))); + System.out.println("### END ###\n"); + } +}