author | Florian Forster <octo@collectd.org> | |
Fri, 2 Sep 2011 01:34:00 +0000 (21:34 -0400) | ||
committer | Florian Forster <octo@collectd.org> | |
Fri, 2 Sep 2011 01:34:00 +0000 (21:34 -0400) |
contrib/collectd_unixsock.py | patch | blob | history | |
src/curl_json.c | patch | blob | history | |
src/exec.c | patch | blob | history | |
src/irq.c | patch | blob | history | |
src/plugin.c | patch | blob | history | |
src/processes.c | patch | blob | history | |
src/utils_rrdcreate.c | patch | blob | history | |
src/varnish.c | patch | blob | history |
index ebe040d6a11846ab77fe446112668e29354f904f..1b8e6b174ed8d8ad1a7abc1237842e03d5908075 100644 (file)
"""
numvalues = self._cmd('GETTHRESHOLD "%s"' % identifier)
lines = []
- if numvalues:
- lines = self._readlines(numvalues)
+ if not numvalues or numvalues < 0:
+ raise KeyError("Identifier '%s' not found" % identifier)
+ lines = self._readlines(numvalues)
return lines
def getval(self, identifier, flush_after=True):
"""
numvalues = self._cmd('GETVAL "%s"' % identifier)
lines = []
- if numvalues:
- lines = self._readlines(numvalues)
+ if not numvalues or numvalues < 0:
+ raise KeyError("Identifier '%s' not found" % identifier)
+ lines = self._readlines(numvalues)
if flush_after:
self.flush(identifiers=[identifier])
return lines
diff --git a/src/curl_json.c b/src/curl_json.c
index 988ed58df3442459d23ef25b20894df6f82ae21e..857e276bb585e16a9f872d4863f43e86c20d1e2d 100644 (file)
--- a/src/curl_json.c
+++ b/src/curl_json.c
return (-1);
}
- status = yajl_parse_complete (db->yajl);
+#if HAVE_YAJL_V2
+ status = yajl_complete_parse(db->yajl);
+#else
+ status = yajl_parse_complete(db->yajl);
+#endif
if (status != yajl_status_ok)
{
unsigned char *errmsg;
diff --git a/src/exec.c b/src/exec.c
index 0d33b290cce6afa2293a247ea7cf3342cc4833e6..4f6f9dfb9871000a0e4e7084fb451204f9857c8a 100644 (file)
--- a/src/exec.c
+++ b/src/exec.c
fprintf (fh,
"Severity: %s\n"
- "Time: %u\n",
- severity, (unsigned int) n->time);
+ "Time: %.3f\n",
+ severity, CDTIME_T_TO_DOUBLE (n->time));
/* Print the optional fields */
if (strlen (n->host) > 0)
diff --git a/src/irq.c b/src/irq.c
index 94e425371dfed11dc68a8fdd27dc912d6187d12a..7e738291c58af7c851907f477e7386fc5e3fd561 100644 (file)
--- a/src/irq.c
+++ b/src/irq.c
# error "No applicable input method."
#endif
-#define BUFSIZE 128
-
/*
* (Module-)Global variables
*/
};
static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
-static unsigned int *irq_list;
-static unsigned int irq_list_num;
+static char **irq_list;
+static unsigned int irq_list_num = 0;
/*
* irq_list_action:
{
if (strcasecmp (key, "Irq") == 0)
{
- unsigned int *temp;
- unsigned int irq;
- char *endptr;
+ char **temp;
- temp = (unsigned int *) realloc (irq_list, (irq_list_num + 1) * sizeof (unsigned int *));
+ temp = realloc (irq_list, (irq_list_num + 1) * sizeof (*irq_list));
if (temp == NULL)
{
fprintf (stderr, "irq plugin: Cannot allocate more memory.\n");
}
irq_list = temp;
- /* Clear errno, because we need it to see if an error occured. */
- errno = 0;
-
- irq = strtol(value, &endptr, 10);
- if ((endptr == value) || (errno != 0))
+ irq_list[irq_list_num] = strdup (value);
+ if (irq_list[irq_list_num] == NULL)
{
- fprintf (stderr, "irq plugin: Irq value is not a "
- "number: `%s'\n", value);
- ERROR ("irq plugin: Irq value is not a "
- "number: `%s'", value);
+ ERROR ("irq plugin: strdup(3) failed.");
return (1);
}
- irq_list[irq_list_num] = irq;
+
irq_list_num++;
}
else if (strcasecmp (key, "IgnoreSelected") == 0)
* both, `submit' and `write' to give client and server the ability to
* ignore certain stuff..
*/
-static int check_ignore_irq (const unsigned int irq)
+static int check_ignore_irq (const char *irq)
{
- int i;
+ unsigned int i;
if (irq_list_num < 1)
return (0);
- for (i = 0; (unsigned int)i < irq_list_num; i++)
- if (irq == irq_list[i])
+ for (i = 0; i < irq_list_num; i++)
+ if (strcmp (irq, irq_list[i]) == 0)
return (irq_list_action);
return (1 - irq_list_action);
}
-static void irq_submit (unsigned int irq, derive_t value)
+static void irq_submit (const char *irq_name, derive_t value)
{
value_t values[1];
value_list_t vl = VALUE_LIST_INIT;
- int status;
- if (check_ignore_irq (irq))
+ if (check_ignore_irq (irq_name))
return;
values[0].derive = value;
sstrncpy (vl.host, hostname_g, sizeof (vl.host));
sstrncpy (vl.plugin, "irq", sizeof (vl.plugin));
sstrncpy (vl.type, "irq", sizeof (vl.type));
-
- status = ssnprintf (vl.type_instance, sizeof (vl.type_instance),
- "%u", irq);
- if ((status < 1) || ((unsigned int)status >= sizeof (vl.type_instance)))
- return;
+ sstrncpy (vl.type_instance, irq_name, sizeof (vl.type_instance));
plugin_dispatch_values (&vl);
} /* void irq_submit */
return (-1);
}
- while (fgets (buffer, BUFSIZE, fh) != NULL)
+ while (fgets (buffer, sizeof (buffer), fh) != NULL)
{
- unsigned int irq;
+ char *irq_name;
+ size_t irq_name_len;
derive_t irq_value;
- char *endptr;
int i;
char *fields[64];
if (fields_num < 2)
continue;
- errno = 0; /* To distinguish success/failure after call */
- irq = (unsigned int) strtoul (fields[0], &endptr, /* base = */ 10);
+ irq_name = fields[0];
+ irq_name_len = strlen (irq_name);
+ if (irq_name_len < 2)
+ continue;
- if ((endptr == fields[0]) || (errno != 0) || (*endptr != ':'))
+ /* Check if irq name ends with colon.
+ * Otherwise it's a header. */
+ if (irq_name[irq_name_len - 1] != ':')
continue;
+ irq_name[irq_name_len - 1] = 0;
+ irq_name_len--;
+
irq_value = 0;
for (i = 1; i < fields_num; i++)
{
irq_value += v.derive;
} /* for (i) */
- if (i < fields_num)
+ /* No valid fields -> do not submit anything. */
+ if (i <= 1)
continue;
- irq_submit (irq, irq_value);
+ irq_submit (irq_name, irq_value);
}
fclose (fh);
config_keys, config_keys_num);
plugin_register_read ("irq", irq_read);
} /* void module_register */
-
-#undef BUFSIZE
diff --git a/src/plugin.c b/src/plugin.c
index 89a2e003b65c32af000bdfe9a3101f69caa7c05f..a749d1e07b18502127406469471cd728fe9121bd 100644 (file)
--- a/src/plugin.c
+++ b/src/plugin.c
if ((vl == NULL) || (vl->type[0] == 0)
|| (vl->values == NULL) || (vl->values_len < 1))
{
- ERROR ("plugin_dispatch_values: Invalid value list.");
+ ERROR ("plugin_dispatch_values: Invalid value list "
+ "from plugin %s.", vl->plugin);
return (-1);
}
diff --git a/src/processes.c b/src/processes.c
index 0c24cb70bb5a83f72543c949a0f37e021cf5280c..8f4eb88fc168f3c1b36835c5ed294c95dd31ed08 100644 (file)
--- a/src/processes.c
+++ b/src/processes.c
# define ARG_MAX 4096
#endif
-static const char *config_keys[] =
-{
- "Process",
- "ProcessMatch"
-};
-static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
-
typedef struct procstat_entry_s
{
unsigned long id;
}
/* put all pre-defined 'Process' names from config to list_head_g tree */
-static int ps_config (const char *key, const char *value)
+static int ps_config (oconfig_item_t *ci)
{
- if (strcasecmp (key, "Process") == 0)
- {
- ps_list_register (value, NULL);
- }
- else if (strcasecmp (key, "ProcessMatch") == 0)
- {
- char *new_val;
- char *fields[3];
- int fields_num;
-
- new_val = strdup (value);
- if (new_val == NULL) {
- ERROR ("processes plugin: strdup failed when processing "
- "`ProcessMatch %s'.", value);
- return (1);
+ int i;
+
+ for (i = 0; i < ci->children_num; ++i) {
+ oconfig_item_t *c = ci->children + i;
+
+ if (strcasecmp (c->key, "Process") == 0)
+ {
+ if ((c->values_num != 1)
+ || (OCONFIG_TYPE_STRING != c->values[0].type)) {
+ ERROR ("processes plugin: `Process' expects exactly "
+ "one string argument (got %i).",
+ c->values_num);
+ continue;
+ }
+
+ if (c->children_num != 0) {
+ WARNING ("processes plugin: the `Process' config option "
+ "does not expect any child elements -- ignoring "
+ "content (%i elements) of the <Process '%s'> block.",
+ c->children_num, c->values[0].value.string);
+ }
+
+ ps_list_register (c->values[0].value.string, NULL);
}
+ else if (strcasecmp (c->key, "ProcessMatch") == 0)
+ {
+ if ((c->values_num != 2)
+ || (OCONFIG_TYPE_STRING != c->values[0].type)
+ || (OCONFIG_TYPE_STRING != c->values[1].type))
+ {
+ ERROR ("processes plugin: `ProcessMatch' needs exactly "
+ "two string arguments (got %i).",
+ c->values_num);
+ continue;
+ }
- fields_num = strsplit (new_val, fields,
- STATIC_ARRAY_SIZE (fields));
- if (fields_num != 2)
+ if (c->children_num != 0) {
+ WARNING ("processes plugin: the `ProcessMatch' config option "
+ "does not expect any child elements -- ignoring "
+ "content (%i elements) of the <ProcessMatch '%s' '%s'> "
+ "block.", c->children_num, c->values[0].value.string,
+ c->values[1].value.string);
+ }
+
+ ps_list_register (c->values[0].value.string,
+ c->values[1].value.string);
+ }
+ else
{
- ERROR ("processes plugin: `ProcessMatch' needs exactly "
- "two string arguments.");
- sfree (new_val);
- return (1);
+ ERROR ("processes plugin: The `%s' configuration option is not "
+ "understood and will be ignored.", c->key);
+ continue;
}
- ps_list_register (fields[0], fields[1]);
- sfree (new_val);
- }
- else
- {
- ERROR ("processes plugin: The `%s' configuration option is not "
- "understood and will be ignored.", key);
- return (-1);
}
return (0);
void module_register (void)
{
- plugin_register_config ("processes", ps_config,
- config_keys, config_keys_num);
+ plugin_register_complex_config ("processes", ps_config);
plugin_register_init ("processes", ps_init);
plugin_register_read ("processes", ps_read);
} /* void module_register */
diff --git a/src/utils_rrdcreate.c b/src/utils_rrdcreate.c
index d9cbad7326b24f2e32cd9dfe122651dbd479a5e2..91ac6ce548e878b4078e17d89cc7ce609995ee51 100644 (file)
--- a/src/utils_rrdcreate.c
+++ b/src/utils_rrdcreate.c
if (rra_num >= rra_max)
break;
- status = ssnprintf (buffer, sizeof (buffer), "RRA:%s:%3.1f:%u:%u",
+ status = ssnprintf (buffer, sizeof (buffer), "RRA:%s:%.10f:%u:%u",
rra_types[j], cfg->xff, cdp_len, cdp_num);
if ((status < 0) || ((size_t) status >= sizeof (buffer)))
diff --git a/src/varnish.c b/src/varnish.c
index 859df21766a18cdc0e2497e24b4bd9929a20eed0..37fd4bb3541f2181bd81dd1b379214bc9a6d4f03 100644 (file)
--- a/src/varnish.c
+++ b/src/varnish.c
@@ -307,9 +307,9 @@ static void varnish_monitor (const user_config_t *conf, struct varnish_stats *VS
/* outstanding allocations */
varnish_submit_gauge (conf->instance, "sm", "requests", "outstanding", VSL_stats->sm_nobj);
/* bytes allocated */
- varnish_submit_gauge (conf->instance, "sm", "total_bytes", "allocated", VSL_stats->sm_balloc);
+ varnish_submit_derive (conf->instance, "sm", "total_bytes", "allocated", VSL_stats->sm_balloc);
/* bytes free */
- varnish_submit_gauge (conf->instance, "sm", "total_bytes", "free", VSL_stats->sm_bfree);
+ varnish_submit_derive (conf->instance, "sm", "total_bytes", "free", VSL_stats->sm_bfree);
}
if (conf->collect_sma)
@@ -321,9 +321,9 @@ static void varnish_monitor (const user_config_t *conf, struct varnish_stats *VS
/* SMA outstanding bytes */
varnish_submit_gauge (conf->instance, "sma", "bytes", "outstanding", VSL_stats->sma_nbytes);
/* SMA bytes allocated */
- varnish_submit_gauge (conf->instance, "sma", "total_bytes", "allocated", VSL_stats->sma_balloc);
+ varnish_submit_derive (conf->instance, "sma", "total_bytes", "allocated", VSL_stats->sma_balloc);
/* SMA bytes free */
- varnish_submit_gauge (conf->instance, "sma", "total_bytes", "free" , VSL_stats->sma_bfree);
+ varnish_submit_derive (conf->instance, "sma", "total_bytes", "free" , VSL_stats->sma_bfree);
}
if (conf->collect_sms)
@@ -335,9 +335,9 @@ static void varnish_monitor (const user_config_t *conf, struct varnish_stats *VS
/* SMS outstanding bytes */
varnish_submit_gauge (conf->instance, "sms", "bytes", "outstanding", VSL_stats->sms_nbytes);
/* SMS bytes allocated */
- varnish_submit_gauge (conf->instance, "sms", "total_bytes", "allocated", VSL_stats->sms_balloc);
+ varnish_submit_derive (conf->instance, "sms", "total_bytes", "allocated", VSL_stats->sms_balloc);
/* SMS bytes freed */
- varnish_submit_gauge (conf->instance, "sms", "total_bytes", "free", VSL_stats->sms_bfree);
+ varnish_submit_derive (conf->instance, "sms", "total_bytes", "free", VSL_stats->sms_bfree);
}
if (conf->collect_totals)
@@ -363,17 +363,17 @@ static void varnish_monitor (const user_config_t *conf, struct varnish_stats *VS
/* worker threads */
varnish_submit_gauge (conf->instance, "workers", "threads", "worker", VSL_stats->n_wrk);
/* worker threads created */
- varnish_submit_gauge (conf->instance, "workers", "total_threads", "created", VSL_stats->n_wrk_create);
+ varnish_submit_derive (conf->instance, "workers", "total_threads", "created", VSL_stats->n_wrk_create);
/* worker threads not created */
- varnish_submit_gauge (conf->instance, "workers", "total_threads", "failed", VSL_stats->n_wrk_failed);
+ varnish_submit_derive (conf->instance, "workers", "total_threads", "failed", VSL_stats->n_wrk_failed);
/* worker threads limited */
- varnish_submit_gauge (conf->instance, "workers", "total_threads", "limited", VSL_stats->n_wrk_max);
+ varnish_submit_derive (conf->instance, "workers", "total_threads", "limited", VSL_stats->n_wrk_max);
/* queued work requests */
- varnish_submit_gauge (conf->instance, "workers", "total_requests", "queued", VSL_stats->n_wrk_queue);
+ varnish_submit_derive (conf->instance, "workers", "total_requests", "queued", VSL_stats->n_wrk_queue);
/* overflowed work requests */
- varnish_submit_gauge (conf->instance, "workers", "total_requests", "overflowed", VSL_stats->n_wrk_overflow);
+ varnish_submit_derive (conf->instance, "workers", "total_requests", "overflowed", VSL_stats->n_wrk_overflow);
/* dropped work requests */
- varnish_submit_gauge (conf->instance, "workers", "total_requests", "dropped", VSL_stats->n_wrk_drop);
+ varnish_submit_derive (conf->instance, "workers", "total_requests", "dropped", VSL_stats->n_wrk_drop);
}
} /* }}} void varnish_monitor */