diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-09-18 14:28:37 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-09-18 14:28:37 +0000 |
commit | a168214fc8a64ae54d10c52f43f5cfdbe539d17b (patch) | |
tree | 7a972c46da4ab0f728fdd286848596cbad165326 /src/ats-tests/perf_ats_logging.c | |
parent | 4119281014d1002eb3f6477669455e242cf6fb88 (diff) | |
download | gnunet-a168214fc8a64ae54d10c52f43f5cfdbe539d17b.tar.gz gnunet-a168214fc8a64ae54d10c52f43f5cfdbe539d17b.zip |
log handling
Diffstat (limited to 'src/ats-tests/perf_ats_logging.c')
-rw-r--r-- | src/ats-tests/perf_ats_logging.c | 84 |
1 files changed, 72 insertions, 12 deletions
diff --git a/src/ats-tests/perf_ats_logging.c b/src/ats-tests/perf_ats_logging.c index ac55b167c..b97b97533 100644 --- a/src/ats-tests/perf_ats_logging.c +++ b/src/ats-tests/perf_ats_logging.c | |||
@@ -35,13 +35,38 @@ static struct BenchmarkPeer *peers; | |||
35 | static int num_peers; | 35 | static int num_peers; |
36 | static char *name; | 36 | static char *name; |
37 | 37 | ||
38 | struct LoggingTimestep | ||
39 | { | ||
40 | struct GNUNET_TIME_Absolute timestamp; | ||
41 | |||
42 | struct LoggingTimestep *next; | ||
43 | struct LoggingTimestep *prev; | ||
44 | }; | ||
45 | |||
46 | struct LoggingPeer | ||
47 | { | ||
48 | struct BenchmarkPeer *peer; | ||
49 | |||
50 | struct GNUNET_TIME_Absolute start; | ||
51 | |||
52 | struct LoggingTimestep *head; | ||
53 | struct LoggingTimestep *tail; | ||
54 | }; | ||
55 | |||
56 | /** | ||
57 | * Log structure of length num_peers | ||
58 | */ | ||
59 | static struct LoggingPeer *lp; | ||
60 | |||
38 | 61 | ||
39 | static void | 62 | static void |
40 | write_to_file () | 63 | write_to_file () |
41 | { | 64 | { |
42 | struct GNUNET_DISK_FileHandle *f; | 65 | struct GNUNET_DISK_FileHandle *f; |
43 | char * filename; | 66 | char * filename; |
44 | 67 | char *data; | |
68 | struct LoggingTimestep *cur; | ||
69 | int c_m; | ||
45 | 70 | ||
46 | GNUNET_asprintf (&filename, "%llu_%s.data", GNUNET_TIME_absolute_get().abs_value_us,name); | 71 | GNUNET_asprintf (&filename, "%llu_%s.data", GNUNET_TIME_absolute_get().abs_value_us,name); |
47 | 72 | ||
@@ -55,11 +80,20 @@ write_to_file () | |||
55 | return; | 80 | return; |
56 | } | 81 | } |
57 | 82 | ||
58 | if (GNUNET_SYSERR == GNUNET_DISK_file_write(f, "TEST", strlen("TEST"))) | 83 | for (c_m = 0; c_m < num_peers; c_m++) |
59 | { | 84 | { |
60 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot write data to log file `%s'\n", filename); | 85 | for (cur = lp[c_m].head; NULL != cur; cur = cur->next) |
61 | GNUNET_free (filename); | 86 | { |
62 | return; | 87 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
88 | "Master [%u]: timestamp %llu \n", lp[c_m].peer->no, cur->timestamp); | ||
89 | |||
90 | GNUNET_asprintf (&data, "%llu;\n", cur->timestamp); | ||
91 | |||
92 | if (GNUNET_SYSERR == GNUNET_DISK_file_write(f, data, strlen(data))) | ||
93 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Cannot write data to log file `%s'\n", filename); | ||
94 | GNUNET_free (data); | ||
95 | |||
96 | } | ||
63 | } | 97 | } |
64 | 98 | ||
65 | if (GNUNET_SYSERR == GNUNET_DISK_file_close(f)) | 99 | if (GNUNET_SYSERR == GNUNET_DISK_file_close(f)) |
@@ -78,20 +112,24 @@ collect_log_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
78 | { | 112 | { |
79 | int c_m; | 113 | int c_m; |
80 | int c_s; | 114 | int c_s; |
81 | log_task = GNUNET_SCHEDULER_NO_TASK; | 115 | struct LoggingTimestep *lt; |
82 | |||
83 | struct BenchmarkPeer *m; | ||
84 | struct BenchmarkPartner *p; | 116 | struct BenchmarkPartner *p; |
85 | 117 | ||
118 | log_task = GNUNET_SCHEDULER_NO_TASK; | ||
119 | |||
86 | for (c_m = 0; c_m < num_peers; c_m++) | 120 | for (c_m = 0; c_m < num_peers; c_m++) |
87 | { | 121 | { |
88 | m = &peers[c_m]; | 122 | lt = GNUNET_malloc (sizeof (struct LoggingTimestep)); |
89 | for (c_s = 0; c_s < m->num_partners; c_s++) | 123 | GNUNET_CONTAINER_DLL_insert_tail(lp[c_m].head, lp[c_m].tail, lt); |
124 | lt->timestamp = GNUNET_TIME_absolute_get(); | ||
125 | |||
126 | for (c_s = 0; c_s < lp[c_m].peer->num_partners; c_s++) | ||
90 | { | 127 | { |
91 | p = &peers[c_m].partners[c_s]; | 128 | p = &peers[c_m].partners[c_s]; |
92 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 129 | |
130 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | ||
93 | "Master [%u]: slave [%u]\n", | 131 | "Master [%u]: slave [%u]\n", |
94 | m->no, p->dest->no); | 132 | lp->peer->no, p->dest->no); |
95 | } | 133 | } |
96 | } | 134 | } |
97 | 135 | ||
@@ -106,7 +144,9 @@ collect_log_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
106 | void | 144 | void |
107 | perf_logging_stop () | 145 | perf_logging_stop () |
108 | { | 146 | { |
147 | int c_m; | ||
109 | struct GNUNET_SCHEDULER_TaskContext tc; | 148 | struct GNUNET_SCHEDULER_TaskContext tc; |
149 | struct LoggingTimestep *cur; | ||
110 | 150 | ||
111 | if (GNUNET_SCHEDULER_NO_TASK != log_task) | 151 | if (GNUNET_SCHEDULER_NO_TASK != log_task) |
112 | GNUNET_SCHEDULER_cancel (log_task); | 152 | GNUNET_SCHEDULER_cancel (log_task); |
@@ -118,11 +158,23 @@ perf_logging_stop () | |||
118 | _("Stop logging\n")); | 158 | _("Stop logging\n")); |
119 | 159 | ||
120 | write_to_file (); | 160 | write_to_file (); |
161 | |||
162 | for (c_m = 0; c_m < num_peers; c_m++) | ||
163 | { | ||
164 | while (NULL != (cur = lp[c_m].head)) | ||
165 | { | ||
166 | GNUNET_CONTAINER_DLL_remove (lp[c_m].head, lp[c_m].tail, cur); | ||
167 | GNUNET_free (cur); | ||
168 | } | ||
169 | } | ||
170 | |||
171 | GNUNET_free (lp); | ||
121 | } | 172 | } |
122 | 173 | ||
123 | void | 174 | void |
124 | perf_logging_start (char * testname, struct BenchmarkPeer *masters, int num_masters) | 175 | perf_logging_start (char * testname, struct BenchmarkPeer *masters, int num_masters) |
125 | { | 176 | { |
177 | int c_m; | ||
126 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, | 178 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, |
127 | _("Start logging `%s'\n"), testname); | 179 | _("Start logging `%s'\n"), testname); |
128 | 180 | ||
@@ -130,6 +182,14 @@ perf_logging_start (char * testname, struct BenchmarkPeer *masters, int num_mast | |||
130 | num_peers = num_masters; | 182 | num_peers = num_masters; |
131 | name = testname; | 183 | name = testname; |
132 | 184 | ||
185 | lp = GNUNET_malloc (num_masters * sizeof (struct LoggingPeer)); | ||
186 | |||
187 | for (c_m = 0; c_m < num_masters; c_m ++) | ||
188 | { | ||
189 | lp[c_m].peer = &masters[c_m]; | ||
190 | lp[c_m].start = GNUNET_TIME_absolute_get(); | ||
191 | } | ||
192 | |||
133 | /* Schedule logging task */ | 193 | /* Schedule logging task */ |
134 | log_task = GNUNET_SCHEDULER_add_now (&collect_log_task, NULL); | 194 | log_task = GNUNET_SCHEDULER_add_now (&collect_log_task, NULL); |
135 | } | 195 | } |