psyc/social: local join flag; social service: leave place, save _file
[oweals/gnunet.git] / src / nse / gnunet-nse-profiler.c
index d55e61e6051717432913dcc75664d532188f8651..b8fa293d58de6faf86dcf5095a660b044eac89a9 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     (C) 2011, 2012 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2011, 2012 Christian Grothoff (and other contributing authors)
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -14,8 +14,8 @@
 
      You should have received a copy of the GNU General Public License
      along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
+     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+     Boston, MA 02110-1301, USA.
 */
 /**
  * @file nse/gnunet-nse-profiler.c
@@ -83,39 +83,6 @@ struct NSEPeer
 };
 
 
-/**
- * Context for the stats task?
- */
-struct StatsContext
-{
-
-  /**
-   * How many messages have peers received during the test.
-   */
-  unsigned long long total_nse_received_messages;
-
-  /**
-   * How many messages have peers send during the test (should be == received).
-   */
-  unsigned long long total_nse_transmitted_messages;
-
-  /**
-   * How many messages have travelled an edge in both directions.
-   */
-  unsigned long long total_nse_cross;
-
-  /**
-   * How many extra messages per edge (corrections) have been received.
-   */
-  unsigned long long total_nse_extra;
-
-  /**
-   * How many messages have been discarded.
-   */
-  unsigned long long total_discarded;
-};
-
-
 /**
  * Operation map entry
  */
@@ -166,7 +133,7 @@ static int verbose;
 
 /**
  * Name of the file with the hosts to run the test over (configuration option)
- */ 
+ */
 static char *hosts_file;
 
 /**
@@ -212,7 +179,7 @@ static struct GNUNET_CONFIGURATION_Handle *testing_cfg;
 /**
  * The shutdown task
  */
-static GNUNET_SCHEDULER_TaskIdentifier shutdown_task_id;
+static struct GNUNET_SCHEDULER_Task * shutdown_task_id;
 
 /**
  * Maximum number of connections to NSE services.
@@ -303,11 +270,11 @@ close_monitor_connections ()
 static void
 shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
-  shutdown_task_id = GNUNET_SCHEDULER_NO_TASK;
+  shutdown_task_id = NULL;
   if (GNUNET_YES == shutting_down)
     return;
   shutting_down = GNUNET_YES;
-  LOG_DEBUG ("Ending test.\n");    
+  LOG_DEBUG ("Ending test.\n");
   close_monitor_connections ();
   if (NULL != data_file)
   {
@@ -331,7 +298,7 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 static void
 shutdown_now ()
 {
-  if (GNUNET_SCHEDULER_NO_TASK != shutdown_task_id)
+  if (NULL != shutdown_task_id)
     GNUNET_SCHEDULER_cancel (shutdown_task_id);
   shutdown_task_id = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL);
 }
@@ -347,7 +314,7 @@ shutdown_now ()
  *                of the size estimation values seen
  */
 static void
-handle_estimate (void *cls, 
+handle_estimate (void *cls,
                 struct GNUNET_TIME_Absolute timestamp,
                  double estimate, double std_dev)
 {
@@ -362,11 +329,11 @@ handle_estimate (void *cls,
               peer, estimate, std_dev);
       return;
     }
-  size = GNUNET_snprintf (output_buffer, 
+  size = GNUNET_snprintf (output_buffer,
                          sizeof (output_buffer),
                          "%p %llu %llu %f %f %f\n",
                          peer, peers_running,
-                         timestamp.abs_value,
+                         (unsigned long long) timestamp.abs_value_us,
                          GNUNET_NSE_log_estimate_to_n (estimate), estimate,
                          std_dev);
   if (size != GNUNET_DISK_file_write (output_file, output_buffer, size))
@@ -378,7 +345,7 @@ handle_estimate (void *cls,
 /**
  * Adapter function called to establish a connection to
  * NSE service.
- * 
+ *
  * @param cls closure (the 'struct NSEPeer')
  * @param cfg configuration of the peer to connect to; will be available until
  *          GNUNET_TESTBED_operation_done() is called on the operation returned
@@ -398,11 +365,11 @@ nse_connect_adapter (void *cls,
 /**
  * Adapter function called to destroy a connection to
  * NSE service.
- * 
+ *
  * @param cls closure
  * @param op_result service handle returned from the connect adapter
  */
-static void 
+static void
 nse_disconnect_adapter (void *cls,
                        void *op_result)
 {
@@ -413,16 +380,18 @@ nse_disconnect_adapter (void *cls,
 /**
  * Callback function to process statistic values.
  *
- * @param cls struct StatsContext
+ * @param cls `struct NSEPeer`
  * @param subsystem name of subsystem that created the statistic
  * @param name the name of the datum
  * @param value the current value
- * @param is_persistent GNUNET_YES if the value is persistent, GNUNET_NO if not
- * @return GNUNET_OK to continue, GNUNET_SYSERR to abort iteration
+ * @param is_persistent #GNUNET_YES if the value is persistent, #GNUNET_NO if not
+ * @return #GNUNET_OK to continue, #GNUNET_SYSERR to abort iteration
  */
 static int
-stat_iterator (void *cls, const char *subsystem, const char *name,
-                     uint64_t value, int is_persistent)
+stat_iterator (void *cls,
+              const char *subsystem,
+              const char *name,
+              uint64_t value, int is_persistent)
 {
   char *output_buffer;
   struct GNUNET_TIME_Absolute now;
@@ -435,12 +404,15 @@ stat_iterator (void *cls, const char *subsystem, const char *name,
   if (0 != flag)
     flag = 1;
   size = GNUNET_asprintf (&output_buffer, "%llu %llu %u\n",
-                          now.abs_value/1000, value, flag);
+                          now.abs_value_us / 1000LL / 1000LL,
+                         value, flag);
   if (size != GNUNET_DISK_file_write (data_file, output_buffer, size))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Unable to write to file!\n");
+    GNUNET_free (output_buffer);
     return GNUNET_SYSERR;
   }
+  GNUNET_free (output_buffer);
   return GNUNET_OK;
 }
 
@@ -459,7 +431,7 @@ stat_connect_adapter (void *cls,
                       const struct GNUNET_CONFIGURATION_Handle *cfg)
 {
   struct NSEPeer *peer = cls;
-  
+
   peer->sh = GNUNET_STATISTICS_create ("nse-profiler", cfg);
   return peer->sh;
 }
@@ -530,18 +502,18 @@ connect_nse_service ()
   unsigned int connections;
 
   if (0 == connection_limit)
-    return;  
+    return;
   LOG_DEBUG ("Connecting to nse service of peers\n");
   connections = 0;
   for (i = 0; i < num_peers_in_round[current_round]; i++)
   {
-    if ((num_peers_in_round[current_round] > connection_limit) && 
+    if ((num_peers_in_round[current_round] > connection_limit) &&
        (0 != (i % (num_peers_in_round[current_round] / connection_limit))))
       continue;
     LOG_DEBUG ("Connecting to nse service of peer %d\n", i);
-    current_peer = GNUNET_malloc (sizeof (struct NSEPeer));
+    current_peer = GNUNET_new (struct NSEPeer);
     current_peer->daemon = daemons[i];
-    current_peer->nse_op 
+    current_peer->nse_op
         = GNUNET_TESTBED_service_connect (NULL,
                                           current_peer->daemon,
                                           "nse",
@@ -573,7 +545,7 @@ connect_nse_service ()
  * @param tc scheduler context (unused)
  */
 static void
-next_round (void *cls, 
+next_round (void *cls,
            const struct GNUNET_SCHEDULER_TaskContext *tc);
 
 
@@ -586,7 +558,7 @@ next_round (void *cls,
  * @param tc unused
  */
 static void
-finish_round (void *cls, 
+finish_round (void *cls,
              const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
@@ -621,7 +593,7 @@ make_oplist_entry ()
 {
   struct OpListEntry *entry;
 
-  entry = GNUNET_malloc (sizeof (struct OpListEntry));
+  entry = GNUNET_new (struct OpListEntry);
   GNUNET_CONTAINER_DLL_insert_tail (oplist_head, oplist_tail, entry);
   return entry;
 }
@@ -634,12 +606,12 @@ make_oplist_entry ()
  * @param op the operation handle
  * @param emsg NULL on success; otherwise an error description
  */
-static void 
+static void
 manage_service_cb (void *cls, struct GNUNET_TESTBED_Operation *op,
                    const char *emsg)
 {
   struct OpListEntry *entry = cls;
-  
+
   GNUNET_TESTBED_operation_done (entry->op);
   if (NULL != emsg)
   {
@@ -701,13 +673,13 @@ adjust_running_peers ()
  * @param tc unused
  */
 static void
-next_round (void *cls, 
+next_round (void *cls,
            const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
     return;
   LOG_DEBUG ("Disconnecting nse service of peers\n");
-  current_round++;  
+  current_round++;
   if (current_round == num_rounds)
     {
       /* this was the last round, terminate */
@@ -733,7 +705,7 @@ next_round (void *cls,
  * @param event information on what is happening
  */
 static void
-master_controller_cb (void *cls, 
+master_controller_cb (void *cls,
                      const struct GNUNET_TESTBED_EventInformation *event)
 {
   switch (event->type)
@@ -754,6 +726,7 @@ master_controller_cb (void *cls,
  * Signature of a main function for a testcase.
  *
  * @param cls NULL
+ * @param h the run handle
  * @param num_peers_ number of peers in 'peers'
  * @param peers handle to peers run in the testbed.  NULL upon timeout (see
  *          GNUNET_TESTBED_test_run()).
@@ -762,8 +735,9 @@ master_controller_cb (void *cls,
  * @param links_failed the number of overlay link connection attempts that
  *          failed
  */
-static void 
+static void
 test_master (void *cls,
+             struct GNUNET_TESTBED_RunHandle *h,
              unsigned int num_peers_,
              struct GNUNET_TESTBED_Peer **peers,
              unsigned int links_succeeded,
@@ -801,7 +775,7 @@ run (void *cls, char *const *args, const char *cfgfile,
 {
   char *tok;
   uint64_t event_mask;
-  unsigned int num;  
+  unsigned int num;
 
   ok = 1;
   testing_cfg = GNUNET_CONFIGURATION_dup (cfg);
@@ -832,7 +806,7 @@ run (void *cls, char *const *args, const char *cfgfile,
       return;
     }
   if ( (NULL != data_filename) &&
-       (NULL == (data_file = 
+       (NULL == (data_file =
                 GNUNET_DISK_file_open (data_filename,
                                        GNUNET_DISK_OPEN_READWRITE |
                                        GNUNET_DISK_OPEN_TRUNCATE |
@@ -865,7 +839,7 @@ run (void *cls, char *const *args, const char *cfgfile,
                       NULL,     /* master_controller_cb cls */
                       &test_master,
                       NULL);    /* test_master cls */
-  shutdown_task_id = 
+  shutdown_task_id =
       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL,
                                     &shutdown_task, NULL);
 }