X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fdata_provider.c;h=02364431e3fd05bf567471cf4779afe16e5a5c50;hb=9d4459d28b5fab672f9e1a0aefb02ed5207180dc;hp=bf4cf889213d1a29109d91c8f849750aea5e81bb;hpb=b578a6b9f331c11ebc70d153494c7b6113990ee7;p=collection4.git diff --git a/src/data_provider.c b/src/data_provider.c index bf4cf88..0236443 100644 --- a/src/data_provider.c +++ b/src/data_provider.c @@ -21,13 +21,74 @@ * Florian octo Forster **/ +#include +#include + #include "data_provider.h" #include "dp_rrdtool.h" +#include +#include + +/* TODO: Turn this into an array for multiple data providers. */ +static data_provider_t *data_provider = NULL; + int data_provider_config (const oconfig_item_t *ci) /* {{{ */ { /* FIXME: Actually determine which data provider to call. */ return (dp_rrdtool_config (ci)); } /* }}} int data_provider_config */ +int data_provider_register (const char *name, data_provider_t *p) /* {{{ */ +{ + fprintf (stderr, "data_provider_register (name = %s, ptr = %p)\n", + name, (void *) p); + + if (data_provider == NULL) + data_provider = malloc (sizeof (*data_provider)); + if (data_provider == NULL) + return (ENOMEM); + + *data_provider = *p; + + return (0); +} /* }}} int data_provider_register */ + +int data_provider_get_idents (dp_get_idents_callback callback, /* {{{ */ + void *user_data) +{ + int status; + + if (data_provider == NULL) + return (EINVAL); + + /* TODO: Iterate over all data providers */ + status = data_provider->get_idents (data_provider->private_data, + callback, user_data); + + return (status); +} /* }}} int data_provider_get_idents */ + +int data_provider_get_ident_ds_names (graph_ident_t *ident, /* {{{ */ + dp_list_get_ident_ds_names_callback callback, void *user_data) +{ + if (data_provider == NULL) + return (EINVAL); + + return (data_provider->get_ident_ds_names (data_provider->private_data, + ident, callback, user_data)); +} /* }}} int data_provider_get_ident_ds_names */ + +int data_provider_get_ident_data (graph_ident_t *ident, /* {{{ */ + const char *ds_name, + dp_time_t begin, dp_time_t end, + dp_get_ident_data_callback callback, void *user_data) +{ + if (data_provider == NULL) + return (EINVAL); + + return (data_provider->get_ident_data (data_provider->private_data, + ident, ds_name, begin, end, callback, user_data)); +} /* }}} int data_provider_get_ident_data */ + /* vim: set sw=2 sts=2 et fdm=marker : */