summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 845886a)
raw | patch | inline | side by side (parent: 845886a)
author | Florian Forster <octo@huhu.verplant.org> | |
Fri, 21 Nov 2008 21:06:23 +0000 (22:06 +0100) | ||
committer | Florian Forster <octo@huhu.verplant.org> | |
Fri, 21 Nov 2008 21:06:23 +0000 (22:06 +0100) |
This function does none of the magic `plugin_dispatch_value' does. It simiply
takes a value and passes it to the requested plugin.
This function is intended to be used with the upcoming `filter chain' code,
which will allow to pass values to specific plugins only.
takes a value and passes it to the requested plugin.
This function is intended to be used with the upcoming `filter chain' code,
which will allow to pass values to specific plugins only.
src/plugin.c | patch | blob | history | |
src/plugin.h | patch | blob | history |
diff --git a/src/plugin.c b/src/plugin.c
index 4d503f7c457196493cdb1ce5c9e852d9f44cc8a5..b00433623f9cd40c3fb66346abe794e64915714c 100644 (file)
--- a/src/plugin.c
+++ b/src/plugin.c
pthread_mutex_unlock (&read_lock);
} /* void plugin_read_all */
+int plugin_write (const char *plugin, /* {{{ */
+ const data_set_t *ds, const value_list_t *vl)
+{
+ int (*callback) (const data_set_t *ds, const value_list_t *vl);
+ llentry_t *le;
+ int status;
+
+ if (vl == NULL)
+ return (EINVAL);
+
+ if (list_write == NULL)
+ return (ENOENT);
+
+ if (ds == NULL)
+ {
+ ds = plugin_get_ds (vl->type);
+ if (ds == NULL)
+ {
+ ERROR ("plugin_write: Unable to lookup type `%s'.", vl->type);
+ return (ENOENT);
+ }
+ }
+
+ if (plugin == NULL)
+ {
+ int success = 0;
+ int failure = 0;
+
+ le = llist_head (list_flush);
+ while (le != NULL)
+ {
+ callback = le->value;
+ status = (*callback) (ds, vl);
+ if (status != 0)
+ failure++;
+ else
+ success++;
+
+ le = le->next;
+ }
+
+ if ((success == 0) && (failure != 0))
+ status = -1;
+ else
+ status = 0;
+ }
+ else /* plugin != NULL */
+ {
+ le = llist_head (list_flush);
+ while (le != NULL)
+ {
+ if (strcasecmp (plugin, le->key) == 0)
+ break;
+
+ le = le->next;
+ }
+
+ if (le == NULL)
+ return (ENOENT);
+
+ callback = le->value;
+ status = (*callback) (ds, vl);
+ }
+
+ return (status);
+} /* }}} int plugin_write */
+
int plugin_flush (const char *plugin, int timeout, const char *identifier)
{
int (*callback) (int timeout, const char *identifier);
diff --git a/src/plugin.h b/src/plugin.h
index b90811cf93cc5c98e99fc090e588a28bce18dc63..91a61b2ecb2516de31f5f329114ed4b9c2ef05f7 100644 (file)
--- a/src/plugin.h
+++ b/src/plugin.h
void plugin_read_all (void);
void plugin_shutdown_all (void);
+/*
+ * NAME
+ * plugin_write
+ *
+ * DESCRIPTION
+ * Calls the write function of the given plugin with the provided data set and
+ * value list. It differs from `plugin_dispatch_value' in that it does not
+ * update the cache, does no do threshold checking, call the chain subsystem
+ * and so on. It looks up the requested plugin and invokes the function, end
+ * of story.
+ *
+ * ARGUMENTS
+ * plugin Name of the plugin. If NULL, the value is sent to all registered
+ * write functions.
+ * ds Pointer to the data_set_t structure. If NULL, the data set is
+ * looked up according to the `type' member in the `vl' argument.
+ * vl The actual value to be processes. Must not be NULL.
+ *
+ * RETURN VALUE
+ * Returns zero upon success or non-zero if an error occurred. If `plugin' is
+ * NULL and more than one plugin is called, an error is only returned if *all*
+ * plugins fail.
+ *
+ * NOTES
+ * This is the function used by the `write' built-in target. May be used by
+ * other target plugins.
+ */
+int plugin_write (const char *plugin,
+ const data_set_t *ds, const value_list_t *vl);
+
int plugin_flush (const char *plugin, int timeout, const char *identifier);
/*