[Initng-svn] r4065 - in initng/trunk: .
svn at initng.thinktux.net
svn at initng.thinktux.net
Mon May 8 13:04:31 CEST 2006
Author: jimmy
Date: Mon May 8 13:04:29 2006
New Revision: 4065
Modified:
initng/trunk/TODO
initng/trunk/plugins/nge/initng_nge.c
initng/trunk/plugins/nge/initng_nge.h
initng/trunk/plugins/nge/libngeclient.c
initng/trunk/plugins/nge/libngeclient.h
initng/trunk/plugins/nge/nge.c
Log:
Add process_killed notification on nge bus.
Modified: initng/trunk/TODO
==============================================================================
--- initng/trunk/TODO (original)
+++ initng/trunk/TODO Mon May 8 13:04:29 2006
@@ -3,7 +3,7 @@
Move all selinux stuff to an own selinux plugin.
-add nge events, [DONE percentage], and kill notice, when a process dies nge shud know.
+[DONE] add nge events, percentage, and kill notice, when a process dies nge shud know.
Fix the xml parser.
Modified: initng/trunk/plugins/nge/initng_nge.c
==============================================================================
--- initng/trunk/plugins/nge/initng_nge.c (original)
+++ initng/trunk/plugins/nge/initng_nge.c Mon May 8 13:04:29 2006
@@ -98,6 +98,31 @@
}
}
+static int handle_killed(active_db_h * service, process_h * process)
+{
+ char *buffert = NULL;
+ int len;
+
+ buffert = calloc(180 + strlen(service->name) +
+ strlen(service->current_state->state_name) +
+ strlen(process->pt->name),
+ sizeof(char));
+
+ len = sprintf(buffert,
+ "<event type=\"process_killed\" service=\"%s\" is=\"%i\" state=\"%s\" process=\"%s\" exit_status=\"%i\" term_sig=\"%i\"/>\n",
+ service->name, service->current_state->is,
+ service->current_state->state_name,
+ process->pt->name, WEXITSTATUS(process->r_code), WTERMSIG(process->r_code));
+
+ if (len > 1)
+ send_to_all(buffert, sizeof(char) * len);
+
+ free(buffert);
+
+ /* AlwaYs, AlwaYs, return FALSE to mark this killed process as NOT handled */
+ return(FALSE);
+}
+
static void close_initiator_socket(void)
{
/* Check if we need to remove hooks */
@@ -114,6 +139,7 @@
initng_plugin_hook_unregister(&g.SWATCHERS, &system_state_change);
initng_plugin_hook_unregister(&g.PIPEWATCHERS, &system_pipe_watchers);
initng_plugin_hook_unregister(&g.ERR_MSG, &print_error);
+ initng_plugin_hook_unregister(&g.HANDLE_KILLED, &handle_killed);
is_active = FALSE;
}
@@ -187,6 +213,7 @@
initng_plugin_hook_register(&g.PIPEWATCHERS, 50,
&system_pipe_watchers);
initng_plugin_hook_register(&g.ERR_MSG, 50, &print_error);
+ initng_plugin_hook_register(&g.HANDLE_KILLED, 1, &handle_killed);
is_active = TRUE;
}
/* create a new socket, for reading */
Modified: initng/trunk/plugins/nge/initng_nge.h
==============================================================================
--- initng/trunk/plugins/nge/initng_nge.h (original)
+++ initng/trunk/plugins/nge/initng_nge.h Mon May 8 13:04:29 2006
@@ -23,4 +23,4 @@
#define NGE_REAL NGE_PREFIX "nge"
#define NGE_TEST NGE_PREFIX "nge-test"
-#define NGE_VERSION 3
+#define NGE_VERSION 4
Modified: initng/trunk/plugins/nge/libngeclient.c
==============================================================================
--- initng/trunk/plugins/nge/libngeclient.c (original)
+++ initng/trunk/plugins/nge/libngeclient.c Mon May 8 13:04:29 2006
@@ -421,6 +421,28 @@
"state");
}
+/* called on a <event type="process_killed" */
+static void ngeclient_handle_process_killed(nge_event * event,
+ char *tag, int chars)
+{
+ assert(event);
+ assert(tag);
+ event->state_type = PROCESS_KILLED;
+ event->payload.process_killed.service = ngeclient_get_option(tag,
+ "service");
+ event->payload.process_killed.is = (e_is) ngeclient_get_int(tag,
+ "is");
+ event->payload.process_killed.state_name = ngeclient_get_option(tag,
+ "state");
+ event->payload.process_killed.process = ngeclient_get_option(tag,
+ "process");
+ event->payload.process_killed.exit_status = ngeclient_get_int(tag,
+ "exit_status");
+ event->payload.process_killed.term_sig = ngeclient_get_int(tag,
+ "term_sig");
+
+}
+
/* called on a <event type="initial_system_state" */
static void ngeclient_handle_initial_system_state(nge_event * event,
char *tag, int chars)
@@ -494,6 +516,10 @@
{
ngeclient_handle_service_output(event, tag, chars);
}
+ else if (strcmp(type, "process_killed") == 0)
+ {
+ ngeclient_handle_process_killed(event, tag, chars);
+ }
else if (strcmp(type, "err_msg") == 0)
{
ngeclient_handle_err_msg(event, tag, chars);
@@ -761,6 +787,14 @@
if (e->payload.service_output.service)
free(e->payload.service_output.output);
break;
+ case PROCESS_KILLED:
+ if (e->payload.process_killed.service)
+ free(e->payload.process_killed.service);
+ if (e->payload.process_killed.state_name)
+ free(e->payload.process_killed.state_name);
+ if (e->payload.process_killed.process)
+ free(e->payload.process_killed.process);
+ break;
}
free(e);
}
Modified: initng/trunk/plugins/nge/libngeclient.h
==============================================================================
--- initng/trunk/plugins/nge/libngeclient.h (original)
+++ initng/trunk/plugins/nge/libngeclient.h Mon May 8 13:04:29 2006
@@ -36,6 +36,7 @@
INITIAL_SYSTEM_STATE_CHANGE = 7,
INITIAL_STATE_FINISHED = 8,
SERVICE_OUTPUT = 9,
+ PROCESS_KILLED = 10,
} e_state_type;
@@ -84,6 +85,17 @@
int percent_stopped;
} service_state_change;
+ /* process_killed event */
+ struct
+ {
+ char *service;
+ e_is is;
+ char *state_name;
+ char *process;
+ int exit_status;
+ int term_sig;
+ } process_killed;
+
/* system_state_change and initial_system_state */
h_sys_state system_state_change;
Modified: initng/trunk/plugins/nge/nge.c
==============================================================================
--- initng/trunk/plugins/nge/nge.c (original)
+++ initng/trunk/plugins/nge/nge.c Mon May 8 13:04:29 2006
@@ -57,6 +57,14 @@
fprintf(stdout, "Dissonnected from initng.\n");
}
+static void process_killed(char *service, e_is is, char *state, char * process, int exit_status, int term_sig)
+{
+ fprintf(stdout, "Service \"%s\" state \"%s\" (%i) process \"%s\" killed: exit_status \"%i\" term_sig \"%i\"\n",
+ service, state, is, process, exit_status, term_sig);
+
+}
+
+
static void service_change(char *service, e_is is, char *state, int pstart, int pstop)
{
switch (is)
@@ -160,6 +168,14 @@
e->payload.service_output.process,
e->payload.service_output.output);
return;
+ case PROCESS_KILLED:
+ process_killed(e->payload.process_killed.service,
+ e->payload.process_killed.is,
+ e->payload.process_killed.state_name,
+ e->payload.process_killed.process,
+ e->payload.process_killed.exit_status,
+ e->payload.process_killed.term_sig);
+ return;
}
}
More information about the Initng-svn
mailing list