gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r33155 - in gnunet/src/sensor: . sensors


From: gnunet
Subject: [GNUnet-SVN] r33155 - in gnunet/src/sensor: . sensors
Date: Fri, 2 May 2014 20:18:00 +0200

Author: otarabai
Date: 2014-05-02 20:18:00 +0200 (Fri, 02 May 2014)
New Revision: 33155

Modified:
   gnunet/src/sensor/gnunet-service-sensor.c
   gnunet/src/sensor/sensors/averagepingrtt
   gnunet/src/sensor/sensors/connectedpeers
   gnunet/src/sensor/sensors/gnunetversion
Log:
towards sensor scheduling


Modified: gnunet/src/sensor/gnunet-service-sensor.c
===================================================================
--- gnunet/src/sensor/gnunet-service-sensor.c   2014-05-02 15:28:43 UTC (rev 
33154)
+++ gnunet/src/sensor/gnunet-service-sensor.c   2014-05-02 18:18:00 UTC (rev 
33155)
@@ -23,6 +23,7 @@
  * @brief sensor service implementation
  * @author Omar Tarabai
  */
+#include <inttypes.h>
 #include "platform.h"
 #include "gnunet_util_lib.h"
 #include "sensor.h"
@@ -59,6 +60,11 @@
   char *description;
 
   /*
+   * Sensor currently enabled
+   */
+  int enabled;
+
+  /*
    * Category under which the sensor falls (e.g. tcp, datastore)
    */
   char *category;
@@ -160,6 +166,7 @@
 shutdown_task (void *cls,
               const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
+  GNUNET_SCHEDULER_shutdown();
 }
 
 
@@ -221,25 +228,30 @@
 load_sensor_from_cfg(struct GNUNET_CONFIGURATION_Handle *cfg, const char 
*sectionname)
 {
   struct SensorInfo *sensor;
-  char *versionstr;
+  char *version_str;
+  char *starttime_str;
+  char *endtime_str;
+  unsigned long long interval_sec;
+  struct GNUNET_TIME_Relative interval;
 
   sensor = GNUNET_new(struct SensorInfo);
   //name
   sensor->name = GNUNET_strdup(sectionname);
   //version
-  if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_string(cfg, sectionname, 
"VERSION", &versionstr) ||
-      NULL == versionstr)
+  if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_string(cfg, sectionname, 
"VERSION", &version_str))
   {
     GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Error reading sensor version\n"));
     GNUNET_free(sensor);
     return NULL;
   }
-  if(GNUNET_OK != version_parse(versionstr, &(sensor->version_major), 
&(sensor->version_minor)))
+  if(GNUNET_OK != version_parse(version_str, &(sensor->version_major), 
&(sensor->version_minor)))
   {
     GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Invalid sensor version number, 
format should be major.minor\n"));
     GNUNET_free(sensor);
+    GNUNET_free(version_str);
     return NULL;
   }
+  GNUNET_free(version_str);
   //description
   GNUNET_CONFIGURATION_get_value_string(cfg, sectionname, "DESCRIPTION", 
&sensor->description);
   //category
@@ -250,6 +262,37 @@
     GNUNET_free(sensor);
     return NULL;
   }
+  //enabled
+  if(GNUNET_NO == GNUNET_CONFIGURATION_get_value_yesno(cfg, sectionname, 
"ENABLED"))
+    sensor->enabled = GNUNET_NO;
+  else
+    sensor->enabled = GNUNET_YES;
+  //start time
+  sensor->start_time = NULL;
+  if(GNUNET_OK == GNUNET_CONFIGURATION_get_value_string(cfg, sectionname, 
"START_TIME", &starttime_str))
+  {
+    GNUNET_STRINGS_fancy_time_to_absolute(starttime_str, sensor->start_time);
+    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Start time loaded: `%s'. Parsed: 
%d\n", starttime_str, (NULL != sensor->start_time));
+    GNUNET_free(starttime_str);
+  }
+  //end time
+  sensor->end_time = NULL;
+  if(GNUNET_OK == GNUNET_CONFIGURATION_get_value_string(cfg, sectionname, 
"END_TIME", &endtime_str))
+  {
+    GNUNET_STRINGS_fancy_time_to_absolute(endtime_str, sensor->end_time);
+    GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "End time loaded: `%s'. Parsed: %d\n", 
endtime_str, (NULL != sensor->end_time));
+    GNUNET_free(endtime_str);
+  }
+  //interval
+  if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_number(cfg, sectionname, 
"INTERVAL", &interval_sec))
+  {
+    GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Error reading sensor run 
interval\n"));
+    GNUNET_free(sensor);
+    return NULL;
+  }
+  interval = GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, 
interval_sec);
+  sensor->interval = &interval;
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Interval loaded: %" PRIu64 "\n", 
sensor->interval->rel_value_us);
 
   return sensor;
 }
@@ -332,6 +375,7 @@
     else
     {
       GNUNET_CONTAINER_multihashmap_remove(map, &key, existing); //remove the 
old version
+      GNUNET_free(existing);
       GNUNET_log(GNUNET_ERROR_TYPE_INFO, _("Upgrading sensor `%s' to a newer 
version\n"), sensor->name);
     }
   }
@@ -536,6 +580,86 @@
 }
 
 /**
+ * Do a series of checks to determine if sensor should execute
+ *
+ * @return #GNUNET_YES / #GNUNET_NO
+ */
+static int
+should_run_sensor(struct SensorInfo *sensorinfo)
+{
+  struct GNUNET_TIME_Absolute now;
+
+  if(GNUNET_NO == sensorinfo->enabled)
+  {
+    GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Sensor `%s' is disabled, will not 
run\n");
+    return GNUNET_NO;
+  }
+  now = GNUNET_TIME_absolute_get();
+  if(NULL != sensorinfo->start_time
+      && now.abs_value_us < sensorinfo->start_time->abs_value_us)
+  {
+    GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Start time for sensor `%s' not reached 
yet, will not run\n");
+    return GNUNET_NO;
+  }
+  if(NULL != sensorinfo->end_time
+      && now.abs_value_us >= sensorinfo->end_time->abs_value_us)
+  {
+    GNUNET_log(GNUNET_ERROR_TYPE_INFO, "End time for sensor `%s' passed, will 
not run\n");
+    return GNUNET_NO;
+  }
+  return GNUNET_YES;
+}
+
+/**
+ * Actual execution of a sensor
+ *
+ * @param cls 'struct SensorInfo'
+ * @param tc unsed
+ */
+void
+run_sensor (void *cls,
+    const struct GNUNET_SCHEDULER_TaskContext * tc)
+{
+  struct SensorInfo *sensorinfo = cls;
+
+  if(GNUNET_NO == should_run_sensor(sensorinfo))
+    return;
+  //GNUNET_SCHEDULER_add_delayed(*sensorinfo->interval, &run_sensor, 
sensorinfo);
+  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Starting the execution of sensor 
`%s'\n", sensorinfo->name);
+}
+
+/**
+ * Starts the execution of a sensor
+ *
+ * @param cls unused
+ * @param key hash of sensor name, key to hashmap
+ * @param value a 'struct SensorInfo *'
+ * @return #GNUNET_YES if we should continue to
+ *         iterate,
+ *         #GNUNET_NO if not.
+ */
+int schedule_sensor(void *cls,
+    const struct GNUNET_HashCode *key, void *value)
+{
+  struct SensorInfo *sensorinfo = value;
+
+  if(GNUNET_NO == should_run_sensor(sensorinfo))
+    return GNUNET_YES;
+  GNUNET_SCHEDULER_add_delayed(*sensorinfo->interval, &run_sensor, sensorinfo);
+  return GNUNET_YES;
+}
+
+/**
+ * Starts the execution of all enabled sensors
+ *
+ */
+static void
+schedule_all_sensors()
+{
+  GNUNET_CONTAINER_multihashmap_iterate(sensors, &schedule_sensor, NULL);
+}
+
+/**
  * Process statistics requests.
  *
  * @param cls closure
@@ -558,6 +682,7 @@
   cfg = c;
   sensors = GNUNET_CONTAINER_multihashmap_create(10, GNUNET_NO);
   reload_sensors();
+  schedule_all_sensors();
   GNUNET_SERVER_add_handlers (server, handlers);
   GNUNET_SERVER_disconnect_notify (server, 
                                   &handle_client_disconnect,

Modified: gnunet/src/sensor/sensors/averagepingrtt
===================================================================
--- gnunet/src/sensor/sensors/averagepingrtt    2014-05-02 15:28:43 UTC (rev 
33154)
+++ gnunet/src/sensor/sensors/averagepingrtt    2014-05-02 18:18:00 UTC (rev 
33155)
@@ -3,10 +3,12 @@
 VERSION = 1.0
 DESCRIPTION = Calculate average ping latency to gnunet.org
 CATEGORY = Internet-Connectivity
+ENABLED = YES
 
 # Start and end time format: %Y-%m-%d %H:%M:%S
 #START_TIME = 
 #END_TIME = 
+#Interval in seconds
 INTERVAL = 3600
 #LIFETIME = 
 

Modified: gnunet/src/sensor/sensors/connectedpeers
===================================================================
--- gnunet/src/sensor/sensors/connectedpeers    2014-05-02 15:28:43 UTC (rev 
33154)
+++ gnunet/src/sensor/sensors/connectedpeers    2014-05-02 18:18:00 UTC (rev 
33155)
@@ -3,10 +3,12 @@
 VERSION = 1.0
 DESCRIPTION = Gets the number of connected peers from core
 CATEGORY = P2P-Connectivity
+ENABLED = NO
 
 # Start and end time format: %Y-%m-%d %H:%M:%S
 #START_TIME = 
 #END_TIME = 
+#Interval in seconds
 INTERVAL = 60
 #LIFETIME = 
 

Modified: gnunet/src/sensor/sensors/gnunetversion
===================================================================
--- gnunet/src/sensor/sensors/gnunetversion     2014-05-02 15:28:43 UTC (rev 
33154)
+++ gnunet/src/sensor/sensors/gnunetversion     2014-05-02 18:18:00 UTC (rev 
33155)
@@ -3,10 +3,12 @@
 VERSION = 1.0
 DESCRIPTION = Gets gnunet version number
 CATEGORY = P2P-Software
+ENABLED = YES
 
 # Start and end time format: %Y-%m-%d %H:%M:%S
 #START_TIME = 
 #END_TIME = 
+#Interval in seconds
 INTERVAL = 86400
 #LIFETIME = 
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]