This output plugin submits values to an HTTP server using POST requests and
encoding metrics with JSON or using the C<PUTVAL> command described in
-L<collectd-unixsock(5)>. Each destination you want to post data to needs to
-have one B<URL> block, within which the destination can be configured further,
-for example by specifying authentication data.
+L<collectd-unixsock(5)>.
Synopsis:
<Plugin "write_http">
- <URL "http://example.com/post-collectd">
+ <Node "example">
+ URL "http://example.com/post-collectd"
User "collectd"
Password "weCh3ik0"
Format JSON
- </URL>
+ </Node>
</Plugin>
-B<URL> blocks need one string argument which is used as the URL to which data
-is posted. The following options are understood within B<URL> blocks.
+The plugin can send values to multiple HTTP servers by specifying one
+E<lt>B<Node>E<nbsp>I<Name>E<gt> block for each server. Within each B<Node>
+block, the following options are available:
=over 4
+=item B<URL> I<URL>
+
+URL to which the values are submitted to. Mandatory.
+
=item B<User> I<Username>
Optional user name needed for authentication.
*/
struct wh_callback_s
{
- char *location;
+ char *name;
+ char *location;
char *user;
char *pass;
char *credentials;
curl_easy_cleanup (cb->curl);
cb->curl = NULL;
}
+ sfree (cb->name);
sfree (cb->location);
sfree (cb->user);
sfree (cb->pass);
return (0);
} /* }}} int config_set_format */
-static int wh_config_url (oconfig_item_t *ci) /* {{{ */
+static int wh_config_node (oconfig_item_t *ci) /* {{{ */
{
wh_callback_t *cb;
int buffer_size = 0;
pthread_mutex_init (&cb->send_lock, /* attr = */ NULL);
- cf_util_get_string (ci, &cb->location);
- if (cb->location == NULL)
- return (-1);
+ cf_util_get_string (ci, &cb->name);
+
+ /* FIXME: Remove this legacy mode in version 6. */
+ if (strcasecmp ("URL", ci->key) == 0)
+ cf_util_get_string (ci, &cb->location);
for (i = 0; i < ci->children_num; i++)
{
oconfig_item_t *child = ci->children + i;
- if (strcasecmp ("User", child->key) == 0)
+ if (strcasecmp ("URL", child->key) == 0)
+ cf_util_get_string (child, &cb->location);
+ else if (strcasecmp ("User", child->key) == 0)
cf_util_get_string (child, &cb->user);
else if (strcasecmp ("Password", child->key) == 0)
cf_util_get_string (child, &cb->pass);
}
}
+ if (cb->location == NULL)
+ {
+ ERROR ("write_http plugin: no URL defined for instance '%s'",
+ cb->name);
+ wh_callback_free (cb);
+ return (-1);
+ }
+
/* Determine send_buffer_size. */
cb->send_buffer_size = WRITE_HTTP_DEFAULT_BUFFER_SIZE;
if (buffer_size >= 1024)
wh_reset_buffer (cb);
ssnprintf (callback_name, sizeof (callback_name), "write_http/%s",
- cb->location);
+ cb->name);
DEBUG ("write_http: Registering write callback '%s' with URL '%s'",
callback_name, cb->location);
plugin_register_write (callback_name, wh_write, &user_data);
return (0);
-} /* }}} int wh_config_url */
+} /* }}} int wh_config_node */
static int wh_config (oconfig_item_t *ci) /* {{{ */
{
{
oconfig_item_t *child = ci->children + i;
- if (strcasecmp ("URL", child->key) == 0)
- wh_config_url (child);
+ if (strcasecmp ("Node", child->key) == 0)
+ wh_config_node (child);
+ /* FIXME: Remove this legacy mode in version 6. */
+ else if (strcasecmp ("URL", child->key) == 0) {
+ WARNING ("write_http plugin: Legacy <URL> block found. "
+ "Please use <Node> instead.");
+ wh_config_node (child);
+ }
else
{
ERROR ("write_http plugin: Invalid configuration "