From 7185cbac9989889c18f04ee77133060e6fba7263 Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Mon, 26 Nov 2012 13:56:27 +0000 Subject: - more changes --- src/sysmon/gnunet-daemon-sysmon.c | 108 +++++++++++++++++++++++++++++++------- 1 file changed, 88 insertions(+), 20 deletions(-) (limited to 'src/sysmon') diff --git a/src/sysmon/gnunet-daemon-sysmon.c b/src/sysmon/gnunet-daemon-sysmon.c index 6a2168c40..4926a3c1d 100644 --- a/src/sysmon/gnunet-daemon-sysmon.c +++ b/src/sysmon/gnunet-daemon-sysmon.c @@ -27,6 +27,13 @@ #include "gnunet_util_lib.h" #include "gnunet_statistics_service.h" +enum operation +{ + o_internal, + o_command +}; + + enum type { t_static, @@ -39,25 +46,75 @@ enum value v_string }; +/** + * A system property to monitor + */ struct SysmonProperty { + /** + * Next element in in the DLL + */ struct SysmonProperty *next; - struct SysmonProperty *prev; - - char * desc; - int type; - int value_type; - struct GNUNET_TIME_Relative interval; - - char * cmd; - char * cmd_args; - void * cmd_exec_handle; - uint64_t num_val; - char * str_val; + /** + * Previous element in in the DLL + */ + struct SysmonProperty *prev; - GNUNET_SCHEDULER_TaskIdentifier task_id; - GNUNET_SCHEDULER_Task task; + /** + * Description used for statistics valuesd + */ + char * desc; + + /** + * Type + */ + int type; + + /** + * Value type + */ + int value_type; + + /** + * Execution interval + */ + struct GNUNET_TIME_Relative interval; + + /** + * Command + */ + char * cmd; + + /** + * Command arguments + */ + char * cmd_args; + + /** + * Command execution handle + */ + void * cmd_exec_handle; + + /** + * Numerical value + */ + uint64_t num_val; + + /** + * String value + */ + char * str_val; + + /** + * Task id + */ + GNUNET_SCHEDULER_TaskIdentifier task_id; + + /** + * Task handle + */ + GNUNET_SCHEDULER_Task task; }; @@ -80,7 +137,6 @@ struct GNUNET_STATISTICS_Handle *stats; /** * Shutdown task */ - GNUNET_SCHEDULER_TaskIdentifier end_task; struct SysmonProperty *sp_head; @@ -175,9 +231,25 @@ exec_cmd_proc (void *cls, const char *line) return; } - + switch (sp->value_type) { + case v_numeric: + if (1 != sscanf (line, "%lu", &sp->num_val)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Command output was not a numerical value: `%s'\n", line); + return; + } + break; + case v_string: + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "NOT IMPLEMENTED\n"); + break; + default: + break; + } GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Property output: `%s'\n", line); + put_property (sp); + + } static void @@ -192,16 +264,12 @@ exec_cmd (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) sp->cmd_exec_handle = NULL; GNUNET_break (0); } - - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Trying to exec : `%s'\n", sp->cmd); if (NULL == (sp->cmd_exec_handle = GNUNET_OS_command_run (&exec_cmd_proc, sp, GNUNET_TIME_UNIT_SECONDS, sp->cmd, sp->cmd, sp->cmd_args, NULL))) GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Property `%s': command `%s' failed\n", sp->desc, sp->cmd); - else - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Property `%s': command `%s' DONE\n", sp->desc, sp->cmd); } static void -- cgit v1.2.3