X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fplugin.h;h=3f2d98cb057957bc30224a057598244a22cfccac;hb=d8825859c7b31f068899c2d5f8a147ea1ef65750;hp=868f44aba41d81f46fd384de7805ffa92f1a09fe;hpb=557b23d4bc8eb6ca64eab72b2d768112486f5001;p=collectd.git diff --git a/src/plugin.h b/src/plugin.h index 868f44ab..3f2d98cb 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -2,7 +2,7 @@ #define PLUGIN_H /** * collectd - src/plugin.h - * Copyright (C) 2005-2008 Florian octo Forster + * Copyright (C) 2005-2011 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 @@ -18,13 +18,14 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * Authors: - * Florian octo Forster + * Florian octo Forster * Sebastian Harl **/ #include "collectd.h" #include "configfile.h" #include "meta_data.h" +#include "utils_time.h" #define PLUGIN_FLAGS_GLOBAL 0x0001 @@ -64,6 +65,8 @@ #define NOTIF_WARNING 2 #define NOTIF_OKAY 4 +#define plugin_interval (plugin_get_ctx().interval) + /* * Public data types */ @@ -85,8 +88,8 @@ struct value_list_s { value_t *values; int values_len; - time_t time; - int interval; + 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]; @@ -96,7 +99,8 @@ struct value_list_s }; typedef struct value_list_s value_list_t; -#define VALUE_LIST_INIT { NULL, 0, 0, interval_g, "localhost", "", "", "", "", NULL } +#define VALUE_LIST_INIT { NULL, 0, 0, plugin_get_interval (), \ + "localhost", "", "", "", "", NULL } #define VALUE_LIST_STATIC { NULL, 0, 0, 0, "localhost", "", "", "", "", NULL } struct data_source_s @@ -135,7 +139,7 @@ typedef struct notification_meta_s int64_t nm_signed_int; uint64_t nm_unsigned_int; double nm_double; - bool nm_boolean; + _Bool nm_boolean; } nm_value; struct notification_meta_s *next; } notification_meta_t; @@ -143,7 +147,7 @@ typedef struct notification_meta_s typedef struct notification_s { int severity; - time_t time; + cdtime_t time; char message[NOTIF_MAX_MSG_LEN]; char host[DATA_MAX_NAME_LEN]; char plugin[DATA_MAX_NAME_LEN]; @@ -160,6 +164,12 @@ struct user_data_s }; typedef struct user_data_s user_data_t; +struct plugin_ctx_s +{ + cdtime_t interval; +}; +typedef struct plugin_ctx_s plugin_ctx_t; + /* * Callback types */ @@ -167,8 +177,12 @@ 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) (int timeout, const char *identifier, +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); @@ -248,7 +262,7 @@ void plugin_shutdown_all (void); 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); +int plugin_flush (const char *plugin, cdtime_t timeout, const char *identifier); /* * The `plugin_register_*' functions are used to make `config', `init', @@ -264,7 +278,9 @@ int plugin_register_init (const char *name, plugin_init_cb callback); int plugin_register_read (const char *name, int (*callback) (void)); -int plugin_register_complex_read (const char *name, +/* "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, const struct timespec *interval, user_data_t *user_data); @@ -272,7 +288,9 @@ int plugin_register_write (const char *name, plugin_write_cb callback, user_data_t *user_data); int plugin_register_flush (const char *name, plugin_flush_cb callback, user_data_t *user_data); -int plugin_register_shutdown (char *name, +int plugin_register_missing (const char *name, + plugin_missing_cb callback, user_data_t *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, @@ -284,8 +302,10 @@ 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); @@ -307,6 +327,8 @@ int plugin_unregister_notification (const char *name); * function. */ int plugin_dispatch_values (value_list_t *vl); +int plugin_dispatch_values_secure (const value_list_t *vl); +int plugin_dispatch_missing (const value_list_t *vl); int plugin_dispatch_notification (const notification_t *notif); @@ -339,11 +361,38 @@ int plugin_notification_meta_add_double (notification_t *n, double value); int plugin_notification_meta_add_boolean (notification_t *n, const char *name, - bool value); + _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); + +plugin_ctx_t plugin_get_ctx (void); +plugin_ctx_t plugin_set_ctx (plugin_ctx_t ctx); + +/* + * NAME + * plugin_get_interval + * + * DESCRIPTION + * This function returns the current value of the plugin's interval. The + * 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); + +/* + * Context-aware thread management. + */ + +int plugin_thread_create (pthread_t *thread, const pthread_attr_t *attr, + void *(*start_routine) (void *), void *arg); + #endif /* PLUGIN_H */