[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r33886 - in gnunet/src: include sensor sensor/sensors
From: |
gnunet |
Subject: |
[GNUnet-SVN] r33886 - in gnunet/src: include sensor sensor/sensors |
Date: |
Mon, 30 Jun 2014 16:17:28 +0200 |
Author: otarabai
Date: 2014-06-30 16:17:28 +0200 (Mon, 30 Jun 2014)
New Revision: 33886
Added:
gnunet/src/sensor/gnunet-service-sensor-reporting.c
Modified:
gnunet/src/include/gnunet_sensor_service.h
gnunet/src/sensor/Makefile.am
gnunet/src/sensor/gnunet-service-sensor.c
gnunet/src/sensor/sensor.h
gnunet/src/sensor/sensors/average-ping-rtt
gnunet/src/sensor/sensors/datacache-bytes-stored
gnunet/src/sensor/sensors/gnunet-version
gnunet/src/sensor/sensors/known-peers
gnunet/src/sensor/sensors/nse
gnunet/src/sensor/sensors/peerstore-memory
gnunet/src/sensor/sensors/transport-bytes-received
gnunet/src/sensor/sensors/transport-tcp-bytes-transmitted
gnunet/src/sensor/sensors/transport-tcp-sessions-active
Log:
initial sensor reporting component code
Modified: gnunet/src/include/gnunet_sensor_service.h
===================================================================
--- gnunet/src/include/gnunet_sensor_service.h 2014-06-30 13:44:25 UTC (rev
33885)
+++ gnunet/src/include/gnunet_sensor_service.h 2014-06-30 14:17:28 UTC (rev
33886)
@@ -171,7 +171,7 @@
/*
* Time interval to send sensor information to collection point (e.g. every
30 mins)
*/
- struct GNUNET_TIME_Relative *collection_interval;
+ struct GNUNET_TIME_Relative collection_interval;
/*
* Flag specifying if value is to be communicated to the p2p network
@@ -181,7 +181,7 @@
/*
* Time interval to communicate value to the p2p network
*/
- struct GNUNET_TIME_Relative *p2p_interval;
+ struct GNUNET_TIME_Relative p2p_interval;
/*
* Execution task (OR GNUNET_SCHEDULER_NO_TASK)
Modified: gnunet/src/sensor/Makefile.am
===================================================================
--- gnunet/src/sensor/Makefile.am 2014-06-30 13:44:25 UTC (rev 33885)
+++ gnunet/src/sensor/Makefile.am 2014-06-30 14:17:28 UTC (rev 33886)
@@ -35,7 +35,8 @@
gnunet_service_sensor_SOURCES = \
gnunet-service-sensor.c \
- gnunet-service-sensor-analysis.c
+ gnunet-service-sensor-analysis.c \
+ gnunet-service-sensor-reporting.c
gnunet_service_sensor_LDADD = \
$(top_builddir)/src/util/libgnunetutil.la \
$(top_builddir)/src/statistics/libgnunetstatistics.la \
Added: gnunet/src/sensor/gnunet-service-sensor-reporting.c
===================================================================
--- gnunet/src/sensor/gnunet-service-sensor-reporting.c
(rev 0)
+++ gnunet/src/sensor/gnunet-service-sensor-reporting.c 2014-06-30 14:17:28 UTC
(rev 33886)
@@ -0,0 +1,161 @@
+/*
+ This file is part of GNUnet.
+ (C)
+
+ GNUnet is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published
+ by the Free Software Foundation; either version 3, or (at your
+ option) any later version.
+
+ GNUnet is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ 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.
+*/
+
+/**
+ * @file sensor/gnunet-service-sensor-reporting.c
+ * @brief sensor service reporting functionality
+ * @author Omar Tarabai
+ */
+#include "platform.h"
+#include "gnunet_util_lib.h"
+#include "sensor.h"
+#include "gnunet_peerstore_service.h"
+
+#define LOG(kind,...) GNUNET_log_from (kind, "sensor-reporting",__VA_ARGS__)
+
+/**
+ * Context of reporting to collection
+ * point
+ */
+struct CollectionReportingContext
+{
+
+ /**
+ * Sensor information
+ */
+ struct SensorInfo *sensor;
+
+ /**
+ * Reporting task (OR GNUNET_SCHEDULER_NO_TASK)
+ */
+ GNUNET_SCHEDULER_TaskIdentifier task;
+
+};
+
+/**
+ * Our configuration.
+ */
+static const struct GNUNET_CONFIGURATION_Handle *cfg;
+
+/**
+ * Handle to peerstore service
+ */
+static struct GNUNET_PEERSTORE_Handle *peerstore;
+
+/**
+ * My peer id
+ */
+struct GNUNET_PeerIdentity peerid;
+
+
+/**
+ * Stop sensor reporting module
+ */
+void SENSOR_reporting_stop()
+{
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "Stopping sensor reporting module.\n");
+ if (NULL != peerstore)
+ {
+ GNUNET_PEERSTORE_disconnect(peerstore);
+ peerstore = NULL;
+ }
+}
+
+/**
+ * Task scheduled to send values to collection point
+ *
+ * @param cls closure, a 'struct CollectionReportingContext *'
+ * @param tc unused
+ */
+void report_collection_point
+(void *cls, const struct GNUNET_SCHEDULER_TaskContext* tc)
+{
+ struct CollectionReportingContext *crc = cls;
+
+ crc->task = GNUNET_SCHEDULER_NO_TASK;
+}
+
+/**
+ * Iterator for defined sensors
+ * Watches sensors for readings to report
+ *
+ * @param cls unused
+ * @param key unused
+ * @param value a 'struct SensorInfo *' with sensor information
+ * @return #GNUNET_YES to continue iterations
+ */
+static int
+init_sensor_reporting (void *cls,
+ const struct GNUNET_HashCode *key,
+ void *value)
+{
+ struct SensorInfo *sensor = value;
+ struct CollectionReportingContext *crc;
+
+ if (NULL != sensor->collection_point)
+ {
+ LOG (GNUNET_ERROR_TYPE_INFO,
+ "Will start reporting sensor `%s' values to collection point `%s'
every %s.\n",
+ sensor->name, GNUNET_i2s_full(sensor->collection_point),
+ GNUNET_STRINGS_relative_time_to_string(sensor->collection_interval,
GNUNET_YES));
+ crc = GNUNET_new (struct CollectionReportingContext);
+ crc->sensor = sensor;
+ crc->task =
+ GNUNET_SCHEDULER_add_delayed(sensor->collection_interval,
+ &report_collection_point,
+ crc);
+ }
+ if (GNUNET_YES == sensor->p2p_report)
+ {
+ LOG (GNUNET_ERROR_TYPE_INFO,
+ "Will start reporting sensor `%s' values to p2p network every %s.\n",
+ sensor->name,
+ GNUNET_STRINGS_relative_time_to_string(sensor->p2p_interval,
GNUNET_YES));
+ }
+ return GNUNET_YES;
+}
+
+/**
+ * Start the sensor reporting module
+ *
+ * @param c our service configuration
+ * @param sensors multihashmap of loaded sensors
+ * @return #GNUNET_OK if started successfully, #GNUNET_SYSERR otherwise
+ */
+int
+SENSOR_reporting_start(const struct GNUNET_CONFIGURATION_Handle *c,
+ struct GNUNET_CONTAINER_MultiHashMap *sensors)
+{
+
+ GNUNET_assert(NULL != sensors);
+ cfg = c;
+ GNUNET_CRYPTO_get_peer_identity(cfg, &peerid);
+ GNUNET_CONTAINER_multihashmap_iterate(sensors, &init_sensor_reporting, NULL);
+ peerstore = GNUNET_PEERSTORE_connect(cfg);
+ if (NULL == peerstore)
+ {
+ LOG (GNUNET_ERROR_TYPE_ERROR, _("Could not connect to peerstore
service.\n"));
+ SENSOR_reporting_stop();
+ return GNUNET_SYSERR;
+ }
+ return GNUNET_OK;
+}
+
+/* end of gnunet-service-sensor-reporting.c */
Modified: gnunet/src/sensor/gnunet-service-sensor.c
===================================================================
--- gnunet/src/sensor/gnunet-service-sensor.c 2014-06-30 13:44:25 UTC (rev
33885)
+++ gnunet/src/sensor/gnunet-service-sensor.c 2014-06-30 14:17:28 UTC (rev
33886)
@@ -159,6 +159,7 @@
shutdown_task (void *cls,
const struct GNUNET_SCHEDULER_TaskContext *tc)
{
+ SENSOR_reporting_stop();
SENSOR_analysis_stop();
GNUNET_CONTAINER_multihashmap_iterate(sensors, &destroy_sensor, NULL);
GNUNET_CONTAINER_multihashmap_destroy(sensors);
@@ -238,6 +239,8 @@
char *starttime_str;
char *endtime_str;
unsigned long long time_sec;
+ char *dummy;
+ struct GNUNET_CRYPTO_EddsaPublicKey public_key;
sensor = GNUNET_new(struct SensorInfo);
//name
@@ -307,6 +310,10 @@
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);
+ if (sensor->lifetime.rel_value_us < sensor->interval.rel_value_us)
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "Lifetime of sensor data is preferred to be higher than interval for
sensor `%s'.\n",
+ sensor->name);
}
else
sensor->lifetime = sensor->interval;
@@ -352,7 +359,36 @@
GNUNET_free(sensor);
return NULL;
}
- //TODO: reporting mechanism
+ //reporting mechanism
+ if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_string(cfg, sectionname,
"COLLECTION_POINT", &dummy))
+ {
+ if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_number(cfg, sectionname,
"COLLECTION_INTERVAL", &time_sec))
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Error reading sensor collection
interval\n"));
+ }
+ else
+ {
+ sensor->collection_interval =
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, time_sec);
+ if (GNUNET_OK == GNUNET_CRYPTO_eddsa_public_key_from_string(dummy,
strlen(dummy), &public_key))
+ {
+ sensor->collection_point = GNUNET_new(struct GNUNET_PeerIdentity);
+ sensor->collection_point->public_key = public_key;
+ }
+ }
+ }
+ sensor->p2p_report = GNUNET_NO;
+ if (GNUNET_YES == GNUNET_CONFIGURATION_get_value_yesno(cfg, sectionname,
"P2P_REPORT"))
+ {
+ if(GNUNET_OK != GNUNET_CONFIGURATION_get_value_number(cfg, sectionname,
"P2P_INTERVAL", &time_sec))
+ {
+ GNUNET_log(GNUNET_ERROR_TYPE_ERROR, _("Error reading sensor p2p
reporting interval\n"));
+ }
+ else
+ {
+ sensor->p2p_interval =
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS, time_sec);
+ sensor->p2p_report = GNUNET_YES;
+ }
+ }
//execution task
sensor->execution_task = GNUNET_SCHEDULER_NO_TASK;
//running
@@ -991,6 +1027,7 @@
reload_sensors();
schedule_all_sensors();
SENSOR_analysis_start(c, sensors);
+ SENSOR_reporting_start(c, sensors);
statistics = GNUNET_STATISTICS_create("sensor", cfg);
GNUNET_CRYPTO_get_peer_identity(cfg, &peerid);
peerstore = GNUNET_PEERSTORE_connect(cfg);
Modified: gnunet/src/sensor/sensor.h
===================================================================
--- gnunet/src/sensor/sensor.h 2014-06-30 13:44:25 UTC (rev 33885)
+++ gnunet/src/sensor/sensor.h 2014-06-30 14:17:28 UTC (rev 33886)
@@ -77,3 +77,19 @@
int
SENSOR_analysis_start(const struct GNUNET_CONFIGURATION_Handle *c,
struct GNUNET_CONTAINER_MultiHashMap *sensors_mhm);
+
+/**
+ * Stop sensor reporting module
+ */
+void SENSOR_reporting_stop();
+
+/**
+ * Start the sensor reporting module
+ *
+ * @param c our service configuration
+ * @param sensors multihashmap of loaded sensors
+ * @return #GNUNET_OK if started successfully, #GNUNET_SYSERR otherwise
+ */
+int
+SENSOR_reporting_start(const struct GNUNET_CONFIGURATION_Handle *c,
+ struct GNUNET_CONTAINER_MultiHashMap *sensors);
Modified: gnunet/src/sensor/sensors/average-ping-rtt
===================================================================
--- gnunet/src/sensor/sensors/average-ping-rtt 2014-06-30 13:44:25 UTC (rev
33885)
+++ gnunet/src/sensor/sensors/average-ping-rtt 2014-06-30 14:17:28 UTC (rev
33886)
@@ -25,8 +25,8 @@
EXPECTED_DATATYPE = numeric
# Reporting mechanism
-COLLECTION_POINT = JLAPIAOB2DJA4B4I676TCOCVU0DUIRMKKUSM71BLLGCV3OHMUQ80
+COLLECTION_POINT = NCEKA096482PC84GFTG61EHAVXY3BQDTPB5FANATQD5CDADJ2HP0
COLLECTION_INTERVAL = 7200
-P2P_REPORT = NO
-#P2P_INTERVAL =
+P2P_REPORT = YES
+P2P_INTERVAL = 300
Modified: gnunet/src/sensor/sensors/datacache-bytes-stored
===================================================================
--- gnunet/src/sensor/sensors/datacache-bytes-stored 2014-06-30 13:44:25 UTC
(rev 33885)
+++ gnunet/src/sensor/sensors/datacache-bytes-stored 2014-06-30 14:17:28 UTC
(rev 33886)
@@ -25,7 +25,7 @@
EXPECTED_DATATYPE = numeric
# Reporting mechanism
-COLLECTION_POINT = JLAPIAOB2DJA4B4I676TCOCVU0DUIRMKKUSM71BLLGCV3OHMUQ80
+COLLECTION_POINT = NCEKA096482PC84GFTG61EHAVXY3BQDTPB5FANATQD5CDADJ2HP0
COLLECTION_INTERVAL = 120
P2P_REPORT = NO
Modified: gnunet/src/sensor/sensors/gnunet-version
===================================================================
--- gnunet/src/sensor/sensors/gnunet-version 2014-06-30 13:44:25 UTC (rev
33885)
+++ gnunet/src/sensor/sensors/gnunet-version 2014-06-30 14:17:28 UTC (rev
33886)
@@ -25,7 +25,7 @@
EXPECTED_DATATYPE = string
# Reporting mechanism
-COLLECTION_POINT = JLAPIAOB2DJA4B4I676TCOCVU0DUIRMKKUSM71BLLGCV3OHMUQ80
+COLLECTION_POINT = NCEKA096482PC84GFTG61EHAVXY3BQDTPB5FANATQD5CDADJ2HP0
COLLECTION_INTERVAL = 86400
P2P_REPORT = NO
Modified: gnunet/src/sensor/sensors/known-peers
===================================================================
--- gnunet/src/sensor/sensors/known-peers 2014-06-30 13:44:25 UTC (rev
33885)
+++ gnunet/src/sensor/sensors/known-peers 2014-06-30 14:17:28 UTC (rev
33886)
@@ -25,7 +25,7 @@
EXPECTED_DATATYPE = numeric
# Reporting mechanism
-COLLECTION_POINT = JLAPIAOB2DJA4B4I676TCOCVU0DUIRMKKUSM71BLLGCV3OHMUQ80
+COLLECTION_POINT = NCEKA096482PC84GFTG61EHAVXY3BQDTPB5FANATQD5CDADJ2HP0
COLLECTION_INTERVAL = 120
P2P_REPORT = NO
Modified: gnunet/src/sensor/sensors/nse
===================================================================
--- gnunet/src/sensor/sensors/nse 2014-06-30 13:44:25 UTC (rev 33885)
+++ gnunet/src/sensor/sensors/nse 2014-06-30 14:17:28 UTC (rev 33886)
@@ -25,7 +25,7 @@
EXPECTED_DATATYPE = numeric
# Reporting mechanism
-COLLECTION_POINT = JLAPIAOB2DJA4B4I676TCOCVU0DUIRMKKUSM71BLLGCV3OHMUQ80
+COLLECTION_POINT = NCEKA096482PC84GFTG61EHAVXY3BQDTPB5FANATQD5CDADJ2HP0
COLLECTION_INTERVAL = 120
P2P_REPORT = NO
Modified: gnunet/src/sensor/sensors/peerstore-memory
===================================================================
--- gnunet/src/sensor/sensors/peerstore-memory 2014-06-30 13:44:25 UTC (rev
33885)
+++ gnunet/src/sensor/sensors/peerstore-memory 2014-06-30 14:17:28 UTC (rev
33886)
@@ -25,7 +25,7 @@
EXPECTED_DATATYPE = numeric
# Reporting mechanism
-COLLECTION_POINT = JLAPIAOB2DJA4B4I676TCOCVU0DUIRMKKUSM71BLLGCV3OHMUQ80
+COLLECTION_POINT = NCEKA096482PC84GFTG61EHAVXY3BQDTPB5FANATQD5CDADJ2HP0
COLLECTION_INTERVAL = 7200
P2P_REPORT = NO
Modified: gnunet/src/sensor/sensors/transport-bytes-received
===================================================================
--- gnunet/src/sensor/sensors/transport-bytes-received 2014-06-30 13:44:25 UTC
(rev 33885)
+++ gnunet/src/sensor/sensors/transport-bytes-received 2014-06-30 14:17:28 UTC
(rev 33886)
@@ -25,7 +25,7 @@
EXPECTED_DATATYPE = numeric
# Reporting mechanism
-COLLECTION_POINT = JLAPIAOB2DJA4B4I676TCOCVU0DUIRMKKUSM71BLLGCV3OHMUQ80
+COLLECTION_POINT = NCEKA096482PC84GFTG61EHAVXY3BQDTPB5FANATQD5CDADJ2HP0
COLLECTION_INTERVAL = 120
P2P_REPORT = NO
Modified: gnunet/src/sensor/sensors/transport-tcp-bytes-transmitted
===================================================================
--- gnunet/src/sensor/sensors/transport-tcp-bytes-transmitted 2014-06-30
13:44:25 UTC (rev 33885)
+++ gnunet/src/sensor/sensors/transport-tcp-bytes-transmitted 2014-06-30
14:17:28 UTC (rev 33886)
@@ -25,7 +25,7 @@
EXPECTED_DATATYPE = numeric
# Reporting mechanism
-COLLECTION_POINT = JLAPIAOB2DJA4B4I676TCOCVU0DUIRMKKUSM71BLLGCV3OHMUQ80
+COLLECTION_POINT = NCEKA096482PC84GFTG61EHAVXY3BQDTPB5FANATQD5CDADJ2HP0
COLLECTION_INTERVAL = 120
P2P_REPORT = NO
Modified: gnunet/src/sensor/sensors/transport-tcp-sessions-active
===================================================================
--- gnunet/src/sensor/sensors/transport-tcp-sessions-active 2014-06-30
13:44:25 UTC (rev 33885)
+++ gnunet/src/sensor/sensors/transport-tcp-sessions-active 2014-06-30
14:17:28 UTC (rev 33886)
@@ -25,7 +25,7 @@
EXPECTED_DATATYPE = numeric
# Reporting mechanism
-COLLECTION_POINT = JLAPIAOB2DJA4B4I676TCOCVU0DUIRMKKUSM71BLLGCV3OHMUQ80
+COLLECTION_POINT = NCEKA096482PC84GFTG61EHAVXY3BQDTPB5FANATQD5CDADJ2HP0
COLLECTION_INTERVAL = 120
P2P_REPORT = NO
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r33886 - in gnunet/src: include sensor sensor/sensors,
gnunet <=