Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
kill another out of date script
[simgrid.git] / contrib / psg / src / example / chord / MessageCounterObserver.java
1 /**\r
2  * \r
3  */\r
4 package example.chord;\r
5 \r
6 import java.util.ArrayList;\r
7 import peersim.core.Control;\r
8 import peersim.core.Network;\r
9 import peersim.config.Configuration;\r
10 \r
11 /**\r
12  * @author Andrea\r
13  * \r
14  */\r
15 public class MessageCounterObserver implements Control {\r
16 \r
17         private static final String PAR_PROT = "protocol";\r
18 \r
19         private final String prefix;\r
20 \r
21         private final int pid;\r
22 \r
23         /**\r
24          * \r
25          */\r
26         public MessageCounterObserver(String prefix) {\r
27                 this.prefix = prefix;\r
28                 this.pid = Configuration.getPid(prefix + "." + PAR_PROT);\r
29         }\r
30 \r
31         /*\r
32          * (non-Javadoc)\r
33          * \r
34          * @see peersim.core.Control#execute()\r
35          */\r
36         public boolean execute() {\r
37                 int size = Network.size();\r
38                 int totalStab = 0;\r
39                 int totFails = 0;\r
40                 ArrayList hopCounters = new ArrayList(); // struttura dati che\r
41                                                                                                         // memorizza gli hop di\r
42                                                                                                         // tutti i mess mandati\r
43                 hopCounters.clear();\r
44                 int max = 0;\r
45                 int min = Integer.MAX_VALUE;\r
46                 for (int i = 0; i < size; i++) {\r
47                         ChordProtocol cp = (ChordProtocol) Network.get(i).getProtocol(pid);\r
48                         // trovare tutti gli hopCOunter dei messaggi lookup mandati\r
49                         int[] counters = new int[cp.getLookupMessage().length];\r
50                         System.arraycopy(cp.getLookupMessage(), 0, counters, 0, cp\r
51                                         .getLookupMessage().length);\r
52                         totalStab = totalStab + cp.stabilizations;\r
53                         totFails = totFails + cp.fails;\r
54                         cp.stabilizations = 0;\r
55                         cp.fails = 0;\r
56                         int maxNew = maxArray(counters, cp.index);\r
57                         if (maxNew > max)\r
58                                 max = maxNew;\r
59                         if (cp.index != 0) {\r
60                                 for (int j = 0; j < cp.index; j++)\r
61                                         hopCounters.add(counters[j]);\r
62                                 int minNew = minArray(counters, cp.index);\r
63                                 if (minNew < min)\r
64                                         min = minNew;\r
65                         }\r
66                         cp.emptyLookupMessage();\r
67                 }\r
68                 double media = meanCalculator(hopCounters);\r
69                 if (media > 0)\r
70                         System.out.println("Mean:  " + media + " Max Value: " + max\r
71                                         + " Min Value: " + min + " # Observations: "\r
72                                         + hopCounters.size());\r
73                 System.out.println("     # Stabilizations: " + totalStab + " # Failures: "\r
74                                 + totFails);\r
75                 System.out.println("");\r
76                 return false;\r
77         }\r
78 \r
79         private double meanCalculator(ArrayList list) {\r
80                 int lenght = list.size();\r
81                 if (lenght == 0)\r
82                         return 0;\r
83                 int sum = 0;\r
84                 for (int i = 0; i < lenght; i++) {\r
85                         sum = sum + ((Integer) list.get(i)).intValue();\r
86                 }\r
87                 double mean = sum / lenght;\r
88                 return mean;\r
89         }\r
90 \r
91         private int maxArray(int[] array, int dim) {\r
92                 int max = 0;\r
93                 for (int j = 0; j < dim; j++) {\r
94                         if (array[j] > max)\r
95                                 max = array[j];\r
96                 }\r
97                 return max;\r
98         }\r
99 \r
100         private int minArray(int[] array, int dim) {\r
101                 int min = 0;\r
102                 for (int j = 0; j < dim; j++) {\r
103                         if (array[j] < min)\r
104                                 min = array[j];\r
105                 }\r
106                 return min;\r
107         }\r
108 }\r