X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fplugin.h;h=b0bdbee12f164a3fc96b0c1bd4f1d85f69c44998;hb=2cea8075c666a6c6c7d6e1b4f95e1bee6f3803ac;hp=e14376e599eca2d1609a89f324068853615513b3;hpb=3454b5396956be55d89e2dfe5f3a7627233aff4f;p=collectd.git diff --git a/src/plugin.h b/src/plugin.h index e14376e5..b0bdbee1 100644 --- a/src/plugin.h +++ b/src/plugin.h @@ -1,11 +1,13 @@ +#ifndef PLUGIN_H +#define PLUGIN_H + /** * collectd - src/plugin.h - * Copyright (C) 2005 Florian octo Forster + * Copyright (C) 2005,2006 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 - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. + * Free Software Foundation; only version 2 of the License is applicable. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -20,21 +22,147 @@ * Florian octo Forster **/ -#ifndef PLUGIN_H -#define PLUGIN_H +#define DATA_MAX_NAME_LEN 64 + +#define DS_TYPE_COUNTER 0 +#define DS_TYPE_GAUGE 1 + +/* + * Public data types + */ +typedef unsigned long long counter_t; +typedef double gauge_t; + +union value_u +{ + counter_t counter; + gauge_t gauge; +}; +typedef union value_u value_t; + +struct value_list_s +{ + value_t *values; + int values_len; + time_t time; + char host[DATA_MAX_NAME_LEN]; + char plugin[DATA_MAX_NAME_LEN]; + char plugin_instance[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, "localhost", "", "", "" } + +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]; + int ds_num; + data_source_t *ds; +}; +typedef struct data_set_s data_set_t; + +typedef struct complain_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; + +extern char hostname[DATA_MAX_NAME_LEN]; + +/* + * NAME + * plugin_set_dir + * + * DESCRIPTION + * Sets the current `plugindir' + * + * ARGUMENTS + * `dir' Path to the plugin directory + * + * NOTES + * If `dir' is NULL the compiled in default `PLUGINDIR' is used. + */ +void plugin_set_dir (const char *dir); + +/* + * NAME + * plugin_load + * + * DESCRIPTION + * Searches the current `plugindir' (see `plugin_set_dir') for the plugin + * named $type and loads it. Afterwards the plugin's `module_register' + * function is called, which then calls `plugin_register' to register callback + * functions. + * + * ARGUMENTS + * `type' Name of the plugin to load. + * + * RETURN VALUE + * Returns zero upon success, a value greater than zero if no plugin was found + * and a value below zero if an error occurs. + * + * NOTES + * No attempt is made to re-load an already loaded module. + */ +int plugin_load (const char *name); -int plugin_load_all (char *dir); void plugin_init_all (void); -void plugin_read_all (void); - -bool plugin_exists (char *type); -void plugin_register (char *type, - void (*init) (void), - void (*read) (void), - void (*write) (char *, char *, char *)); -#ifdef HAVE_LIBRRD -void plugin_write (char *host, char *type, char *inst, char *val); -#endif /* HAVE_LIBRRD */ -void plugin_submit (char *type, char *inst, char *val); +void plugin_read_all (const int *loop); +void plugin_shutdown_all (void); + +/* + * 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_init (const char *name, + int (*callback) (void)); +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_shutdown (char *name, + int (*callback) (void)); +int plugin_register_data_set (const data_set_t *ds); + +int plugin_unregister_init (const char *name); +int plugin_unregister_read (const char *name); +int plugin_unregister_write (const char *name); +int plugin_unregister_shutdown (const char *name); +int plugin_unregister_data_set (const char *name); + +/* + * NAME + * plugin_dispatch_values + * + * DESCRIPTION + * This function is called by reading processes with the values they've + * aquired. The function fetches the data-set definition (that has been + * registered using `plugin_register_data_set') and calls _all_ registered + * 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, const value_list_t *vl); + +/* 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, ...); #endif /* PLUGIN_H */