From 321e66a9d999edaed3fff1a707d212f750fb40a1 Mon Sep 17 00:00:00 2001 From: Omar Tarabai Date: Mon, 11 Aug 2014 15:29:49 +0000 Subject: [PATCH] sensor: starting modules controllable from config --- src/sensor/gnunet-service-sensor.c | 68 ++++++++++++++++--- src/sensor/gnunet-service-sensor_monitoring.c | 62 ++++++++--------- src/sensor/gnunet-service-sensor_reporting.c | 29 ++++---- src/sensor/sensor.conf.in | 6 ++ src/sensor/sensor.h | 4 +- 5 files changed, 112 insertions(+), 57 deletions(-) diff --git a/src/sensor/gnunet-service-sensor.c b/src/sensor/gnunet-service-sensor.c index 047ad9183..b404d4806 100644 --- a/src/sensor/gnunet-service-sensor.c +++ b/src/sensor/gnunet-service-sensor.c @@ -42,6 +42,26 @@ static char *sensor_dir; */ static struct GNUNET_CONTAINER_MultiHashMap *sensors; +/** + * Start the monitoring module ? + */ +static int start_monitoring; + +/** + * Start the analysis module ? + */ +static int start_analysis; + +/** + * Start the reporting module ? + */ +static int start_reporting; + +/** + * Start the update module ? + */ +static int start_update; + /** * Resets the service by stopping components, reloading sensors and starting @@ -57,10 +77,14 @@ reset (); static void stop () { - SENSOR_update_stop (); - SENSOR_analysis_stop (); - SENSOR_reporting_stop (); - SENSOR_monitoring_stop (); + if (GNUNET_YES == start_update) + SENSOR_update_stop (); + if (GNUNET_YES == start_analysis) + SENSOR_analysis_stop (); + if (GNUNET_YES == start_reporting) + SENSOR_reporting_stop (); + if (GNUNET_YES == start_monitoring) + SENSOR_monitoring_stop (); GNUNET_SENSOR_destroy_sensors (sensors); } @@ -230,10 +254,14 @@ static void start () { sensors = GNUNET_SENSOR_load_all_sensors (sensor_dir); - SENSOR_monitoring_start (cfg, sensors); - SENSOR_reporting_start (cfg, sensors); - SENSOR_analysis_start (cfg, sensors); - SENSOR_update_start (cfg, sensors, &reset); + if (GNUNET_YES == start_monitoring) + SENSOR_monitoring_start (cfg, sensors); + if (GNUNET_YES == start_reporting) + SENSOR_reporting_start (cfg, sensors); + if (GNUNET_YES == start_analysis) + SENSOR_analysis_start (cfg, sensors); + if (GNUNET_YES == start_update) + SENSOR_update_start (cfg, sensors, &reset); } @@ -263,6 +291,30 @@ run (void *cls, struct GNUNET_SERVER_Handle *server, { sensor_dir = GNUNET_SENSOR_get_default_sensor_dir (); } + start_monitoring = GNUNET_YES; + start_analysis = GNUNET_YES; + start_reporting = GNUNET_YES; + start_update = GNUNET_YES; + if (GNUNET_NO == + GNUNET_CONFIGURATION_get_value_yesno (cfg, "SENSOR", "START_MONITORING")) + { + start_monitoring = GNUNET_NO; + } + if (GNUNET_NO == + GNUNET_CONFIGURATION_get_value_yesno (cfg, "SENSOR", "START_REPORTING")) + { + start_reporting = GNUNET_NO; + } + if (GNUNET_NO == + GNUNET_CONFIGURATION_get_value_yesno (cfg, "SENSOR", "START_ANALYSIS")) + { + start_analysis = GNUNET_NO; + } + if (GNUNET_NO == + GNUNET_CONFIGURATION_get_value_yesno (cfg, "SENSOR", "START_UPDATE")) + { + start_update = GNUNET_NO; + } GNUNET_SERVER_add_handlers (server, handlers); GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, NULL); diff --git a/src/sensor/gnunet-service-sensor_monitoring.c b/src/sensor/gnunet-service-sensor_monitoring.c index 33173e1ae..c3d5b8007 100644 --- a/src/sensor/gnunet-service-sensor_monitoring.c +++ b/src/sensor/gnunet-service-sensor_monitoring.c @@ -98,7 +98,7 @@ static void set_sensor_enabled (struct GNUNET_SENSOR_SensorInfo *sensor, int state) { LOG (GNUNET_ERROR_TYPE_DEBUG, "Sensor `%s': Setting enabled to %d.\n", - sensor->name, state); + sensor->name, state); sensor->enabled = GNUNET_NO; GNUNET_assert (NULL != sensor->cfg); GNUNET_CONFIGURATION_set_value_string (sensor->cfg, sensor->name, "ENABLED", @@ -119,8 +119,8 @@ should_run_sensor (struct GNUNET_SENSOR_SensorInfo *sensorinfo) if (GNUNET_NO == sensorinfo->enabled) { - LOG (GNUNET_ERROR_TYPE_INFO, - "Sensor `%s' is disabled, will not run\n", sensorinfo->name); + LOG (GNUNET_ERROR_TYPE_INFO, "Sensor `%s' is disabled, will not run\n", + sensorinfo->name); return GNUNET_NO; } now = GNUNET_TIME_absolute_get (); @@ -128,15 +128,15 @@ should_run_sensor (struct GNUNET_SENSOR_SensorInfo *sensorinfo) now.abs_value_us < sensorinfo->start_time->abs_value_us) { LOG (GNUNET_ERROR_TYPE_INFO, - "Start time for sensor `%s' not reached yet, will not run\n", - sensorinfo->name); + "Start time for sensor `%s' not reached yet, will not run\n", + sensorinfo->name); return GNUNET_NO; } if (NULL != sensorinfo->end_time && now.abs_value_us >= sensorinfo->end_time->abs_value_us) { LOG (GNUNET_ERROR_TYPE_INFO, "Sensor `%s' expired, disabling.\n", - sensorinfo->name); + sensorinfo->name); set_sensor_enabled (sensorinfo, GNUNET_NO); return GNUNET_NO; } @@ -163,8 +163,8 @@ sensor_statistics_iterator (void *cls, const char *ss, const char *name, struct GNUNET_TIME_Absolute expiry; LOG (GNUNET_ERROR_TYPE_INFO, - "Received a value for sensor `%s': %" PRIu64 "\n", - sensorinfo->name, value); + "Received a value for sensor `%s': %" PRIu64 "\n", sensorinfo->name, + value); expiry = GNUNET_TIME_relative_to_absolute (sensorinfo->lifetime); GNUNET_PEERSTORE_store (peerstore, "sensor", &peerid, sensorinfo->name, &dvalue, sizeof (dvalue), expiry, @@ -225,8 +225,7 @@ parse_sensor_value (const char *value, struct GNUNET_SENSOR_SensorInfo *sensor, return strlen (value) + 1; } LOG (GNUNET_ERROR_TYPE_ERROR, - _ - ("Unknown value type expected by sensor, this should not happen.\n")); + _("Unknown value type expected by sensor, this should not happen.\n")); return 0; } @@ -256,13 +255,13 @@ sensor_process_callback (void *cls, const char *line) if (GNUNET_YES == sensorinfo->ext_cmd_value_received) return; /* We only want one *valid* value */ LOG (GNUNET_ERROR_TYPE_INFO, "Received a value for sensor `%s': %s\n", - sensorinfo->name, line); + sensorinfo->name, line); valsize = parse_sensor_value (line, sensorinfo, &value); if (valsize == 0) /* invalid value, FIXME: should we disable the sensor now? */ { LOG (GNUNET_ERROR_TYPE_ERROR, - _("Received an invalid value for sensor `%s': %s\n"), - sensorinfo->name, line); + _("Received an invalid value for sensor `%s': %s\n"), sensorinfo->name, + line); } else { @@ -316,15 +315,15 @@ sensor_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) if (GNUNET_YES == sensorinfo->running) //FIXME: should we try to kill? { LOG (GNUNET_ERROR_TYPE_WARNING, - "Sensor `%s' running for too long, will try again next interval\n", - sensorinfo->name); + "Sensor `%s' running for too long, will try again next interval\n", + sensorinfo->name); return; } if (GNUNET_NO == should_run_sensor (sensorinfo)) return; sensorinfo->running = GNUNET_YES; - LOG (GNUNET_ERROR_TYPE_DEBUG, - "Starting the execution of sensor `%s'\n", sensorinfo->name); + LOG (GNUNET_ERROR_TYPE_DEBUG, "Starting the execution of sensor `%s'\n", + sensorinfo->name); if (0 == strcmp ("gnunet-statistics", sensorinfo->source)) { sensorinfo->gnunet_stat_get_handle = GNUNET_STATISTICS_get (statistics, sensorinfo->gnunet_stat_service, sensorinfo->gnunet_stat_name, sensorinfo->interval, //try to get values only for the interval of the sensor @@ -337,9 +336,9 @@ sensor_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) if (GNUNET_YES == is_path (sensorinfo->ext_process)) { LOG (GNUNET_ERROR_TYPE_ERROR, - _ - ("Sensor `%s': External process should not be a path, disabling sensor.\n"), - sensorinfo->name); + _ + ("Sensor `%s': External process should not be a path, disabling sensor.\n"), + sensorinfo->name); set_sensor_enabled (sensorinfo, GNUNET_NO); return; } @@ -361,9 +360,9 @@ sensor_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) if (GNUNET_SYSERR == check_result) { LOG (GNUNET_ERROR_TYPE_ERROR, - _ - ("Sensor `%s' process `%s' problem: binary doesn't exist or not executable\n"), - sensorinfo->name, sensorinfo->ext_process); + _ + ("Sensor `%s' process `%s' problem: binary doesn't exist or not executable\n"), + sensorinfo->name, sensorinfo->ext_process); set_sensor_enabled (sensorinfo, GNUNET_NO); sensorinfo->running = GNUNET_NO; GNUNET_free (process_path); @@ -376,7 +375,7 @@ sensor_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) sensorinfo->ext_process, sensorinfo->ext_args, NULL); LOG (GNUNET_ERROR_TYPE_DEBUG, "Process started for sensor `%s'\n", - sensorinfo->name); + sensorinfo->name); GNUNET_free (process_path); } else @@ -405,14 +404,13 @@ schedule_sensor (void *cls, const struct GNUNET_HashCode *key, void *value) if (GNUNET_NO == should_run_sensor (sensorinfo)) return GNUNET_YES; LOG (GNUNET_ERROR_TYPE_DEBUG, - "Scheduling sensor `%s' to run after %" PRIu64 " microseconds\n", - sensorinfo->name, sensorinfo->interval.rel_value_us); + "Scheduling sensor `%s' to run after %" PRIu64 " microseconds\n", + sensorinfo->name, sensorinfo->interval.rel_value_us); if (GNUNET_SCHEDULER_NO_TASK != sensorinfo->execution_task) { LOG (GNUNET_ERROR_TYPE_ERROR, - _ - ("Sensor `%s' execution task already set, this should not happen\n"), - sensorinfo->name); + _("Sensor `%s' execution task already set, this should not happen\n"), + sensorinfo->name); return GNUNET_NO; } sensorinfo->execution_task = @@ -441,7 +439,7 @@ schedule_all_sensors () */ int SENSOR_monitoring_start (const struct GNUNET_CONFIGURATION_Handle *c, - struct GNUNET_CONTAINER_MultiHashMap *s) + struct GNUNET_CONTAINER_MultiHashMap *s) { LOG (GNUNET_ERROR_TYPE_DEBUG, "Starting sensor reporting module.\n"); GNUNET_assert (NULL != s); @@ -449,8 +447,8 @@ SENSOR_monitoring_start (const struct GNUNET_CONFIGURATION_Handle *c, cfg = c; statistics = GNUNET_STATISTICS_create ("sensor", cfg); if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_filename (cfg, "SENSOR", "SENSOR_DIR", - &sensor_dir)) + GNUNET_CONFIGURATION_get_value_filename (cfg, "SENSOR", "SENSOR_DIR", + &sensor_dir)) { sensor_dir = GNUNET_SENSOR_get_default_sensor_dir (); } diff --git a/src/sensor/gnunet-service-sensor_reporting.c b/src/sensor/gnunet-service-sensor_reporting.c index 15edd149a..611f0d73d 100644 --- a/src/sensor/gnunet-service-sensor_reporting.c +++ b/src/sensor/gnunet-service-sensor_reporting.c @@ -524,7 +524,8 @@ create_value_message (struct ValueInfo *vi) struct GNUNET_SENSOR_ValueMessage *vm; struct GNUNET_MQ_Envelope *ev; - ev = GNUNET_MQ_msg_extra (vm, vi->last_value_size, GNUNET_MESSAGE_TYPE_SENSOR_READING); + ev = GNUNET_MQ_msg_extra (vm, vi->last_value_size, + GNUNET_MESSAGE_TYPE_SENSOR_READING); GNUNET_CRYPTO_hash (vi->sensor->name, strlen (vi->sensor->name) + 1, &vm->sensorname_hash); vm->sensorversion_major = htons (vi->sensor->version_major); @@ -607,7 +608,7 @@ handle_anomaly_report (void *cls, const struct GNUNET_PeerIdentity *other, } /* Send anomaly update to collection point */ if (NULL != ai->sensor->collection_point && - GNUNET_YES == ai->sensor->report_anomalies) + GNUNET_YES == ai->sensor->report_anomalies) { cadetp = get_cadet_peer (*ai->sensor->collection_point); send_anomaly_report (cadetp->mq, ai); @@ -636,8 +637,7 @@ value_watch_cb (void *cls, struct GNUNET_PEERSTORE_Record *record, char *emsg) if (NULL != emsg) { - LOG (GNUNET_ERROR_TYPE_ERROR, - _("PEERSTORE error: %s.\n"), emsg); + LOG (GNUNET_ERROR_TYPE_ERROR, _("PEERSTORE error: %s.\n"), emsg); return GNUNET_YES; } if (NULL != vi->last_value) @@ -647,7 +647,7 @@ value_watch_cb (void *cls, struct GNUNET_PEERSTORE_Record *record, char *emsg) } vi->last_value = GNUNET_memdup (record->value, record->value_size); vi->last_value_size = record->value_size; - vi->last_value_timestamp = GNUNET_TIME_absolute_get(); + vi->last_value_timestamp = GNUNET_TIME_absolute_get (); vi->last_value_reported = GNUNET_NO; return GNUNET_YES; } @@ -772,7 +772,7 @@ cadet_channel_destroyed (void *cls, const struct GNUNET_CADET_Channel *channel, struct CadetPeer *cadetp = channel_ctx; if (GNUNET_YES == cadetp->destroying) - return; + return; GNUNET_CONTAINER_DLL_remove (cadetp_head, cadetp_tail, cadetp); cadetp->channel = NULL; destroy_cadet_peer (cadetp); @@ -842,12 +842,10 @@ report_value (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) vi->reporting_task = GNUNET_SCHEDULER_add_delayed (sensor->value_reporting_interval, &report_value, vi); - if (0 == vi->last_value_size || - GNUNET_YES == vi->last_value_reported) + if (0 == vi->last_value_size || GNUNET_YES == vi->last_value_reported) { LOG (GNUNET_ERROR_TYPE_WARNING, - "Did not receive a fresh value from `%s' to report.\n", - sensor->name); + "Did not receive a fresh value from `%s' to report.\n", sensor->name); return; } LOG (GNUNET_ERROR_TYPE_DEBUG, @@ -883,6 +881,7 @@ init_sensor_reporting (void *cls, const struct GNUNET_HashCode *key, /* Create sensor anomaly info context */ ai = GNUNET_new (struct AnomalyInfo); + ai->sensor = sensor; ai->anomalous = GNUNET_NO; ai->anomalous_neighbors = @@ -902,11 +901,11 @@ init_sensor_reporting (void *cls, const struct GNUNET_HashCode *key, vi->last_value_size = 0; vi->last_value_reported = GNUNET_NO; vi->wc = - GNUNET_PEERSTORE_watch (peerstore, "sensor", &mypeerid, sensor->name, - &value_watch_cb, vi); + GNUNET_PEERSTORE_watch (peerstore, "sensor", &mypeerid, sensor->name, + &value_watch_cb, vi); vi->reporting_task = - GNUNET_SCHEDULER_add_delayed (sensor->value_reporting_interval, - &report_value, vi); + GNUNET_SCHEDULER_add_delayed (sensor->value_reporting_interval, + &report_value, vi); GNUNET_CONTAINER_DLL_insert (vi_head, vi_tail, vi); return GNUNET_YES; } @@ -921,7 +920,7 @@ init_sensor_reporting (void *cls, const struct GNUNET_HashCode *key, */ int SENSOR_reporting_start (const struct GNUNET_CONFIGURATION_Handle *c, - struct GNUNET_CONTAINER_MultiHashMap *s) + struct GNUNET_CONTAINER_MultiHashMap *s) { static struct GNUNET_CORE_MessageHandler core_handlers[] = { {&handle_anomaly_report, GNUNET_MESSAGE_TYPE_SENSOR_ANOMALY_REPORT, diff --git a/src/sensor/sensor.conf.in b/src/sensor/sensor.conf.in index 60a62b650..12b5b4d35 100644 --- a/src/sensor/sensor.conf.in +++ b/src/sensor/sensor.conf.in @@ -5,6 +5,12 @@ UNIXPATH = $GNUNET_RUNTIME_DIR/gnunet-service-sensor.sock UNIX_MATCH_UID = NO UNIX_MATCH_GID = YES +# Which modules to run (default: YES) +START_MONITORING = YES +START_REPORTING = YES +START_ANALYSIS = YES +STARTING_UPDATE = YES + # Path to directory containing sensor definitions. # If not set, will load from default location. #SENSOR_DIR = diff --git a/src/sensor/sensor.h b/src/sensor/sensor.h index c5dd3bb1b..0b8daaa2c 100644 --- a/src/sensor/sensor.h +++ b/src/sensor/sensor.h @@ -107,7 +107,7 @@ SENSOR_reporting_anomaly_update (struct GNUNET_SENSOR_SensorInfo *sensor, */ int SENSOR_reporting_start (const struct GNUNET_CONFIGURATION_Handle *c, - struct GNUNET_CONTAINER_MultiHashMap *s); + struct GNUNET_CONTAINER_MultiHashMap *s); /** @@ -146,4 +146,4 @@ SENSOR_monitoring_stop (); */ int SENSOR_monitoring_start (const struct GNUNET_CONFIGURATION_Handle *c, - struct GNUNET_CONTAINER_MultiHashMap *s); + struct GNUNET_CONTAINER_MultiHashMap *s); -- 2.25.1