diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2012-11-26 13:56:27 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2012-11-26 13:56:27 +0000 |
commit | 7185cbac9989889c18f04ee77133060e6fba7263 (patch) | |
tree | 3cffd706e10a0a3590f7599a3fdb3fb335eec477 /src/sysmon | |
parent | 481f9b4ffc0b3b33f6ac59a3aa482e2a1a280e3e (diff) | |
download | gnunet-7185cbac9989889c18f04ee77133060e6fba7263.tar.gz gnunet-7185cbac9989889c18f04ee77133060e6fba7263.zip |
- more changes
Diffstat (limited to 'src/sysmon')
-rw-r--r-- | src/sysmon/gnunet-daemon-sysmon.c | 108 |
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 | ||
30 | enum operation | ||
31 | { | ||
32 | o_internal, | ||
33 | o_command | ||
34 | }; | ||
35 | |||
36 | |||
30 | enum type | 37 | enum 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 | */ | ||
42 | struct SysmonProperty | 52 | struct 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 | |||
84 | GNUNET_SCHEDULER_TaskIdentifier end_task; | 140 | GNUNET_SCHEDULER_TaskIdentifier end_task; |
85 | 141 | ||
86 | struct SysmonProperty *sp_head; | 142 | struct 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 | ||
183 | static void | 255 | static 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 | ||
207 | static void | 275 | static void |