X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fdaemon%2Fplugin.h;h=a9ee72d4c9328c2e9827468cb8dff27998894c95;hp=d3038a395ea5f1c6ec52ce9eff27d3667e8a53b4;hb=1159cb5d383c55a80a0db100b8f7aadcf44740a5;hpb=51181b899668ad2c232a152d6e5e787c4eb049cc diff --git a/src/daemon/plugin.h b/src/daemon/plugin.h index d3038a39..a9ee72d4 100644 --- a/src/daemon/plugin.h +++ b/src/daemon/plugin.h @@ -36,171 +36,163 @@ #include -#define PLUGIN_FLAGS_GLOBAL 0x0001 - -#ifndef DATA_MAX_NAME_LEN -# define DATA_MAX_NAME_LEN 128 -#endif - -#define DS_TYPE_COUNTER 0 -#define DS_TYPE_GAUGE 1 -#define DS_TYPE_DERIVE 2 +#define DS_TYPE_COUNTER 0 +#define DS_TYPE_GAUGE 1 +#define DS_TYPE_DERIVE 2 #define DS_TYPE_ABSOLUTE 3 -#define DS_TYPE_TO_STRING(t) (t == DS_TYPE_COUNTER) ? "counter" : \ - (t == DS_TYPE_GAUGE) ? "gauge" : \ - (t == DS_TYPE_DERIVE) ? "derive" : \ - (t == DS_TYPE_ABSOLUTE) ? "absolute" : \ - "unknown" - +#define DS_TYPE_TO_STRING(t) \ + (t == DS_TYPE_COUNTER) \ + ? "counter" \ + : (t == DS_TYPE_GAUGE) \ + ? "gauge" \ + : (t == DS_TYPE_DERIVE) \ + ? "derive" \ + : (t == DS_TYPE_ABSOLUTE) ? "absolute" : "unknown" #ifndef LOG_ERR -# define LOG_ERR 3 +#define LOG_ERR 3 #endif #ifndef LOG_WARNING -# define LOG_WARNING 4 +#define LOG_WARNING 4 #endif #ifndef LOG_NOTICE -# define LOG_NOTICE 5 +#define LOG_NOTICE 5 #endif #ifndef LOG_INFO -# define LOG_INFO 6 +#define LOG_INFO 6 #endif #ifndef LOG_DEBUG -# define LOG_DEBUG 7 +#define LOG_DEBUG 7 #endif #define NOTIF_MAX_MSG_LEN 256 #define NOTIF_FAILURE 1 #define NOTIF_WARNING 2 -#define NOTIF_OKAY 4 +#define NOTIF_OKAY 4 #define plugin_interval (plugin_get_ctx().interval) /* * Public data types */ +struct identifier_s { + char *host; + char *plugin; + char *plugin_instance; + char *type; + char *type_instance; +}; +typedef struct identifier_s identifier_t; + typedef unsigned long long counter_t; typedef double gauge_t; typedef int64_t derive_t; typedef uint64_t absolute_t; -union value_u -{ - counter_t counter; - gauge_t gauge; - derive_t derive; - absolute_t absolute; +union value_u { + counter_t counter; + gauge_t gauge; + derive_t derive; + absolute_t absolute; }; typedef union value_u value_t; -struct value_list_s -{ - value_t *values; - size_t values_len; - cdtime_t time; - cdtime_t interval; - 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]; - meta_data_t *meta; +struct value_list_s { + value_t *values; + size_t values_len; + cdtime_t time; + cdtime_t interval; + 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]; + meta_data_t *meta; }; typedef struct value_list_s value_list_t; -#define VALUE_LIST_INIT { NULL, 0, 0, plugin_get_interval (), \ - "localhost", "", "", "", "", NULL } -#define VALUE_LIST_STATIC { NULL, 0, 0, 0, "localhost", "", "", "", "", NULL } +#define VALUE_LIST_INIT \ + { .values = NULL, .meta = NULL } -struct data_source_s -{ - char name[DATA_MAX_NAME_LEN]; - int type; - double min; - double max; +struct data_source_s { + char name[DATA_MAX_NAME_LEN]; + int type; + double min; + double max; }; typedef struct data_source_s data_source_t; -struct data_set_s -{ - char type[DATA_MAX_NAME_LEN]; - size_t ds_num; - data_source_t *ds; +struct data_set_s { + char type[DATA_MAX_NAME_LEN]; + size_t ds_num; + data_source_t *ds; }; typedef struct data_set_s data_set_t; -enum notification_meta_type_e -{ - NM_TYPE_STRING, - NM_TYPE_SIGNED_INT, - NM_TYPE_UNSIGNED_INT, - NM_TYPE_DOUBLE, - NM_TYPE_BOOLEAN +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; +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 -{ - int severity; - cdtime_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; +typedef struct notification_s { + int severity; + cdtime_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; -struct user_data_s -{ - void *data; - void (*free_func) (void *); +struct user_data_s { + void *data; + void (*free_func)(void *); }; typedef struct user_data_s user_data_t; -struct plugin_ctx_s -{ - cdtime_t interval; - cdtime_t flush_interval; - cdtime_t flush_timeout; +struct plugin_ctx_s { + cdtime_t interval; + cdtime_t flush_interval; + cdtime_t flush_timeout; }; typedef struct plugin_ctx_s plugin_ctx_t; /* * Callback types */ -typedef int (*plugin_init_cb) (void); -typedef int (*plugin_read_cb) (user_data_t *); -typedef int (*plugin_write_cb) (const data_set_t *, const value_list_t *, - user_data_t *); -typedef int (*plugin_flush_cb) (cdtime_t timeout, const char *identifier, - user_data_t *); +typedef int (*plugin_init_cb)(void); +typedef int (*plugin_read_cb)(user_data_t *); +typedef int (*plugin_write_cb)(const data_set_t *, const value_list_t *, + user_data_t *); +typedef int (*plugin_flush_cb)(cdtime_t timeout, const char *identifier, + user_data_t *); /* "missing" callback. Returns less than zero on failure, zero if other * callbacks should be called, greater than zero if no more callbacks should be * called. */ -typedef int (*plugin_missing_cb) (const value_list_t *, user_data_t *); -typedef void (*plugin_log_cb) (int severity, const char *message, - user_data_t *); -typedef int (*plugin_shutdown_cb) (void); -typedef int (*plugin_notification_cb) (const notification_t *, - user_data_t *); +typedef int (*plugin_missing_cb)(const value_list_t *, user_data_t *); +typedef void (*plugin_log_cb)(int severity, const char *message, user_data_t *); +typedef int (*plugin_shutdown_cb)(void); +typedef int (*plugin_notification_cb)(const notification_t *, user_data_t *); /* * NAME * plugin_set_dir @@ -214,7 +206,7 @@ typedef int (*plugin_notification_cb) (const notification_t *, * NOTES * If `dir' is NULL the compiled in default `PLUGINDIR' is used. */ -void plugin_set_dir (const char *dir); +void plugin_set_dir(const char *dir); /* * NAME @@ -228,7 +220,7 @@ void plugin_set_dir (const char *dir); * * ARGUMENTS * `name' Name of the plugin to load. - * `flags' Hints on how to handle this plugin. + * `global' Make this plugins symbols available for other shared libraries. * * RETURN VALUE * Returns zero upon success, a value greater than zero if no plugin was found @@ -238,12 +230,12 @@ void plugin_set_dir (const char *dir); * Re-loading an already loaded module is detected and zero is returned in * this case. */ -int plugin_load (const char *name, uint32_t flags); +int plugin_load(const char *name, _Bool global); -int plugin_init_all (void); -void plugin_read_all (void); -int plugin_read_all_once (void); -int plugin_shutdown_all (void); +int plugin_init_all(void); +void plugin_read_all(void); +int plugin_read_all_once(void); +int plugin_shutdown_all(void); /* * NAME @@ -272,57 +264,54 @@ int plugin_shutdown_all (void); * 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_write(const char *plugin, const data_set_t *ds, + const value_list_t *vl); -int plugin_flush (const char *plugin, cdtime_t timeout, const char *identifier); +int plugin_flush(const char *plugin, cdtime_t 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. */ -int plugin_register_config (const char *name, - int (*callback) (const char *key, const char *val), - const char **keys, int keys_num); -int plugin_register_complex_config (const char *type, - int (*callback) (oconfig_item_t *)); -int plugin_register_init (const char *name, - plugin_init_cb callback); -int plugin_register_read (const char *name, - int (*callback) (void)); +int plugin_register_config(const char *name, + int (*callback)(const char *key, const char *val), + const char **keys, int keys_num); +int plugin_register_complex_config(const char *type, + int (*callback)(oconfig_item_t *)); +int plugin_register_init(const char *name, plugin_init_cb callback); +int plugin_register_read(const char *name, int (*callback)(void)); /* "user_data" will be freed automatically, unless * "plugin_register_complex_read" returns an error (non-zero). */ -int plugin_register_complex_read (const char *group, const char *name, - plugin_read_cb callback, - cdtime_t interval, - user_data_t const *user_data); -int plugin_register_write (const char *name, - plugin_write_cb callback, user_data_t const *user_data); -int plugin_register_flush (const char *name, - plugin_flush_cb callback, user_data_t const *user_data); -int plugin_register_missing (const char *name, - plugin_missing_cb callback, user_data_t const *user_data); -int plugin_register_shutdown (const char *name, - plugin_shutdown_cb callback); -int plugin_register_data_set (const data_set_t *ds); -int plugin_register_log (const char *name, - plugin_log_cb callback, user_data_t const *user_data); -int plugin_register_notification (const char *name, - plugin_notification_cb callback, user_data_t const *user_data); - -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_read_group (const char *group); -int plugin_unregister_write (const char *name); -int plugin_unregister_flush (const char *name); -int plugin_unregister_missing (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); +int plugin_register_complex_read(const char *group, const char *name, + plugin_read_cb callback, cdtime_t interval, + user_data_t const *user_data); +int plugin_register_write(const char *name, plugin_write_cb callback, + user_data_t const *user_data); +int plugin_register_flush(const char *name, plugin_flush_cb callback, + user_data_t const *user_data); +int plugin_register_missing(const char *name, plugin_missing_cb callback, + user_data_t const *user_data); +int plugin_register_shutdown(const char *name, plugin_shutdown_cb callback); +int plugin_register_data_set(const data_set_t *ds); +int plugin_register_log(const char *name, plugin_log_cb callback, + user_data_t const *user_data); +int plugin_register_notification(const char *name, + plugin_notification_cb callback, + user_data_t const *user_data); + +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_read_group(const char *group); +int plugin_unregister_write(const char *name); +int plugin_unregister_flush(const char *name); +int plugin_unregister_missing(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); /* * NAME @@ -334,7 +323,7 @@ int plugin_unregister_notification (const char *name); * Since some writers dynamically build their name it can be hard for * the configuring person to know it. This function will fill this gap. */ -void plugin_log_available_writers (void); +void plugin_log_available_writers(void); /* * NAME @@ -350,7 +339,7 @@ void plugin_log_available_writers (void); * `vl' Value list of the values that have been read by a `read' * function. */ -int plugin_dispatch_values (value_list_t const *vl); +int plugin_dispatch_values(value_list_t const *vl); /* * NAME @@ -384,62 +373,57 @@ int plugin_dispatch_values (value_list_t const *vl); * RETURNS * The number of values it failed to dispatch (zero on success). */ -__attribute__((sentinel)) -int plugin_dispatch_multivalue (value_list_t const *vl, - _Bool store_percentage, int store_type, ...); +__attribute__((sentinel)) int plugin_dispatch_multivalue(value_list_t const *vl, + _Bool store_percentage, + int store_type, ...); -int plugin_dispatch_missing (const value_list_t *vl); +int plugin_dispatch_missing(const value_list_t *vl); -int plugin_dispatch_notification (const notification_t *notif); +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, ...) + __attribute__((format(printf, 2, 3))); /* These functions return the parsed severity or less than zero on failure. */ -int parse_log_severity (const char *severity); -int parse_notif_severity (const char *severity); +int parse_log_severity(const char *severity); +int parse_notif_severity(const char *severity); -#define ERROR(...) plugin_log (LOG_ERR, __VA_ARGS__) -#define WARNING(...) plugin_log (LOG_WARNING, __VA_ARGS__) -#define NOTICE(...) plugin_log (LOG_NOTICE, __VA_ARGS__) -#define INFO(...) plugin_log (LOG_INFO, __VA_ARGS__) +#define ERROR(...) plugin_log(LOG_ERR, __VA_ARGS__) +#define WARNING(...) plugin_log(LOG_WARNING, __VA_ARGS__) +#define NOTICE(...) plugin_log(LOG_NOTICE, __VA_ARGS__) +#define INFO(...) plugin_log(LOG_INFO, __VA_ARGS__) #if COLLECT_DEBUG -# define DEBUG(...) plugin_log (LOG_DEBUG, __VA_ARGS__) -#else /* COLLECT_DEBUG */ -# define DEBUG(...) /* noop */ -#endif /* ! COLLECT_DEBUG */ - -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); +#define DEBUG(...) plugin_log(LOG_DEBUG, __VA_ARGS__) +#else /* COLLECT_DEBUG */ +#define DEBUG(...) /* noop */ +#endif /* ! COLLECT_DEBUG */ + +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); /* * Plugin context management. */ -void plugin_init_ctx (void); +void plugin_init_ctx(void); -plugin_ctx_t plugin_get_ctx (void); -plugin_ctx_t plugin_set_ctx (plugin_ctx_t ctx); +plugin_ctx_t plugin_get_ctx(void); +plugin_ctx_t plugin_set_ctx(plugin_ctx_t ctx); /* * NAME @@ -450,19 +434,20 @@ plugin_ctx_t plugin_set_ctx (plugin_ctx_t ctx); * return value will be strictly greater than zero in all cases. If * everything else fails, it will fall back to 10 seconds. */ -cdtime_t plugin_get_interval (void); +cdtime_t plugin_get_interval(void); /* * Context-aware thread management. */ -int plugin_thread_create (pthread_t *thread, const pthread_attr_t *attr, - void *(*start_routine) (void *), void *arg); +int plugin_thread_create(pthread_t *thread, const pthread_attr_t *attr, + void *(*start_routine)(void *), void *arg, + char const *name); /* * Plugins need to implement this */ -void module_register (void); +void module_register(void); #endif /* PLUGIN_H */