X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fgraph_list.c;h=ecd873bae4824e90258821865e7ff12e3dc0c9e6;hb=a4a5b5e992da52779d9e1c8870f0c7df6b199d56;hp=ed8d41a78cf2f1cce4bf73ed9de7c21902c1a880;hpb=60f9e98201a0a261f2a8c002e928b863d1fe611a;p=collection4.git diff --git a/src/graph_list.c b/src/graph_list.c index ed8d41a..ecd873b 100644 --- a/src/graph_list.c +++ b/src/graph_list.c @@ -75,6 +75,9 @@ 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 */ @@ -209,6 +212,14 @@ 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, /* {{{ */ + __attribute__((unused)) void *user_data) +{ + /* TODO: Check for duplicates if multiple data providers are used. */ + + return (gl_register_file (ident, user_data)); +} /* }}} int gl_register_ident */ + static const char *get_part_from_param (const char *prim_key, /* {{{ */ const char *sec_key) { @@ -270,11 +281,8 @@ static int gl_update_cache (void) /* {{{ */ if (status == 0) { if (statbuf.st_mtime >= gl_last_update) - { - fprintf (stderr, "gl_update_cache: Not writing to cache because it's " - "at least as new as our internal data\n"); + /* Not writing to cache because it's at least as new as our internal data */ return (0); - } } else { @@ -344,11 +352,6 @@ static int gl_update_cache (void) /* {{{ */ return (0); } /* }}} int gl_update_cache */ -static int gl_scan_directory (void) -{ - return (-1); -} /* }}} int gl_scan_directory */ - /* * JSON parsing functions */ @@ -780,16 +783,20 @@ int gl_config_submit (void) /* {{{ */ return (0); } /* }}} int graph_config_submit */ -int gl_register_ident (const char *provider, const graph_ident_t *ident) +int gl_register_data_provider (const char *name, data_provider_t *p) /* {{{ */ { - char *ident_str = ident_to_string (ident); + 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); - fprintf (stderr, "gl_register_ident (provider = %s, ident = %s)\n", - provider, ident_str); + *data_provider = *p; - free (ident_str); return (0); -} /* }}} int gl_register_ident */ +} /* }}} int gl_register_data_provider */ int gl_graph_get_all (_Bool include_dynamic, /* {{{ */ graph_callback_t callback, void *user_data) @@ -1098,13 +1105,21 @@ 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); - status = fs_scan (/* callback = */ gl_register_file, - /* user data = */ NULL); + /* TODO: Iterate over all data providers */ + data_provider->get_idents (data_provider->private_data, + gl_register_ident, /* user data = */ NULL); + gl_last_update = now; }