X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fplugin.h;h=0b34ab1df146420e7a6a0a525fabbd7060a669c0;hb=77460335ec305aa4fbd8218c6e5c1c849fbef9c0;hp=4f4a360299b7214ac6821620ab55cc906bb0f441;hpb=98062438c25226e2e4a28ab629de5dfa27a79913;p=collectd.git diff --git a/src/plugin.h b/src/plugin.h index 4f4a3602..0b34ab1d 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 @@ -24,11 +24,23 @@ #include "collectd.h" #include "configfile.h" +#include "meta_data.h" + +#define PLUGIN_FLAGS_GLOBAL 0x0001 #define DATA_MAX_NAME_LEN 64 -#define DS_TYPE_COUNTER 0 -#define DS_TYPE_GAUGE 1 +#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" + #ifndef LOG_ERR # define LOG_ERR 3 @@ -52,21 +64,20 @@ #define NOTIF_WARNING 2 #define NOTIF_OKAY 4 -#define FILTER_NOWRITE 1 -#define FILTER_NOTHRESHOLD_CHECK 2 -/* FILTER_IGNORE has to equal the bitwise or of all other filter flags */ -#define FILTER_IGNORE (FILTER_NOWRITE | FILTER_NOTHRESHOLD_CHECK) - /* * Public data types */ 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; + counter_t counter; + gauge_t gauge; + derive_t derive; + absolute_t absolute; }; typedef union value_u value_t; @@ -81,11 +92,12 @@ struct value_list_s 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, interval_g, "localhost", "", "", "", "" } -#define VALUE_LIST_STATIC { NULL, 0, 0, 0, "localhost", "", "", "", "" } +#define VALUE_LIST_INIT { NULL, 0, 0, interval_g, "localhost", "", "", "", "", NULL } +#define VALUE_LIST_STATIC { NULL, 0, 0, 0, "localhost", "", "", "", "", NULL } struct data_source_s { @@ -141,6 +153,28 @@ typedef struct notification_s notification_meta_t *meta; } notification_t; +struct user_data_s +{ + void *data; + void (*free_func) (void *); +}; +typedef struct user_data_s user_data_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) (int timeout, const char *identifier, + 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 @@ -168,7 +202,7 @@ void plugin_set_dir (const char *dir); * * ARGUMENTS * `name' Name of the plugin to load. - * `mr' Types of functions to request from the plugin. + * `flags' Hints on how to handle this plugin. * * RETURN VALUE * Returns zero upon success, a value greater than zero if no plugin was found @@ -177,7 +211,7 @@ void plugin_set_dir (const char *dir); * NOTES * No attempt is made to re-load an already loaded module. */ -int plugin_load (const char *name); +int plugin_load (const char *name, uint32_t flags); void plugin_init_all (void); void plugin_read_all (void); @@ -191,7 +225,7 @@ void plugin_shutdown_all (void); * 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 no do threshold checking, call the chain subsystem + * 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. * @@ -200,7 +234,7 @@ void plugin_shutdown_all (void); * 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 processes. Must not be NULL. + * 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 @@ -227,29 +261,31 @@ int plugin_register_config (const char *name, int plugin_register_complex_config (const char *type, int (*callback) (oconfig_item_t *)); int plugin_register_init (const char *name, - int (*callback) (void)); + plugin_init_cb callback); int plugin_register_read (const char *name, int (*callback) (void)); +int plugin_register_complex_read (const char *group, const char *name, + plugin_read_cb callback, + const struct timespec *interval, + user_data_t *user_data); int plugin_register_write (const char *name, - int (*callback) (const data_set_t *ds, const value_list_t *vl)); -int plugin_register_filter (const char *name, - int (*callback) (const data_set_t *ds, value_list_t *vl)); + plugin_write_cb callback, user_data_t *user_data); int plugin_register_flush (const char *name, - int (*callback) (const int timeout, const char *identifier)); -int plugin_register_shutdown (char *name, - int (*callback) (void)); + plugin_flush_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 (char *name, - void (*callback) (int, const char *)); +int plugin_register_log (const char *name, + plugin_log_cb callback, user_data_t *user_data); int plugin_register_notification (const char *name, - int (*callback) (const notification_t *notif)); + plugin_notification_cb callback, user_data_t *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_filter (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); @@ -272,6 +308,7 @@ 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_notification (const notification_t *notif); @@ -309,6 +346,6 @@ int plugin_notification_meta_add_boolean (notification_t *n, int plugin_notification_meta_copy (notification_t *dst, const notification_t *src); -int plugin_notification_meta_free (notification_t *n); +int plugin_notification_meta_free (notification_meta_t *n); #endif /* PLUGIN_H */