[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r33161 - in gnunet/src/sensor: . sensors
From: |
gnunet |
Subject: |
[GNUnet-SVN] r33161 - in gnunet/src/sensor: . sensors |
Date: |
Sun, 4 May 2014 19:18:28 +0200 |
Author: otarabai
Date: 2014-05-04 19:18:27 +0200 (Sun, 04 May 2014)
New Revision: 33161
Modified:
gnunet/src/sensor/Makefile.am
gnunet/src/sensor/gnunet-service-sensor.c
gnunet/src/sensor/sensors/connectedpeers
gnunet/src/sensor/sensors/gnunetversion
Log:
running gnunet-statistics sensors
Modified: gnunet/src/sensor/Makefile.am
===================================================================
--- gnunet/src/sensor/Makefile.am 2014-05-04 09:06:27 UTC (rev 33160)
+++ gnunet/src/sensor/Makefile.am 2014-05-04 17:18:27 UTC (rev 33161)
@@ -35,6 +35,7 @@
gnunet-service-sensor.c
gnunet_service_sensor_LDADD = \
$(top_builddir)/src/util/libgnunetutil.la \
+ $(top_builddir)/src/statistics/libgnunetstatistics.la \
$(GN_LIBINTL)
libgnunetsensor_la_SOURCES = \
Modified: gnunet/src/sensor/gnunet-service-sensor.c
===================================================================
--- gnunet/src/sensor/gnunet-service-sensor.c 2014-05-04 09:06:27 UTC (rev
33160)
+++ gnunet/src/sensor/gnunet-service-sensor.c 2014-05-04 17:18:27 UTC (rev
33161)
@@ -29,6 +29,11 @@
#include "sensor.h"
/**
+ * Minimum sensor execution interval (in seconds)
+ */
+#define MIN_INTERVAL 30
+
+/**
* Structure containing sensor definition
*/
struct SensorInfo
@@ -87,7 +92,7 @@
/*
* Lifetime of an information sample after which it is deleted from storage
*/
- struct GNUNET_TIME_Relative *lifetime;
+ struct GNUNET_TIME_Relative lifetime;
/*
* A set of required peer capabilities for the sensor to collect meaningful
information (e.g. ipv6)
@@ -109,6 +114,11 @@
*/
char *gnunet_stat_name;
+ /**
+ * Handle to statistics get request (OR GNUNET_SCHEDULER_NO_TASK)
+ */
+ struct GNUNET_STATISTICS_GetHandle *gnunet_stat_get_handle;
+
/*
* Name of the external process to be executed
*/
@@ -162,6 +172,21 @@
struct GNUNET_CONTAINER_MultiHashMap *sensors;
/**
+ * Supported sources of sensor information
+ */
+static const char *sources[] = { "gnunet-statistics", "process", NULL };
+
+/**
+ * Supported datatypes of sensor information
+ */
+static const char *datatypes[] = { "uint64", "double", "string", NULL };
+
+/**
+ * Handle to statistics service
+ */
+struct GNUNET_STATISTICS_Handle *statistics;
+
+/**
* Remove sensor execution from scheduler
*
* @param cls unused
@@ -176,6 +201,11 @@
{
struct SensorInfo *sensorinfo = value;
+ if(NULL != sensorinfo->gnunet_stat_get_handle)
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Canceling a statistics get request
for sensor `%s'\n", sensorinfo->name);
+ GNUNET_STATISTICS_get_cancel(sensorinfo->gnunet_stat_get_handle);
+ }
if(GNUNET_SCHEDULER_NO_TASK != sensorinfo->execution_task)
{
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Unscheduling sensor `%s'\n",
sensorinfo->name);
@@ -195,6 +225,8 @@
const struct GNUNET_SCHEDULER_TaskContext *tc)
{
GNUNET_CONTAINER_multihashmap_iterate(sensors, &unschedule_sensor, NULL);
+ if(NULL != statistics)
+ GNUNET_STATISTICS_destroy(statistics, GNUNET_YES);
GNUNET_SCHEDULER_shutdown();
}
@@ -260,7 +292,7 @@
char *version_str;
char *starttime_str;
char *endtime_str;
- unsigned long long interval_sec;
+ unsigned long long time_sec;
sensor = GNUNET_new(struct SensorInfo);
//name
@@ -312,14 +344,72 @@
GNUNET_free(endtime_str);
}
//interval
- if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_number(cfg, sectionname,
"INTERVAL", &interval_sec))
+ if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_number(cfg, sectionname,
"INTERVAL", &time_sec))
{
GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Error reading sensor run
interval\n"));
GNUNET_free(sensor);
return NULL;
}
- sensor->interval = GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
interval_sec);
+ if(time_sec < MIN_INTERVAL)
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Sensor run interval too low (%"
PRIu64 " < %d)\n"),
+ time_sec, MIN_INTERVAL);
+ GNUNET_free(sensor);
+ return NULL;
+ }
+ sensor->interval = GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
time_sec);
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Interval loaded: %" PRIu64 "\n",
sensor->interval.rel_value_us);
+ //lifetime
+ if(GNUNET_OK == GNUNET_CONFIGURATION_get_value_number(cfg, sectionname,
"LIFETIME", &time_sec))
+ {
+ sensor->lifetime = GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
time_sec);
+ GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Lifetime loaded: %" PRIu64 "\n",
sensor->lifetime.rel_value_us);
+ }
+ else
+ sensor->lifetime = GNUNET_TIME_UNIT_FOREVER_REL;
+ //capabilities TODO
+ //source
+ if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_choice(cfg, sectionname,
"SOURCE", sources, &sensor->source))
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Error reading sensor source\n"));
+ GNUNET_free(sensor);
+ return NULL;
+ }
+ if(sources[0] == sensor->source) //gnunet-statistics
+ {
+ if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_string(cfg, sectionname,
"GNUNET_STAT_SERVICE", &sensor->gnunet_stat_service) ||
+ GNUNET_OK != GNUNET_CONFIGURATION_get_value_string(cfg, sectionname,
"GNUNET_STAT_NAME", &sensor->gnunet_stat_name))
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Error reading sensor
gnunet-statistics source information\n"));
+ GNUNET_free(sensor);
+ return NULL;
+ }
+ sensor->gnunet_stat_get_handle = NULL;
+ }
+ else if(sources[1] == sensor->source) //process
+ {
+ if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_string(cfg, sectionname,
"EXT_PROCESS", &sensor->ext_process))
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Error reading sensor process
name\n"));
+ GNUNET_free(sensor);
+ return NULL;
+ }
+ GNUNET_CONFIGURATION_get_value_string(cfg, sectionname, "EXT_ARGS",
&sensor->ext_args);
+ }
+ //expected datatype
+ if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_choice(cfg, sectionname,
"EXPECTED_DATATYPE", datatypes, &sensor->expected_datatype))
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Error reading sensor expected
datatype\n"));
+ GNUNET_free(sensor);
+ return NULL;
+ }
+ if(sources[0] == sensor->source && datatypes[0] != sensor->expected_datatype)
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Invalid expected datatype,
gnunet-statistics returns uint64 values\n"));
+ GNUNET_free(sensor);
+ return NULL;
+ }
+ //TODO: reporting mechanism
//execution task
sensor->execution_task = GNUNET_SCHEDULER_NO_TASK;
@@ -640,6 +730,28 @@
}
/**
+ * Callback function to process statistic values
+ *
+ * @param cls 'struct SensorInfo *'
+ * @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
+ */
+int sensor_statistics_iterator (void *cls,
+ const char *subsystem,
+ const char *name,
+ uint64_t value,
+ int is_persistent)
+{
+ struct SensorInfo *sensorinfo = cls;
+
+ GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Received a value for sensor `%s': %"
PRIu64 "\n", sensorinfo->name, value);
+ return GNUNET_OK;
+}
+
+/**
* Actual execution of a sensor
*
* @param cls 'struct SensorInfo'
@@ -656,6 +768,18 @@
return;
sensorinfo->execution_task =
GNUNET_SCHEDULER_add_delayed(sensorinfo->interval, &run_sensor, sensorinfo);
GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Starting the execution of sensor
`%s'\n", sensorinfo->name);
+ if(sources[0] == sensorinfo->source) //gnunet-statistics
+ {
+ if(NULL == statistics)
+ statistics = GNUNET_STATISTICS_create("sensor", cfg);
+ GNUNET_STATISTICS_get(statistics,
+ sensorinfo->gnunet_stat_service,
+ sensorinfo->gnunet_stat_name,
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ NULL,
+ &sensor_statistics_iterator,
+ sensorinfo);
+ }
}
/**
Modified: gnunet/src/sensor/sensors/connectedpeers
===================================================================
--- gnunet/src/sensor/sensors/connectedpeers 2014-05-04 09:06:27 UTC (rev
33160)
+++ gnunet/src/sensor/sensors/connectedpeers 2014-05-04 17:18:27 UTC (rev
33161)
@@ -22,7 +22,7 @@
#EXT_PROCESS =
#EXT_ARGS =
-EXPECTED_DATATYPE = int64
+EXPECTED_DATATYPE = uint64
# Reporting mechanism
COLLECTION_POINT = JLAPIAOB2DJA4B4I676TCOCVU0DUIRMKKUSM71BLLGCV3OHMUQ80
Modified: gnunet/src/sensor/sensors/gnunetversion
===================================================================
--- gnunet/src/sensor/sensors/gnunetversion 2014-05-04 09:06:27 UTC (rev
33160)
+++ gnunet/src/sensor/sensors/gnunetversion 2014-05-04 17:18:27 UTC (rev
33161)
@@ -10,7 +10,7 @@
#END_TIME =
#Interval in seconds
INTERVAL = 86400
-#LIFETIME =
+LIFETIME = 86400
#CAPABILITIES =
@@ -19,8 +19,8 @@
#GNUNET_STAT_SERVICE =
#GNUNET_STAT_NAME =
-EXT_PROCESS = gnunet-arm -v
-#EXT_ARGS =
+EXT_PROCESS = gnunet-arm
+EXT_ARGS = -v
EXPECTED_DATATYPE = string
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r33161 - in gnunet/src/sensor: . sensors,
gnunet <=