aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJulius Bünger <buenger@mytum.de>2018-06-08 10:11:32 +0200
committerJulius Bünger <buenger@mytum.de>2018-06-08 10:11:32 +0200
commit8900fb0e0101cd722e392ffb9aa36245c22ea770 (patch)
tree2c2472e20a69767a38389fbf9ae3500d339c3500 /src
parent365e3bcae1e79c4f71f68e0d1d41172d86c51e76 (diff)
downloadgnunet-8900fb0e0101cd722e392ffb9aa36245c22ea770.tar.gz
gnunet-8900fb0e0101cd722e392ffb9aa36245c22ea770.zip
rps profiler: rewrite statistics handling
Diffstat (limited to 'src')
-rw-r--r--src/rps/gnunet-rps-profiler.c519
1 files changed, 241 insertions, 278 deletions
diff --git a/src/rps/gnunet-rps-profiler.c b/src/rps/gnunet-rps-profiler.c
index 8450ee65d..5ef42187f 100644
--- a/src/rps/gnunet-rps-profiler.c
+++ b/src/rps/gnunet-rps-profiler.c
@@ -34,6 +34,8 @@
34#include <inttypes.h> 34#include <inttypes.h>
35 35
36 36
37#define BIT(n) (1 << (n))
38
37/** 39/**
38 * How many peers do we start? 40 * How many peers do we start?
39 */ 41 */
@@ -67,6 +69,163 @@ static unsigned int mal_type = 0;
67 */ 69 */
68static struct GNUNET_TESTBED_Peer **testbed_peers; 70static struct GNUNET_TESTBED_Peer **testbed_peers;
69 71
72enum STAT_TYPE
73{
74 STAT_TYPE_ROUNDS, /* 0 */
75 STAT_TYPE_BLOCKS, /* 1 */
76 STAT_TYPE_BLOCKS_MANY_PUSH, /* 2 */
77 STAT_TYPE_BLOCKS_NO_PUSH, /* 3 */
78 STAT_TYPE_BLOCKS_NO_PULL, /* 4 */
79 STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL, /* 5 */
80 STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL, /* 6 */
81 STAT_TYPE_ISSUED_PUSH_SEND, /* 7 */
82 STAT_TYPE_ISSUED_PULL_REQ, /* 8 */
83 STAT_TYPE_ISSUED_PULL_REP, /* 9 */
84 STAT_TYPE_SENT_PUSH_SEND, /* 10 */
85 STAT_TYPE_SENT_PULL_REQ, /* 11 */
86 STAT_TYPE_SENT_PULL_REP, /* 12 */
87 STAT_TYPE_RECV_PUSH_SEND, /* 13 */
88 STAT_TYPE_RECV_PULL_REQ, /* 14 */
89 STAT_TYPE_RECV_PULL_REP, /* 15 */
90 STAT_TYPE_MAX, /* 16 */
91};
92
93struct STATcls
94{
95 struct RPSPeer *rps_peer;
96 enum STAT_TYPE stat_type;
97};
98
99
100/**
101 * @brief Converts string representation to the corresponding #STAT_TYPE enum.
102 *
103 * @param stat_str string representation of statistics specifier
104 *
105 * @return corresponding enum
106 */
107enum STAT_TYPE stat_str_2_type (const char *stat_str)
108{
109 if (0 == strncmp ("# rounds blocked - no pull replies", stat_str, strlen ("# rounds blocked - no pull replies")))
110 {
111 return STAT_TYPE_BLOCKS_NO_PULL;
112 }
113 else if (0 == strncmp ("# rounds blocked - too many pushes, no pull replies", stat_str, strlen ("# rounds blocked - too many pushes, no pull replies")))
114 {
115 return STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL;
116 }
117 else if (0 == strncmp ("# rounds blocked - too many pushes", stat_str, strlen ("# rounds blocked - too many pushes")))
118 {
119 return STAT_TYPE_BLOCKS_MANY_PUSH;
120 }
121 else if (0 == strncmp ("# rounds blocked - no pushes, no pull replies", stat_str, strlen ("# rounds blocked - no pushes, no pull replies")))
122 {
123 return STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL;
124 }
125 else if (0 == strncmp ("# rounds blocked - no pushes", stat_str, strlen ("# rounds blocked - no pushes")))
126 {
127 return STAT_TYPE_BLOCKS_NO_PUSH;
128 }
129 else if (0 == strncmp ("# rounds blocked", stat_str, strlen ("# rounds blocked")))
130 {
131 return STAT_TYPE_BLOCKS;
132 }
133 else if (0 == strncmp ("# rounds", stat_str, strlen ("# rounds")))
134 {
135 return STAT_TYPE_ROUNDS;
136 }
137 else if (0 == strncmp ("# push send issued", stat_str, strlen ("# push send issued")))
138 {
139 return STAT_TYPE_ISSUED_PUSH_SEND;
140 }
141 else if (0 == strncmp ("# pull request send issued", stat_str, strlen ("# pull request send issued")))
142 {
143 return STAT_TYPE_ISSUED_PULL_REQ;
144 }
145 else if (0 == strncmp ("# pull reply send issued", stat_str, strlen ("# pull reply send issued")))
146 {
147 return STAT_TYPE_ISSUED_PULL_REP;
148 }
149 else if (0 == strncmp ("# pushes sent", stat_str, strlen ("# pushes sent")))
150 {
151 return STAT_TYPE_SENT_PUSH_SEND;
152 }
153 else if (0 == strncmp ("# pull requests sent", stat_str, strlen ("# pull requests sent")))
154 {
155 return STAT_TYPE_SENT_PULL_REQ;
156 }
157 else if (0 == strncmp ("# pull replys sent", stat_str, strlen ("# pull replys sent")))
158 {
159 return STAT_TYPE_SENT_PULL_REP;
160 }
161 else if (0 == strncmp ("# push message received", stat_str, strlen ("# push message received")))
162 {
163 return STAT_TYPE_RECV_PUSH_SEND;
164 }
165 else if (0 == strncmp ("# pull request message received", stat_str, strlen ("# pull request message received")))
166 {
167 return STAT_TYPE_RECV_PULL_REQ;
168 }
169 else if (0 == strncmp ("# pull reply messages received", stat_str, strlen ("# pull reply messages received")))
170 {
171 return STAT_TYPE_RECV_PULL_REP;
172 }
173 return STAT_TYPE_MAX;
174}
175
176
177/**
178 * @brief Converts #STAT_TYPE enum to the equivalent string representation that
179 * is stored with the statistics service.
180 *
181 * @param stat_type #STAT_TYPE enum
182 *
183 * @return string representation that matches statistics value
184 */
185char* stat_type_2_str (enum STAT_TYPE stat_type)
186{
187 switch (stat_type)
188 {
189 case STAT_TYPE_ROUNDS:
190 return "# rounds";
191 case STAT_TYPE_BLOCKS:
192 return "# rounds blocked";
193 case STAT_TYPE_BLOCKS_MANY_PUSH:
194 return "# rounds blocked - too many pushes";
195 case STAT_TYPE_BLOCKS_NO_PUSH:
196 return "# rounds blocked - no pushes";
197 case STAT_TYPE_BLOCKS_NO_PULL:
198 return "# rounds blocked - no pull replies";
199 case STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL:
200 return "# rounds blocked - too many pushes, no pull replies";
201 case STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL:
202 return "# rounds blocked - no pushes, no pull replies";
203 case STAT_TYPE_ISSUED_PUSH_SEND:
204 return "# push send issued";
205 case STAT_TYPE_ISSUED_PULL_REQ:
206 return "# pull request send issued";
207 case STAT_TYPE_ISSUED_PULL_REP:
208 return "# pull reply send issued";
209 case STAT_TYPE_SENT_PUSH_SEND:
210 return "# pushes sent";
211 case STAT_TYPE_SENT_PULL_REQ:
212 return "# pull requests sent";
213 case STAT_TYPE_SENT_PULL_REP:
214 return "# pull replys sent";
215 case STAT_TYPE_RECV_PUSH_SEND:
216 return "# push message received";
217 case STAT_TYPE_RECV_PULL_REQ:
218 return "# pull request message received";
219 case STAT_TYPE_RECV_PULL_REP:
220 return "# pull reply messages received";
221 case STAT_TYPE_MAX:
222 default:
223 return "ERROR";
224 ;
225 }
226}
227
228
70/** 229/**
71 * @brief Indicates whether peer should go off- or online 230 * @brief Indicates whether peer should go off- or online
72 */ 231 */
@@ -287,52 +446,9 @@ struct RPSPeer
287 /** 446 /**
288 * @brief statistics values 447 * @brief statistics values
289 */ 448 */
290 uint64_t num_rounds; 449 uint64_t stats[STAT_TYPE_MAX];
291 uint64_t num_blocks;
292 uint64_t num_blocks_many_push;
293 uint64_t num_blocks_no_push;
294 uint64_t num_blocks_no_pull;
295 uint64_t num_blocks_many_push_no_pull;
296 uint64_t num_blocks_no_push_no_pull;
297 uint64_t num_issued_push;
298 uint64_t num_issued_pull_req;
299 uint64_t num_issued_pull_rep;
300 uint64_t num_sent_push;
301 uint64_t num_sent_pull_req;
302 uint64_t num_sent_pull_rep;
303 uint64_t num_recv_push;
304 uint64_t num_recv_pull_req;
305 uint64_t num_recv_pull_rep;
306}; 450};
307 451
308enum STAT_TYPE
309{
310 STAT_TYPE_ROUNDS = 0x1, /* 1 */
311 STAT_TYPE_BLOCKS = 0x2, /* 2 */
312 STAT_TYPE_BLOCKS_MANY_PUSH = 0x4, /* 3 */
313 STAT_TYPE_BLOCKS_NO_PUSH = 0x8, /* 4 */
314 STAT_TYPE_BLOCKS_NO_PULL = 0x10, /* 5 */
315 STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL = 0x20, /* 6 */
316 STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL = 0x40, /* 7 */
317 STAT_TYPE_ISSUED_PUSH_SEND = 0x80, /* 8 */
318 STAT_TYPE_ISSUED_PULL_REQ = 0x100, /* 9 */
319 STAT_TYPE_ISSUED_PULL_REP = 0x200, /* 10 */
320 STAT_TYPE_SENT_PUSH_SEND = 0x400, /* 11 */
321 STAT_TYPE_SENT_PULL_REQ = 0x800, /* 12 */
322 STAT_TYPE_SENT_PULL_REP = 0x1000, /* 13 */
323 STAT_TYPE_RECV_PUSH_SEND = 0x2000, /* 14 */
324 STAT_TYPE_RECV_PULL_REQ = 0x4000, /* 15 */
325 STAT_TYPE_RECV_PULL_REP = 0x8000, /* 16 */
326 STAT_TYPE_MAX = 0x80000000, /* 32 */
327};
328
329struct STATcls
330{
331 struct RPSPeer *rps_peer;
332 enum STAT_TYPE stat_type;
333};
334
335
336/** 452/**
337 * Information for all the peers. 453 * Information for all the peers.
338 */ 454 */
@@ -2100,25 +2216,9 @@ pre_profiler (struct RPSPeer *rps_peer, struct GNUNET_RPS_Handle *h)
2100} 2216}
2101 2217
2102void write_final_stats (void){ 2218void write_final_stats (void){
2103 uint32_t i; 2219 uint64_t sums[STAT_TYPE_MAX] = { 0 };
2104 uint64_t sum_rounds = 0;
2105 uint64_t sum_blocks = 0;
2106 uint64_t sum_b_mpush = 0;
2107 uint64_t sum_b_npush = 0;
2108 uint64_t sum_b_npull = 0;
2109 uint64_t sum_b_mpush_npull = 0;
2110 uint64_t sum_b_npush_npull = 0;
2111 uint64_t sum_iss_push = 0;
2112 uint64_t sum_iss_pull_req = 0;
2113 uint64_t sum_iss_pull_rep = 0;
2114 uint64_t sum_sent_push = 0;
2115 uint64_t sum_sent_pull_req = 0;
2116 uint64_t sum_sent_pull_rep = 0;
2117 uint64_t sum_recv_push = 0;
2118 uint64_t sum_recv_pull_req = 0;
2119 uint64_t sum_recv_pull_rep = 0;
2120 2220
2121 for (i = 0; i < num_peers; i++) 2221 for (uint32_t i = 0; i < num_peers; i++)
2122 { 2222 {
2123 to_file ("/tmp/rps/final_stats.dat", 2223 to_file ("/tmp/rps/final_stats.dat",
2124 "%" PRIu32 " " /* index */ 2224 "%" PRIu32 " " /* index */
@@ -2130,38 +2230,34 @@ void write_final_stats (void){
2130 PRIu64 " %" PRIu64 " %" PRIu64 /* recv */, 2230 PRIu64 " %" PRIu64 " %" PRIu64 /* recv */,
2131 i, 2231 i,
2132 GNUNET_i2s (rps_peers[i].peer_id), 2232 GNUNET_i2s (rps_peers[i].peer_id),
2133 rps_peers[i].num_rounds, 2233 rps_peers[i].stats[STAT_TYPE_ROUNDS],
2134 rps_peers[i].num_blocks, 2234 rps_peers[i].stats[STAT_TYPE_BLOCKS],
2135 rps_peers[i].num_blocks_many_push, 2235 rps_peers[i].stats[STAT_TYPE_BLOCKS_MANY_PUSH],
2136 rps_peers[i].num_blocks_no_push, 2236 rps_peers[i].stats[STAT_TYPE_BLOCKS_NO_PUSH],
2137 rps_peers[i].num_blocks_no_pull, 2237 rps_peers[i].stats[STAT_TYPE_BLOCKS_NO_PULL],
2138 rps_peers[i].num_blocks_many_push_no_pull, 2238 rps_peers[i].stats[STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL],
2139 rps_peers[i].num_blocks_no_push_no_pull, 2239 rps_peers[i].stats[STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL],
2140 rps_peers[i].num_issued_push, 2240 rps_peers[i].stats[STAT_TYPE_ISSUED_PUSH_SEND],
2141 rps_peers[i].num_issued_pull_req, 2241 rps_peers[i].stats[STAT_TYPE_ISSUED_PULL_REQ],
2142 rps_peers[i].num_issued_pull_rep, 2242 rps_peers[i].stats[STAT_TYPE_ISSUED_PULL_REP],
2143 rps_peers[i].num_sent_push, 2243 rps_peers[i].stats[STAT_TYPE_SENT_PUSH_SEND],
2144 rps_peers[i].num_sent_pull_req, 2244 rps_peers[i].stats[STAT_TYPE_SENT_PULL_REQ],
2145 rps_peers[i].num_sent_pull_rep, 2245 rps_peers[i].stats[STAT_TYPE_SENT_PULL_REP],
2146 rps_peers[i].num_recv_push, 2246 rps_peers[i].stats[STAT_TYPE_RECV_PUSH_SEND],
2147 rps_peers[i].num_recv_pull_req, 2247 rps_peers[i].stats[STAT_TYPE_RECV_PULL_REQ],
2148 rps_peers[i].num_recv_pull_rep); 2248 rps_peers[i].stats[STAT_TYPE_RECV_PULL_REP]);
2149 sum_rounds += rps_peers[i].num_rounds; 2249 for (uint32_t stat_type = STAT_TYPE_ROUNDS;
2150 sum_blocks += rps_peers[i].num_blocks; 2250 stat_type < STAT_TYPE_MAX;
2151 sum_b_mpush += rps_peers[i].num_blocks_many_push; 2251 stat_type++)
2152 sum_b_npush += rps_peers[i].num_blocks_no_push; 2252 {
2153 sum_b_npull += rps_peers[i].num_blocks_no_pull; 2253 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
2154 sum_b_mpush_npull += rps_peers[i].num_blocks_many_push_no_pull; 2254 "Add to sum (%" PRIu64 ") %" PRIu64 " of stat type %u - %s\n",
2155 sum_b_npush_npull += rps_peers[i].num_blocks_no_push_no_pull; 2255 sums[stat_type],
2156 sum_iss_push += rps_peers[i].num_issued_push; 2256 rps_peers[i].stats[stat_type],
2157 sum_iss_pull_req += rps_peers[i].num_issued_pull_req; 2257 stat_type,
2158 sum_iss_pull_rep += rps_peers[i].num_issued_pull_rep; 2258 stat_type_2_str (stat_type));
2159 sum_sent_push += rps_peers[i].num_sent_push; 2259 sums[stat_type] += rps_peers[i].stats[stat_type];
2160 sum_sent_pull_req += rps_peers[i].num_sent_pull_req; 2260 }
2161 sum_sent_pull_rep += rps_peers[i].num_sent_pull_rep;
2162 sum_recv_push += rps_peers[i].num_recv_push;
2163 sum_recv_pull_req += rps_peers[i].num_recv_pull_req;
2164 sum_recv_pull_rep += rps_peers[i].num_recv_pull_rep;
2165 } 2261 }
2166 to_file ("/tmp/rps/final_stats.dat", 2262 to_file ("/tmp/rps/final_stats.dat",
2167 "SUM %" 2263 "SUM %"
@@ -2170,22 +2266,22 @@ void write_final_stats (void){
2170 PRIu64 " %" PRIu64 " %" PRIu64 " %" /* issued */ 2266 PRIu64 " %" PRIu64 " %" PRIu64 " %" /* issued */
2171 PRIu64 " %" PRIu64 " %" PRIu64 " %" /* sent */ 2267 PRIu64 " %" PRIu64 " %" PRIu64 " %" /* sent */
2172 PRIu64 " %" PRIu64 " %" PRIu64 /* recv */, 2268 PRIu64 " %" PRIu64 " %" PRIu64 /* recv */,
2173 sum_rounds, 2269 sums[STAT_TYPE_ROUNDS],
2174 sum_blocks, 2270 sums[STAT_TYPE_BLOCKS],
2175 sum_b_mpush, 2271 sums[STAT_TYPE_BLOCKS_MANY_PUSH],
2176 sum_b_npush, 2272 sums[STAT_TYPE_BLOCKS_NO_PUSH],
2177 sum_b_npull, 2273 sums[STAT_TYPE_BLOCKS_NO_PULL],
2178 sum_b_mpush_npull, 2274 sums[STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL],
2179 sum_b_npush_npull, 2275 sums[STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL],
2180 sum_iss_push, 2276 sums[STAT_TYPE_ISSUED_PUSH_SEND],
2181 sum_iss_pull_req, 2277 sums[STAT_TYPE_ISSUED_PULL_REQ],
2182 sum_iss_pull_rep, 2278 sums[STAT_TYPE_ISSUED_PULL_REP],
2183 sum_sent_push, 2279 sums[STAT_TYPE_SENT_PUSH_SEND],
2184 sum_sent_pull_req, 2280 sums[STAT_TYPE_SENT_PULL_REQ],
2185 sum_sent_pull_rep, 2281 sums[STAT_TYPE_SENT_PULL_REP],
2186 sum_recv_push, 2282 sums[STAT_TYPE_RECV_PUSH_SEND],
2187 sum_recv_pull_req, 2283 sums[STAT_TYPE_RECV_PULL_REQ],
2188 sum_recv_pull_rep); 2284 sums[STAT_TYPE_RECV_PULL_REP]);
2189} 2285}
2190 2286
2191/** 2287/**
@@ -2208,7 +2304,7 @@ post_test_shutdown_ready_cb (void *cls,
2208 if (GNUNET_OK == success) 2304 if (GNUNET_OK == success)
2209 { 2305 {
2210 /* set flag that we we got the value */ 2306 /* set flag that we we got the value */
2211 rps_peer->stat_collected_flags |= stat_cls->stat_type; 2307 rps_peer->stat_collected_flags |= BIT(stat_cls->stat_type);
2212 } else { 2308 } else {
2213 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 2309 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
2214 "Peer %u did not receive statistics value\n", 2310 "Peer %u did not receive statistics value\n",
@@ -2237,134 +2333,6 @@ post_test_shutdown_ready_cb (void *cls,
2237} 2333}
2238 2334
2239/** 2335/**
2240 * @brief Converts string representation to the corresponding #STAT_TYPE enum.
2241 *
2242 * @param stat_str string representation of statistics specifier
2243 *
2244 * @return corresponding enum
2245 */
2246enum STAT_TYPE stat_str_2_type (const char *stat_str)
2247{
2248 if (0 == strncmp ("# rounds blocked - no pull replies", stat_str, strlen ("# rounds blocked - no pull replies")))
2249 {
2250 return STAT_TYPE_BLOCKS_NO_PULL;
2251 }
2252 else if (0 == strncmp ("# rounds blocked - too many pushes, no pull replies", stat_str, strlen ("# rounds blocked - too many pushes, no pull replies")))
2253 {
2254 return STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL;
2255 }
2256 else if (0 == strncmp ("# rounds blocked - too many pushes", stat_str, strlen ("# rounds blocked - too many pushes")))
2257 {
2258 return STAT_TYPE_BLOCKS_MANY_PUSH;
2259 }
2260 else if (0 == strncmp ("# rounds blocked - no pushes, no pull replies", stat_str, strlen ("# rounds blocked - no pushes, no pull replies")))
2261 {
2262 return STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL;
2263 }
2264 else if (0 == strncmp ("# rounds blocked - no pushes", stat_str, strlen ("# rounds blocked - no pushes")))
2265 {
2266 return STAT_TYPE_BLOCKS_NO_PUSH;
2267 }
2268 else if (0 == strncmp ("# rounds blocked", stat_str, strlen ("# rounds blocked")))
2269 {
2270 return STAT_TYPE_BLOCKS;
2271 }
2272 else if (0 == strncmp ("# rounds", stat_str, strlen ("# rounds")))
2273 {
2274 return STAT_TYPE_ROUNDS;
2275 }
2276 else if (0 == strncmp ("# push send issued", stat_str, strlen ("# push send issued")))
2277 {
2278 return STAT_TYPE_ISSUED_PUSH_SEND;
2279 }
2280 else if (0 == strncmp ("# pull request send issued", stat_str, strlen ("# pull request send issued")))
2281 {
2282 return STAT_TYPE_ISSUED_PULL_REQ;
2283 }
2284 else if (0 == strncmp ("# pull reply send issued", stat_str, strlen ("# pull reply send issued")))
2285 {
2286 return STAT_TYPE_ISSUED_PULL_REP;
2287 }
2288 else if (0 == strncmp ("# pushes sent", stat_str, strlen ("# pushes sent")))
2289 {
2290 return STAT_TYPE_SENT_PUSH_SEND;
2291 }
2292 else if (0 == strncmp ("# pull requests sent", stat_str, strlen ("# pull requests sent")))
2293 {
2294 return STAT_TYPE_SENT_PULL_REQ;
2295 }
2296 else if (0 == strncmp ("# pull replys sent", stat_str, strlen ("# pull replys sent")))
2297 {
2298 return STAT_TYPE_SENT_PULL_REP;
2299 }
2300 else if (0 == strncmp ("# push message received", stat_str, strlen ("# push message received")))
2301 {
2302 return STAT_TYPE_RECV_PUSH_SEND;
2303 }
2304 else if (0 == strncmp ("# pull request message received", stat_str, strlen ("# pull request message received")))
2305 {
2306 return STAT_TYPE_RECV_PULL_REQ;
2307 }
2308 else if (0 == strncmp ("# pull reply messages received", stat_str, strlen ("# pull reply messages received")))
2309 {
2310 return STAT_TYPE_RECV_PULL_REP;
2311 }
2312 return STAT_TYPE_MAX;
2313}
2314
2315
2316/**
2317 * @brief Converts #STAT_TYPE enum to the equivalent string representation that
2318 * is stored with the statistics service.
2319 *
2320 * @param stat_type #STAT_TYPE enum
2321 *
2322 * @return string representation that matches statistics value
2323 */
2324char* stat_type_2_str (enum STAT_TYPE stat_type)
2325{
2326 switch (stat_type)
2327 {
2328 case STAT_TYPE_ROUNDS:
2329 return "# rounds";
2330 case STAT_TYPE_BLOCKS:
2331 return "# rounds blocked";
2332 case STAT_TYPE_BLOCKS_MANY_PUSH:
2333 return "# rounds blocked - too many pushes";
2334 case STAT_TYPE_BLOCKS_NO_PUSH:
2335 return "# rounds blocked - no pushes";
2336 case STAT_TYPE_BLOCKS_NO_PULL:
2337 return "# rounds blocked - no pull replies";
2338 case STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL:
2339 return "# rounds blocked - too many pushes, no pull replies";
2340 case STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL:
2341 return "# rounds blocked - no pushes, no pull replies";
2342 case STAT_TYPE_ISSUED_PUSH_SEND:
2343 return "# push send issued";
2344 case STAT_TYPE_ISSUED_PULL_REQ:
2345 return "# pull request send issued";
2346 case STAT_TYPE_ISSUED_PULL_REP:
2347 return "# pull reply send issued";
2348 case STAT_TYPE_SENT_PUSH_SEND:
2349 return "# pushes sent";
2350 case STAT_TYPE_SENT_PULL_REQ:
2351 return "# pull requests sent";
2352 case STAT_TYPE_SENT_PULL_REP:
2353 return "# pull replys sent";
2354 case STAT_TYPE_RECV_PUSH_SEND:
2355 return "# push message received";
2356 case STAT_TYPE_RECV_PULL_REQ:
2357 return "# pull request message received";
2358 case STAT_TYPE_RECV_PULL_REP:
2359 return "# pull reply messages received";
2360 case STAT_TYPE_MAX:
2361 default:
2362 return "ERROR";
2363 ;
2364 }
2365}
2366
2367/**
2368 * Callback function to process statistic values. 2336 * Callback function to process statistic values.
2369 * 2337 *
2370 * @param cls closure 2338 * @param cls closure
@@ -2394,52 +2362,52 @@ stat_iterator (void *cls,
2394 switch (stat_str_2_type (name)) 2362 switch (stat_str_2_type (name))
2395 { 2363 {
2396 case STAT_TYPE_ROUNDS: 2364 case STAT_TYPE_ROUNDS:
2397 rps_peer->num_rounds = value; 2365 rps_peer->stats[STAT_TYPE_ROUNDS] = value;
2398 break; 2366 break;
2399 case STAT_TYPE_BLOCKS: 2367 case STAT_TYPE_BLOCKS:
2400 rps_peer->num_blocks = value; 2368 rps_peer->stats[STAT_TYPE_BLOCKS] = value;
2401 break; 2369 break;
2402 case STAT_TYPE_BLOCKS_MANY_PUSH: 2370 case STAT_TYPE_BLOCKS_MANY_PUSH:
2403 rps_peer->num_blocks_many_push = value; 2371 rps_peer->stats[STAT_TYPE_BLOCKS_MANY_PUSH] = value;
2404 break; 2372 break;
2405 case STAT_TYPE_BLOCKS_NO_PUSH: 2373 case STAT_TYPE_BLOCKS_NO_PUSH:
2406 rps_peer->num_blocks_no_push = value; 2374 rps_peer->stats[STAT_TYPE_BLOCKS_NO_PUSH] = value;
2407 break; 2375 break;
2408 case STAT_TYPE_BLOCKS_NO_PULL: 2376 case STAT_TYPE_BLOCKS_NO_PULL:
2409 rps_peer->num_blocks_no_pull = value; 2377 rps_peer->stats[STAT_TYPE_BLOCKS_NO_PULL] = value;
2410 break; 2378 break;
2411 case STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL: 2379 case STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL:
2412 rps_peer->num_blocks_many_push_no_pull = value; 2380 rps_peer->stats[STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL] = value;
2413 break; 2381 break;
2414 case STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL: 2382 case STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL:
2415 rps_peer->num_blocks_no_push_no_pull = value; 2383 rps_peer->stats[STAT_TYPE_BLOCKS] = value;
2416 break; 2384 break;
2417 case STAT_TYPE_ISSUED_PUSH_SEND: 2385 case STAT_TYPE_ISSUED_PUSH_SEND:
2418 rps_peer->num_issued_push = value; 2386 rps_peer->stats[STAT_TYPE_ISSUED_PUSH_SEND] = value;
2419 break; 2387 break;
2420 case STAT_TYPE_ISSUED_PULL_REQ: 2388 case STAT_TYPE_ISSUED_PULL_REQ:
2421 rps_peer->num_issued_pull_req = value; 2389 rps_peer->stats[STAT_TYPE_ISSUED_PULL_REQ] = value;
2422 break; 2390 break;
2423 case STAT_TYPE_ISSUED_PULL_REP: 2391 case STAT_TYPE_ISSUED_PULL_REP:
2424 rps_peer->num_issued_pull_rep = value; 2392 rps_peer->stats[STAT_TYPE_ISSUED_PULL_REP] = value;
2425 break; 2393 break;
2426 case STAT_TYPE_SENT_PUSH_SEND: 2394 case STAT_TYPE_SENT_PUSH_SEND:
2427 rps_peer->num_sent_push = value; 2395 rps_peer->stats[STAT_TYPE_SENT_PUSH_SEND] = value;
2428 break; 2396 break;
2429 case STAT_TYPE_SENT_PULL_REQ: 2397 case STAT_TYPE_SENT_PULL_REQ:
2430 rps_peer->num_sent_pull_req = value; 2398 rps_peer->stats[STAT_TYPE_SENT_PULL_REQ] = value;
2431 break; 2399 break;
2432 case STAT_TYPE_SENT_PULL_REP: 2400 case STAT_TYPE_SENT_PULL_REP:
2433 rps_peer->num_sent_pull_rep = value; 2401 rps_peer->stats[STAT_TYPE_SENT_PULL_REP] = value;
2434 break; 2402 break;
2435 case STAT_TYPE_RECV_PUSH_SEND: 2403 case STAT_TYPE_RECV_PUSH_SEND:
2436 rps_peer->num_recv_push = value; 2404 rps_peer->stats[STAT_TYPE_RECV_PUSH_SEND] = value;
2437 break; 2405 break;
2438 case STAT_TYPE_RECV_PULL_REQ: 2406 case STAT_TYPE_RECV_PULL_REQ:
2439 rps_peer->num_recv_pull_req = value; 2407 rps_peer->stats[STAT_TYPE_RECV_PULL_REQ] = value;
2440 break; 2408 break;
2441 case STAT_TYPE_RECV_PULL_REP: 2409 case STAT_TYPE_RECV_PULL_REP:
2442 rps_peer->num_recv_pull_rep = value; 2410 rps_peer->stats[STAT_TYPE_RECV_PULL_REP] = value;
2443 break; 2411 break;
2444 case STAT_TYPE_MAX: 2412 case STAT_TYPE_MAX:
2445 default: 2413 default:
@@ -2466,9 +2434,9 @@ void post_profiler (struct RPSPeer *rps_peer)
2466 uint32_t stat_type; 2434 uint32_t stat_type;
2467 for (stat_type = STAT_TYPE_ROUNDS; 2435 for (stat_type = STAT_TYPE_ROUNDS;
2468 stat_type < STAT_TYPE_MAX; 2436 stat_type < STAT_TYPE_MAX;
2469 stat_type = stat_type <<1) 2437 stat_type++)
2470 { 2438 {
2471 if (stat_type & cur_test_run.stat_collect_flags) 2439 if (BIT(stat_type) & cur_test_run.stat_collect_flags)
2472 { 2440 {
2473 stat_cls = GNUNET_malloc (sizeof (struct STATcls)); 2441 stat_cls = GNUNET_malloc (sizeof (struct STATcls));
2474 stat_cls->rps_peer = rps_peer; 2442 stat_cls->rps_peer = rps_peer;
@@ -2634,22 +2602,22 @@ run (void *cls,
2634 cur_test_run.have_churn = HAVE_NO_CHURN; 2602 cur_test_run.have_churn = HAVE_NO_CHURN;
2635 cur_test_run.have_quick_quit = HAVE_NO_QUICK_QUIT; 2603 cur_test_run.have_quick_quit = HAVE_NO_QUICK_QUIT;
2636 cur_test_run.have_collect_statistics = COLLECT_STATISTICS; 2604 cur_test_run.have_collect_statistics = COLLECT_STATISTICS;
2637 cur_test_run.stat_collect_flags = STAT_TYPE_ROUNDS | 2605 cur_test_run.stat_collect_flags = BIT(STAT_TYPE_ROUNDS) |
2638 STAT_TYPE_BLOCKS | 2606 BIT(STAT_TYPE_BLOCKS) |
2639 STAT_TYPE_BLOCKS_MANY_PUSH | 2607 BIT(STAT_TYPE_BLOCKS_MANY_PUSH) |
2640 STAT_TYPE_BLOCKS_NO_PUSH | 2608 BIT(STAT_TYPE_BLOCKS_NO_PUSH) |
2641 STAT_TYPE_BLOCKS_NO_PULL | 2609 BIT(STAT_TYPE_BLOCKS_NO_PULL) |
2642 STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL | 2610 BIT(STAT_TYPE_BLOCKS_MANY_PUSH_NO_PULL) |
2643 STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL | 2611 BIT(STAT_TYPE_BLOCKS_NO_PUSH_NO_PULL) |
2644 STAT_TYPE_ISSUED_PUSH_SEND | 2612 BIT(STAT_TYPE_ISSUED_PUSH_SEND) |
2645 STAT_TYPE_ISSUED_PULL_REQ | 2613 BIT(STAT_TYPE_ISSUED_PULL_REQ) |
2646 STAT_TYPE_ISSUED_PULL_REP | 2614 BIT(STAT_TYPE_ISSUED_PULL_REP) |
2647 STAT_TYPE_SENT_PUSH_SEND | 2615 BIT(STAT_TYPE_SENT_PUSH_SEND) |
2648 STAT_TYPE_SENT_PULL_REQ | 2616 BIT(STAT_TYPE_SENT_PULL_REQ) |
2649 STAT_TYPE_SENT_PULL_REP | 2617 BIT(STAT_TYPE_SENT_PULL_REP) |
2650 STAT_TYPE_RECV_PUSH_SEND | 2618 BIT(STAT_TYPE_RECV_PUSH_SEND) |
2651 STAT_TYPE_RECV_PULL_REQ | 2619 BIT(STAT_TYPE_RECV_PULL_REQ) |
2652 STAT_TYPE_RECV_PULL_REP; 2620 BIT(STAT_TYPE_RECV_PULL_REP);
2653 cur_test_run.have_collect_view = COLLECT_VIEW; 2621 cur_test_run.have_collect_view = COLLECT_VIEW;
2654 timeout_s = 300; 2622 timeout_s = 300;
2655 2623
@@ -2672,11 +2640,6 @@ run (void *cls,
2672 ok = 1; 2640 ok = 1;
2673 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 2641 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
2674 "before _run()\n"); 2642 "before _run()\n");
2675 //ret_value = GNUNET_TESTBED_test_run (cur_test_run.name,
2676 // "test_rps.conf",
2677 // num_peers,
2678 // 0, NULL, NULL,
2679 // &test_run, NULL);
2680 GNUNET_TESTBED_run (NULL, 2643 GNUNET_TESTBED_run (NULL,
2681 cfg, 2644 cfg,
2682 num_peers, 2645 num_peers,