aboutsummaryrefslogtreecommitdiff
path: root/src/ats-tests/perf_ats_logging.c
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-09-18 14:28:37 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-09-18 14:28:37 +0000
commita168214fc8a64ae54d10c52f43f5cfdbe539d17b (patch)
tree7a972c46da4ab0f728fdd286848596cbad165326 /src/ats-tests/perf_ats_logging.c
parent4119281014d1002eb3f6477669455e242cf6fb88 (diff)
downloadgnunet-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.c84
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;
35static int num_peers; 35static int num_peers;
36static char *name; 36static char *name;
37 37
38struct LoggingTimestep
39{
40 struct GNUNET_TIME_Absolute timestamp;
41
42 struct LoggingTimestep *next;
43 struct LoggingTimestep *prev;
44};
45
46struct 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 */
59static struct LoggingPeer *lp;
60
38 61
39static void 62static void
40write_to_file () 63write_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)
106void 144void
107perf_logging_stop () 145perf_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
123void 174void
124perf_logging_start (char * testname, struct BenchmarkPeer *masters, int num_masters) 175perf_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}