summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: e451755)
raw | patch | inline | side by side (parent: e451755)
author | Sebastian Harl <sh@tokkee.org> | |
Fri, 17 Jun 2011 08:20:17 +0000 (10:20 +0200) | ||
committer | Sebastian Harl <sh@tokkee.org> | |
Fri, 17 Jun 2011 08:20:17 +0000 (10:20 +0200) |
This allows to handle all of the configuration in one go and execute some
action once after doing so.
action once after doing so.
src/rrdcached.c | patch | blob | history |
diff --git a/src/rrdcached.c b/src/rrdcached.c
index 3099421384c25be3684da8ae3f222782443fe589..a392715616ff7fb501cc8294db0461a9412bb62a 100644 (file)
--- a/src/rrdcached.c
+++ b/src/rrdcached.c
/*
* Private variables
*/
-static const char *config_keys[] =
-{
- "DaemonAddress",
- "DataDir",
- "CreateFiles",
- "CollectStatistics"
-};
-static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
-
static char *datadir = NULL;
static char *daemon_address = NULL;
static int config_create_files = 1;
return (0);
} /* int value_list_to_filename */
-static int rc_config (const char *key, const char *value)
+static const char *config_get_string (oconfig_item_t *ci)
{
- if (strcasecmp ("DataDir", key) == 0)
+ if ((ci->children_num != 0) || (ci->values_num != 1)
+ || (ci->values[0].type != OCONFIG_TYPE_STRING))
{
- if (datadir != NULL)
- free (datadir);
- datadir = strdup (value);
- if (datadir != NULL)
+ ERROR ("rrdcached plugin: %s expects a single string argument.",
+ ci->key);
+ return (NULL);
+ }
+
+ return (ci->values[0].value.string);
+} /* const char *config_get_string */
+
+static int rc_config (oconfig_item_t *ci)
+{
+ int i;
+
+ for (i = 0; i < ci->children_num; ++i) {
+ const char *key = ci->children[i].key;
+ const char *value = config_get_string (ci->children + i);
+
+ if (value == NULL) /* config_get_strings prints error message */
+ continue;
+
+ if (strcasecmp ("DataDir", key) == 0)
{
- int len = strlen (datadir);
- while ((len > 0) && (datadir[len - 1] == '/'))
+ if (datadir != NULL)
+ free (datadir);
+ datadir = strdup (value);
+ if (datadir != NULL)
{
- len--;
- datadir[len] = '\0';
+ int len = strlen (datadir);
+ while ((len > 0) && (datadir[len - 1] == '/'))
+ {
+ len--;
+ datadir[len] = '\0';
+ }
+ if (len <= 0)
+ {
+ free (datadir);
+ datadir = NULL;
+ }
}
- if (len <= 0)
+ }
+ else if (strcasecmp ("DaemonAddress", key) == 0)
+ {
+ sfree (daemon_address);
+ daemon_address = strdup (value);
+ if (daemon_address == NULL)
{
- free (datadir);
- datadir = NULL;
+ ERROR ("rrdcached plugin: strdup failed.");
+ continue;
}
}
- }
- else if (strcasecmp ("DaemonAddress", key) == 0)
- {
- sfree (daemon_address);
- daemon_address = strdup (value);
- if (daemon_address == NULL)
+ else if (strcasecmp ("CreateFiles", key) == 0)
{
- ERROR ("rrdcached plugin: strdup failed.");
- return (1);
+ if (IS_FALSE (value))
+ config_create_files = 0;
+ else
+ config_create_files = 1;
+ }
+ else if (strcasecmp ("CollectStatistics", key) == 0)
+ {
+ if (IS_FALSE (value))
+ config_collect_stats = 0;
+ else
+ config_collect_stats = 1;
}
- }
- else if (strcasecmp ("CreateFiles", key) == 0)
- {
- if (IS_FALSE (value))
- config_create_files = 0;
- else
- config_create_files = 1;
- }
- else if (strcasecmp ("CollectStatistics", key) == 0)
- {
- if (IS_FALSE (value))
- config_collect_stats = 0;
else
- config_collect_stats = 1;
- }
- else
- {
- return (-1);
+ {
+ WARNING ("rrdcached plugin: Ignoring invalid option %s.", key);
+ continue;
+ }
}
return (0);
} /* int rc_config */
void module_register (void)
{
- plugin_register_config ("rrdcached", rc_config,
- config_keys, config_keys_num);
+ plugin_register_complex_config ("rrdcached", rc_config);
plugin_register_init ("rrdcached", rc_init);
plugin_register_write ("rrdcached", rc_write, /* user_data = */ NULL);
plugin_register_flush ("rrdcached", rc_flush, /* user_data = */ NULL);