aboutsummaryrefslogtreecommitdiff
path: root/src/sysmon
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2012-11-26 13:56:27 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2012-11-26 13:56:27 +0000
commit7185cbac9989889c18f04ee77133060e6fba7263 (patch)
tree3cffd706e10a0a3590f7599a3fdb3fb335eec477 /src/sysmon
parent481f9b4ffc0b3b33f6ac59a3aa482e2a1a280e3e (diff)
downloadgnunet-7185cbac9989889c18f04ee77133060e6fba7263.tar.gz
gnunet-7185cbac9989889c18f04ee77133060e6fba7263.zip
- more changes
Diffstat (limited to 'src/sysmon')
-rw-r--r--src/sysmon/gnunet-daemon-sysmon.c108
1 files changed, 88 insertions, 20 deletions
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 @@
27#include "gnunet_util_lib.h" 27#include "gnunet_util_lib.h"
28#include "gnunet_statistics_service.h" 28#include "gnunet_statistics_service.h"
29 29
30enum operation
31{
32 o_internal,
33 o_command
34};
35
36
30enum type 37enum type
31{ 38{
32 t_static, 39 t_static,
@@ -39,25 +46,75 @@ enum value
39 v_string 46 v_string
40}; 47};
41 48
49/**
50 * A system property to monitor
51 */
42struct SysmonProperty 52struct SysmonProperty
43{ 53{
54 /**
55 * Next element in in the DLL
56 */
44 struct SysmonProperty *next; 57 struct SysmonProperty *next;
45 struct SysmonProperty *prev;
46
47 char * desc;
48 int type;
49 int value_type;
50 struct GNUNET_TIME_Relative interval;
51
52 char * cmd;
53 char * cmd_args;
54 void * cmd_exec_handle;
55 58
56 uint64_t num_val; 59 /**
57 char * str_val; 60 * Previous element in in the DLL
61 */
62 struct SysmonProperty *prev;
58 63
59 GNUNET_SCHEDULER_TaskIdentifier task_id; 64 /**
60 GNUNET_SCHEDULER_Task task; 65 * Description used for statistics valuesd
66 */
67 char * desc;
68
69 /**
70 * Type
71 */
72 int type;
73
74 /**
75 * Value type
76 */
77 int value_type;
78
79 /**
80 * Execution interval
81 */
82 struct GNUNET_TIME_Relative interval;
83
84 /**
85 * Command
86 */
87 char * cmd;
88
89 /**
90 * Command arguments
91 */
92 char * cmd_args;
93
94 /**
95 * Command execution handle
96 */
97 void * cmd_exec_handle;
98
99 /**
100 * Numerical value
101 */
102 uint64_t num_val;
103
104 /**
105 * String value
106 */
107 char * str_val;
108
109 /**
110 * Task id
111 */
112 GNUNET_SCHEDULER_TaskIdentifier task_id;
113
114 /**
115 * Task handle
116 */
117 GNUNET_SCHEDULER_Task task;
61 118
62}; 119};
63 120
@@ -80,7 +137,6 @@ struct GNUNET_STATISTICS_Handle *stats;
80/** 137/**
81 * Shutdown task 138 * Shutdown task
82 */ 139 */
83
84GNUNET_SCHEDULER_TaskIdentifier end_task; 140GNUNET_SCHEDULER_TaskIdentifier end_task;
85 141
86struct SysmonProperty *sp_head; 142struct SysmonProperty *sp_head;
@@ -175,9 +231,25 @@ exec_cmd_proc (void *cls, const char *line)
175 return; 231 return;
176 } 232 }
177 233
178 234 switch (sp->value_type) {
235 case v_numeric:
236 if (1 != sscanf (line, "%lu", &sp->num_val))
237 {
238 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Command output was not a numerical value: `%s'\n", line);
239 return;
240 }
241 break;
242 case v_string:
243 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "NOT IMPLEMENTED\n");
244 break;
245 default:
246 break;
247 }
179 248
180 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Property output: `%s'\n", line); 249 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Property output: `%s'\n", line);
250 put_property (sp);
251
252
181} 253}
182 254
183static void 255static void
@@ -192,16 +264,12 @@ exec_cmd (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
192 sp->cmd_exec_handle = NULL; 264 sp->cmd_exec_handle = NULL;
193 GNUNET_break (0); 265 GNUNET_break (0);
194 } 266 }
195
196 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Trying to exec : `%s'\n", sp->cmd);
197 if (NULL == (sp->cmd_exec_handle = GNUNET_OS_command_run (&exec_cmd_proc, sp, 267 if (NULL == (sp->cmd_exec_handle = GNUNET_OS_command_run (&exec_cmd_proc, sp,
198 GNUNET_TIME_UNIT_SECONDS, 268 GNUNET_TIME_UNIT_SECONDS,
199 sp->cmd, sp->cmd, 269 sp->cmd, sp->cmd,
200 sp->cmd_args, 270 sp->cmd_args,
201 NULL))) 271 NULL)))
202 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Property `%s': command `%s' failed\n", sp->desc, sp->cmd); 272 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Property `%s': command `%s' failed\n", sp->desc, sp->cmd);
203 else
204 GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Property `%s': command `%s' DONE\n", sp->desc, sp->cmd);
205} 273}
206 274
207static void 275static void