sensor: merged reporting module
[oweals/gnunet.git] / src / sensor / gnunet-service-sensor.c
index 1df300410e987d16f71af8a531074e4ccb536f66..bf88094eae472c397f9c44dc6b671a744cdee9d6 100644 (file)
  */
 static const struct GNUNET_CONFIGURATION_Handle *cfg;
 
+/**
+ * Path to sensor definitions directory
+ */
+static char *sensor_dir;
+
 /**
  * Hashmap of loaded sensor definitions
  */
@@ -97,8 +102,7 @@ stop ()
 {
   SENSOR_update_stop ();
   SENSOR_analysis_stop ();
-  SENSOR_reporting_value_stop ();
-  SENSOR_reporting_anomaly_stop ();
+  SENSOR_reporting_stop ();
   GNUNET_SENSOR_destroy_sensors (sensors);
 }
 
@@ -123,6 +127,11 @@ shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
     GNUNET_PEERSTORE_disconnect (peerstore, GNUNET_YES);
     peerstore = NULL;
   }
+  if (NULL != sensor_dir)
+  {
+    GNUNET_free (sensor_dir);
+    sensor_dir = NULL;
+  }
   GNUNET_SCHEDULER_shutdown ();
 }
 
@@ -479,7 +488,6 @@ sensor_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct GNUNET_SENSOR_SensorInfo *sensorinfo = cls;
   int check_result;
-  char *sensors_dir;
   char *process_path;
 
   sensorinfo->execution_task =
@@ -522,12 +530,11 @@ sensor_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
     if (GNUNET_SYSERR == check_result)
     {
       //search in sensor directory
-      sensors_dir = GNUNET_SENSOR_get_sensor_dir ();
       GNUNET_free (process_path);
-      GNUNET_asprintf (&process_path, "%s%s-files%s%s", sensors_dir,
+      GNUNET_asprintf (&process_path, "%s%s-files%s%s", sensor_dir,
                        sensorinfo->name, DIR_SEPARATOR_STR,
                        sensorinfo->ext_process);
-      GNUNET_free (sensors_dir);
+      GNUNET_free (sensor_dir);
       check_result =
           GNUNET_OS_check_helper_binary (process_path, GNUNET_NO, NULL);
     }
@@ -611,10 +618,9 @@ schedule_all_sensors ()
 static void
 start ()
 {
-  sensors = GNUNET_SENSOR_load_all_sensors ();
+  sensors = GNUNET_SENSOR_load_all_sensors (sensor_dir);
   schedule_all_sensors ();
-  SENSOR_reporting_value_start (cfg, sensors);
-  SENSOR_reporting_anomaly_start (cfg, sensors);
+  SENSOR_reporting_start (cfg, sensors);
   SENSOR_analysis_start (cfg, sensors);
   SENSOR_update_start (cfg, sensors, &reset);
 }
@@ -640,6 +646,10 @@ run (void *cls, struct GNUNET_SERVER_Handle *server,
   };
 
   cfg = c;
+  if (GNUNET_OK !=
+      GNUNET_CONFIGURATION_get_value_filename (cfg, "SENSOR", "SENSOR_DIR",
+                                               &sensor_dir))
+    sensor_dir = GNUNET_SENSOR_get_default_sensor_dir ();
   statistics = GNUNET_STATISTICS_create ("sensor", cfg);
   GNUNET_CRYPTO_get_peer_identity (cfg, &peerid);
   peerstore = GNUNET_PEERSTORE_connect (cfg);