X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fplugin.h;h=3088e06e6cb70bc7b6a659ae0dfec680a8b99cb1;hb=67fde1b848831de9da2f7a77ab60887ba2b252db;hp=7692ebdb0377eb3212a4c3a2da9931c837202d46;hpb=939a113b288dfdee7df2263c682d27d7146c6013;p=collectd.git diff --git a/src/plugin.h b/src/plugin.h index 7692ebdb..3088e06e 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -2,7 +2,7 @@ #define PLUGIN_H /** * collectd - src/plugin.h - * Copyright (C) 2005-2007 Florian octo Forster + * Copyright (C) 2005-2008 Florian octo Forster * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -19,6 +19,7 @@ * * Authors: * Florian octo Forster + * Sebastian Harl **/ #include "collectd.h" @@ -45,6 +46,12 @@ # define LOG_DEBUG 7 #endif +#define NOTIF_MAX_MSG_LEN 256 + +#define NOTIF_FAILURE 1 +#define NOTIF_WARNING 2 +#define NOTIF_OKAY 4 + /* * Public data types */ @@ -67,12 +74,13 @@ struct value_list_s char host[DATA_MAX_NAME_LEN]; char plugin[DATA_MAX_NAME_LEN]; char plugin_instance[DATA_MAX_NAME_LEN]; + char type[DATA_MAX_NAME_LEN]; char type_instance[DATA_MAX_NAME_LEN]; }; typedef struct value_list_s value_list_t; -#define VALUE_LIST_INIT { NULL, 0, 0, interval_g, "localhost", "", "", "" } -#define VALUE_LIST_STATIC { NULL, 0, 0, 0, "localhost", "", "", "" } +#define VALUE_LIST_INIT { NULL, 0, 0, interval_g, "localhost", "", "", "", "" } +#define VALUE_LIST_STATIC { NULL, 0, 0, 0, "localhost", "", "", "", "" } struct data_source_s { @@ -91,11 +99,42 @@ struct data_set_s }; typedef struct data_set_s data_set_t; -typedef struct complain_s +enum notification_meta_type_e +{ + NM_TYPE_STRING, + NM_TYPE_SIGNED_INT, + NM_TYPE_UNSIGNED_INT, + NM_TYPE_DOUBLE, + NM_TYPE_BOOLEAN +}; + +typedef struct notification_meta_s +{ + char name[DATA_MAX_NAME_LEN]; + enum notification_meta_type_e type; + union + { + const char *nm_string; + int64_t nm_signed_int; + uint64_t nm_unsigned_int; + double nm_double; + bool nm_boolean; + } nm_value; + struct notification_meta_s *next; +} notification_meta_t; + +typedef struct notification_s { - unsigned int interval; /* how long we wait for reporting this error again */ - unsigned int delay; /* how many more iterations we still need to wait */ -} complain_t; + int severity; + time_t time; + char message[NOTIF_MAX_MSG_LEN]; + char host[DATA_MAX_NAME_LEN]; + char plugin[DATA_MAX_NAME_LEN]; + char plugin_instance[DATA_MAX_NAME_LEN]; + char type[DATA_MAX_NAME_LEN]; + char type_instance[DATA_MAX_NAME_LEN]; + notification_meta_t *meta; +} notification_t; /* * NAME @@ -136,10 +175,43 @@ void plugin_set_dir (const char *dir); int plugin_load (const char *name); void plugin_init_all (void); -void plugin_read_all (const int *loop); +void plugin_read_all (void); +int plugin_read_all_once (void); void plugin_shutdown_all (void); /* + * NAME + * plugin_write + * + * DESCRIPTION + * Calls the write function of the given plugin with the provided data set and + * value list. It differs from `plugin_dispatch_value' in that it does not + * update the cache, does not do threshold checking, call the chain subsystem + * and so on. It looks up the requested plugin and invokes the function, end + * of story. + * + * ARGUMENTS + * plugin Name of the plugin. If NULL, the value is sent to all registered + * write functions. + * ds Pointer to the data_set_t structure. If NULL, the data set is + * looked up according to the `type' member in the `vl' argument. + * vl The actual value to be processed. Must not be NULL. + * + * RETURN VALUE + * Returns zero upon success or non-zero if an error occurred. If `plugin' is + * NULL and more than one plugin is called, an error is only returned if *all* + * plugins fail. + * + * NOTES + * This is the function used by the `write' built-in target. May be used by + * other target plugins. + */ +int plugin_write (const char *plugin, + const data_set_t *ds, const value_list_t *vl); + +int plugin_flush (const char *plugin, int timeout, const char *identifier); + +/* * The `plugin_register_*' functions are used to make `config', `init', * `read', `write' and `shutdown' functions known to the plugin * infrastructure. Also, the data-formats are made public like this. @@ -155,20 +227,26 @@ int plugin_register_read (const char *name, int (*callback) (void)); int plugin_register_write (const char *name, int (*callback) (const data_set_t *ds, const value_list_t *vl)); +int plugin_register_flush (const char *name, + int (*callback) (const int timeout, const char *identifier)); int plugin_register_shutdown (char *name, int (*callback) (void)); 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); int plugin_unregister_init (const char *name); int plugin_unregister_read (const char *name); int plugin_unregister_write (const char *name); +int plugin_unregister_flush (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); /* @@ -182,13 +260,16 @@ int plugin_unregister_log (const char *name); * write-functions. * * ARGUMENTS - * `name' Name/type of the data-set that describe the values in `vl'. * `vl' Value list of the values that have been read by a `read' * function. */ -int plugin_dispatch_values (const char *name, value_list_t *vl); +int plugin_dispatch_values (value_list_t *vl); + +int plugin_dispatch_notification (const notification_t *notif); + +void plugin_log (int level, const char *format, ...) + __attribute__ ((format(printf,2,3))); -void plugin_log (int level, const char *format, ...); #define ERROR(...) plugin_log (LOG_ERR, __VA_ARGS__) #define WARNING(...) plugin_log (LOG_WARNING, __VA_ARGS__) #define NOTICE(...) plugin_log (LOG_NOTICE, __VA_ARGS__) @@ -199,10 +280,27 @@ void plugin_log (int level, const char *format, ...); # define DEBUG(...) /* noop */ #endif /* ! COLLECT_DEBUG */ -/* TODO: Move plugin_{complain,relief} into `utils_complain.[ch]'. -octo */ -void plugin_complain (int level, complain_t *c, const char *format, ...); -void plugin_relief (int level, complain_t *c, const char *format, ...); - const data_set_t *plugin_get_ds (const char *name); +int plugin_notification_meta_add_string (notification_t *n, + const char *name, + const char *value); +int plugin_notification_meta_add_signed_int (notification_t *n, + const char *name, + int64_t value); +int plugin_notification_meta_add_unsigned_int (notification_t *n, + const char *name, + uint64_t value); +int plugin_notification_meta_add_double (notification_t *n, + const char *name, + double value); +int plugin_notification_meta_add_boolean (notification_t *n, + const char *name, + bool value); + +int plugin_notification_meta_copy (notification_t *dst, + const notification_t *src); + +int plugin_notification_meta_free (notification_meta_t *n); + #endif /* PLUGIN_H */