X-Git-Url: https://git.octo.it/?p=collection4.git;a=blobdiff_plain;f=src%2Fgraph_list.c;h=1614307d3b72f1aadcc14dc0b95f0c7a9dbdbe86;hp=ecd873bae4824e90258821865e7ff12e3dc0c9e6;hb=92b68e4876cfab87eb37046f8a79876a46173341;hpb=3791b9f1f09c4c39ed96922b7f1640314805a175 diff --git a/src/graph_list.c b/src/graph_list.c index ecd873b..1614307 100644 --- a/src/graph_list.c +++ b/src/graph_list.c @@ -38,6 +38,7 @@ #include "graph_list.h" #include "common.h" +#include "data_provider.h" #include "filesystem.h" #include "graph.h" #include "graph_config.h" @@ -54,7 +55,6 @@ * Defines */ #define UPDATE_INTERVAL 900 -#define CACHE_FILE "/tmp/collection4.json" /* * Global variables @@ -75,9 +75,6 @@ static size_t host_list_len = 0; static time_t gl_last_update = 0; -/* TODO: Turn this into an array for multiple data providers. */ -static data_provider_t *data_provider = NULL; - /* * Private functions */ @@ -212,7 +209,7 @@ static int gl_register_file (const graph_ident_t *file, /* {{{ */ return (0); } /* }}} int gl_register_file */ -static int gl_register_ident (const graph_ident_t *ident, /* {{{ */ +static int gl_register_ident (graph_ident_t *ident, /* {{{ */ __attribute__((unused)) void *user_data) { /* TODO: Check for duplicates if multiple data providers are used. */ @@ -271,13 +268,14 @@ static int gl_update_cache (void) /* {{{ */ int fd; yajl_gen handler; yajl_gen_config handler_config = { /* pretty = */ 1, /* indent = */ " " }; + const char *cache_file = graph_config_get_cachefile (); struct flock lock; struct stat statbuf; int status; size_t i; memset (&statbuf, 0, sizeof (statbuf)); - status = stat (CACHE_FILE, &statbuf); + status = stat (cache_file, &statbuf); if (status == 0) { if (statbuf.st_mtime >= gl_last_update) @@ -292,7 +290,7 @@ static int gl_update_cache (void) /* {{{ */ /* Continue writing the file if possible. */ } - fd = open (CACHE_FILE, O_WRONLY | O_TRUNC | O_CREAT, + fd = open (cache_file, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH); if (fd < 0) { @@ -622,7 +620,7 @@ static int gl_read_cache (_Bool block) /* {{{ */ int status; time_t now; - fd = open (CACHE_FILE, O_RDONLY); + fd = open (graph_config_get_cachefile (), O_RDONLY); if (fd < 0) { fprintf (stderr, "gl_read_cache: open(2) failed with status %i\n", errno); @@ -783,21 +781,6 @@ int gl_config_submit (void) /* {{{ */ return (0); } /* }}} int graph_config_submit */ -int gl_register_data_provider (const char *name, data_provider_t *p) /* {{{ */ -{ - fprintf (stderr, "gl_register_data_provider (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 gl_register_data_provider */ - int gl_graph_get_all (_Bool include_dynamic, /* {{{ */ graph_callback_t callback, void *user_data) { @@ -1105,20 +1088,12 @@ int gl_update (_Bool request_served) /* {{{ */ if ((status != 0) || ((gl_last_update + UPDATE_INTERVAL) < now)) { - if (data_provider == NULL) - { - fprintf (stderr, "No data provider has been registered\n"); - return (ENOENT); - } - /* Clear state */ gl_clear_instances (); gl_clear_hosts (); gl_destroy (&gl_dynamic, &gl_dynamic_num); - /* TODO: Iterate over all data providers */ - data_provider->get_idents (data_provider->private_data, - gl_register_ident, /* user data = */ NULL); + data_provider_get_idents (gl_register_ident, /* user data = */ NULL); gl_last_update = now; }