summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 16078f6)
raw | patch | inline | side by side (parent: 16078f6)
author | Florian Forster <ff@octo.it> | |
Wed, 23 Jun 2010 13:16:25 +0000 (15:16 +0200) | ||
committer | Florian Forster <octo@leeloo.lan.home.verplant.org> | |
Wed, 23 Jun 2010 13:16:25 +0000 (15:16 +0200) |
src/graph_list.c | patch | blob | history | |
src/graph_list.h | patch | blob | history |
diff --git a/src/graph_list.c b/src/graph_list.c
index 4e43a6758334464042bd44f46dd840eab28d0d37..7164c74e01762b97c2ea3f9e11c7480d20165e53 100644 (file)
--- a/src/graph_list.c
+++ b/src/graph_list.c
#include <errno.h>
#include "graph_list.h"
-#include "graph.h"
-#include "graph_ident.h"
-#include "graph_def.h"
-#include "graph_config.h"
#include "common.h"
#include "filesystem.h"
+#include "graph.h"
+#include "graph_config.h"
+#include "graph_def.h"
+#include "graph_ident.h"
#include "utils_cgi.h"
#include <fcgiapp.h>
static graph_config_t **gl_staging = NULL;
static size_t gl_staging_num = 0;
+static char **host_list = NULL;
+static size_t host_list_len = 0;
+
static time_t gl_last_update = 0;
/*
return (0);
} /* }}} int gl_add_graph_internal */
+static int gl_register_host (const char *host) /* {{{ */
+{
+ char **tmp;
+ size_t i;
+
+ if (host == NULL)
+ return (EINVAL);
+
+ for (i = 0; i < host_list_len; i++)
+ if (strcmp (host_list[i], host) == 0)
+ return (0);
+
+ tmp = realloc (host_list, sizeof (*host_list) * (host_list_len + 1));
+ if (tmp == NULL)
+ return (ENOMEM);
+ host_list = tmp;
+
+ host_list[host_list_len] = strdup (host);
+ if (host_list[host_list_len] == NULL)
+ return (ENOMEM);
+
+ host_list_len++;
+ return (0);
+} /* }}} int gl_register_host */
+
+static int gl_clear_hosts (void) /* {{{ */
+{
+ size_t i;
+
+ for (i = 0; i < host_list_len; i++)
+ free (host_list[i]);
+ free (host_list);
+
+ host_list = NULL;
+ host_list_len = 0;
+
+ return (0);
+} /* }}} int gl_clear_hosts */
+
+static int gl_compare_hosts (const void *v0, const void *v1) /* {{{ */
+{
+ return (strcmp (v0, v1));
+} /* }}} int gl_compare_hosts */
+
static int gl_register_file (const graph_ident_t *file, /* {{{ */
__attribute__((unused)) void *user_data)
{
graph_add_file (cfg, file);
}
+ gl_register_host (ident_get_host (file));
+
return (0);
} /* }}} int gl_register_file */
return (0);
} /* }}} int gl_search_field */
+int gl_foreach_host (int (*callback) (const char *host, void *user_data), /* {{{ */
+ void *user_data)
+{
+ int status;
+ size_t i;
+
+ for (i = 0; i < host_list_len; i++)
+ {
+ status = (*callback) (host_list[i], user_data);
+ if (status != 0)
+ return (status);
+ }
+
+ return (0);
+} /* }}} int gl_foreach_host */
+
int gl_update (void) /* {{{ */
{
time_t now;
graph_read_config ();
gl_clear_instances ();
+ gl_clear_hosts ();
status = fs_scan (/* callback = */ gl_register_file, /* user data = */ NULL);
+ if (host_list_len > 0)
+ qsort (host_list, host_list_len, sizeof (*host_list),
+ gl_compare_hosts);
+
gl_last_update = now;
return (status);
diff --git a/src/graph_list.h b/src/graph_list.h
index 5d0c917bdc9714ed3efc3aeff19a8e279b3a81d3..a7ca00344536a26a3390c84b166678655bbbc2b8 100644 (file)
--- a/src/graph_list.h
+++ b/src/graph_list.h
int gl_search_field (graph_ident_field_t field, const char *field_value,
graph_inst_callback_t callback, void *user_data);
+int gl_foreach_host (int (*callback) (const char *host, void *user_data),
+ void *user_data);
+
int gl_update (void);
#endif /* GRAPH_LIST_H */