From 0a57b248543e5adbfd38b65dabbf93870df77a07 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Sun, 28 Oct 2007 18:45:46 +0100 Subject: [PATCH] src/plugin.[ch]: Added a notification type and auxiliary functions. --- src/plugin.c | 34 ++++++++++++++++++++++++++++++++++ src/plugin.h | 19 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/src/plugin.c b/src/plugin.c index 37c91a9b..67d61880 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -54,6 +54,7 @@ static llist_t *list_write; static llist_t *list_shutdown; static llist_t *list_data_set; static llist_t *list_log; +static llist_t *list_notification; static char *plugindir = NULL; @@ -463,6 +464,12 @@ int plugin_register_log (char *name, return (register_callback (&list_log, name, (void *) callback)); } /* int plugin_register_log */ +int plugin_register_notification (const char *name, + int (*callback) (const notification_t *notif)) +{ + return (register_callback (&list_log, name, (void *) callback)); +} /* int plugin_register_log */ + int plugin_unregister_config (const char *name) { cf_unregister (name); @@ -534,6 +541,11 @@ int plugin_unregister_log (const char *name) return (plugin_unregister (list_log, name)); } +int plugin_unregister_notification (const char *name) +{ + return (plugin_unregister (list_notification, name)); +} + void plugin_init_all (void) { int (*callback) (void); @@ -697,6 +709,28 @@ int plugin_dispatch_values (const char *name, value_list_t *vl) return (0); } /* int plugin_dispatch_values */ +int plugin_dispatch_notification (const notification_t *notif) +{ + int (*callback) (const notification_t *); + llentry_t *le; + /* Possible TODO: Add flap detection here */ + + /* Nobody cares for notifications */ + if (list_notification == NULL) + return (-1); + + le = llist_head (list_notification); + while (le != NULL) + { + callback = (int (*) (const notification_t *)) le->value; + (*callback) (notif); + + le = le->next; + } + + return (0); +} /* int plugin_dispatch_notification */ + void plugin_log (int level, const char *format, ...) { char msg[512]; diff --git a/src/plugin.h b/src/plugin.h index 4ca6c771..8c5acab0 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -45,6 +45,12 @@ # define LOG_DEBUG 7 #endif +#define NOTIF_MAX_MSG_LEN 128 + +#define NOTIF_FAILURE 1 +#define NOTIF_WARNING 2 +#define NOTIF_OKAY 4 + /* * Public data types */ @@ -97,6 +103,14 @@ typedef struct complain_s unsigned int delay; /* how many more iterations we still need to wait */ } complain_t; +typedef struct notification_s +{ + int severity; + char message[NOTIF_MAX_MSG_LEN]; + time_t time; + char host[DATA_MAX_NAME_LEN]; +} notification_t; + /* * NAME * plugin_set_dir @@ -160,6 +174,8 @@ int plugin_register_shutdown (char *name, int plugin_register_data_set (const data_set_t *ds); int plugin_register_log (char *name, void (*callback) (int, const char *)); +int plugin_register_notification (const char *name, + int (*callback) (const notification_t *notif)); int plugin_unregister_config (const char *name); int plugin_unregister_complex_config (const char *name); @@ -169,6 +185,7 @@ int plugin_unregister_write (const char *name); int plugin_unregister_shutdown (const char *name); int plugin_unregister_data_set (const char *name); int plugin_unregister_log (const char *name); +int plugin_unregister_notification (const char *name); /* @@ -188,6 +205,8 @@ int plugin_unregister_log (const char *name); */ int plugin_dispatch_values (const char *name, value_list_t *vl); +int plugin_dispatch_notification (const notification_t *notif); + void plugin_log (int level, const char *format, ...); #define ERROR(...) plugin_log (LOG_ERR, __VA_ARGS__) #define WARNING(...) plugin_log (LOG_WARNING, __VA_ARGS__) -- 2.30.2