From: <rob...@op...> - 2012-11-28 14:38:33
|
From: Robin Sonefors <rob...@op...> This help is dynamically generated, as requested by Andreas Ericsson. Signed-off-by: Robin Sonefors <rob...@op...> --- base/nerd.c | 27 +++++++++++++++++++++++---- include/nagios.h | 2 +- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/base/nerd.c b/base/nerd.c index 897a5da..108b35b 100644 --- a/base/nerd.c +++ b/base/nerd.c @@ -24,6 +24,7 @@ struct nerd_channel { const char *name; /* name of this channel */ + const char *description; /* user-presentable string to document the purpouse of this channel */ unsigned int id; /* channel id (might vary between invocations) */ unsigned int required_options; /* event_broker_options required for this channel */ unsigned int num_callbacks; @@ -361,7 +362,7 @@ static int nerd_deinit(void) return 0; } -int nerd_mkchan(const char *name, int (*handler)(int, void *), unsigned int callbacks) +int nerd_mkchan(const char *name, const char *description, int (*handler)(int, void *), unsigned int callbacks) { struct nerd_channel *chan, **ptr; int i; @@ -378,6 +379,7 @@ int nerd_mkchan(const char *name, int (*handler)(int, void *), unsigned int call return -1; chan->name = name; + chan->description = description; chan->handler = handler; for(i = 0; callbacks && i < NEBCALLBACK_NUMITEMS; i++) { if(!(callbacks & (1 << i))) @@ -400,6 +402,17 @@ static int nerd_qh_handler(int sd, char *request, unsigned int len) struct nerd_channel *chan; int action; + if (!strcmp(request, "help")) { + int i; + nsock_printf(sd, "Manage subscriptions to NERD channels.\n" + "Valid commands are 'subscribe' and 'unsubscribe' to a specified channel.\n" + "The avalible channels are:"); + for (i = 0; i < num_channels; i++) { + nsock_printf(sd, "\n %-15s %s", channels[i]->name, channels[i]->description); + } + return 0; + } + while(request[len] == 0 || request[len] == '\n') request[len--] = 0; chan_name = strchr(request, ' '); @@ -445,9 +458,15 @@ int nerd_init(void) neb_add_core_module(&nerd_mod); - chan_host_checks_id = nerd_mkchan("hostchecks", chan_host_checks, nebcallback_flag(NEBCALLBACK_HOST_CHECK_DATA)); - chan_service_checks_id = nerd_mkchan("servicechecks", chan_service_checks, nebcallback_flag(NEBCALLBACK_SERVICE_CHECK_DATA)); - chan_opath_checks_id = nerd_mkchan("opathchecks", chan_opath_checks, nebcallback_flag(NEBCALLBACK_HOST_CHECK_DATA) | nebcallback_flag(NEBCALLBACK_SERVICE_CHECK_DATA)); + chan_host_checks_id = nerd_mkchan("hostchecks", + "Get information about host checks as they're executed", + chan_host_checks, nebcallback_flag(NEBCALLBACK_HOST_CHECK_DATA)); + chan_service_checks_id = nerd_mkchan("servicechecks", + "Get information about service checks as they're executed", + chan_service_checks, nebcallback_flag(NEBCALLBACK_SERVICE_CHECK_DATA)); + chan_opath_checks_id = nerd_mkchan("opathchecks", + "Get all host and service check information in gource format", + chan_opath_checks, nebcallback_flag(NEBCALLBACK_HOST_CHECK_DATA) | nebcallback_flag(NEBCALLBACK_SERVICE_CHECK_DATA)); logit(NSLOG_INFO_MESSAGE, TRUE, "NERD initialized and ready to rock!\n"); return 0; diff --git a/include/nagios.h b/include/nagios.h index dbfe027..82cd81f 100644 --- a/include/nagios.h +++ b/include/nagios.h @@ -434,7 +434,7 @@ extern const char *check_result_source(check_result *cr); /*** Nagios Event Radio Dispatcher functions ***/ extern int nerd_init(void); -extern int nerd_mkchan(const char *name, int (*handler)(int, void *), unsigned int callbacks); +extern int nerd_mkchan(const char *name, const char *description, int (*handler)(int, void *), unsigned int callbacks); /*** Query Handler functions, types and macros*/ typedef int (*qh_handler)(int, char *, unsigned int); -- 1.7.11.7 |