/**
* collectd - src/apache.c
- * Copyright (C) 2006,2007 Florian octo Forster
+ * Copyright (C) 2006-2008 Florian octo Forster
* Copyright (C) 2007 Florent EppO Monbillard
*
* This program is free software; you can redistribute it and/or modify it
"URL",
"User",
"Password",
- "CACert",
- NULL
+ "CACert"
};
-static int config_keys_num = 4;
+static int config_keys_num = STATIC_ARRAY_SIZE (config_keys);
static size_t apache_curl_callback (void *buf, size_t size, size_t nmemb, void *stream)
{
{
static char credentials[1024];
+ if (url == NULL)
+ {
+ WARNING ("apache plugin: init: No URL configured, returning "
+ "an error.");
+ return (-1);
+ }
+
if (curl != NULL)
{
curl_easy_cleanup (curl);
if ((curl = curl_easy_init ()) == NULL)
{
- ERROR ("apache: `curl_easy_init' failed.");
+ ERROR ("apache plugin: init: `curl_easy_init' failed.");
return (-1);
}
if (user != NULL)
{
- if (snprintf (credentials, 1024, "%s:%s", user, pass == NULL ? "" : pass) >= 1024)
+ int status;
+
+ status = snprintf (credentials, sizeof (credentials), "%s:%s",
+ user, (pass == NULL) ? "" : pass);
+ if (status >= sizeof (credentials))
{
- ERROR ("apache: Credentials would have been truncated.");
+ ERROR ("apache plugin: init: Returning an error "
+ "because the credentials have been "
+ "truncated.");
return (-1);
}
+ credentials[sizeof (credentials) - 1] = '\0';
curl_easy_setopt (curl, CURLOPT_USERPWD, credentials);
}
- if (url != NULL)
- {
- curl_easy_setopt (curl, CURLOPT_URL, url);
- }
+ curl_easy_setopt (curl, CURLOPT_URL, url);
if (cacert != NULL)
{
} /* int init */
static void submit_counter (const char *type, const char *type_instance,
- unsigned long long value)
+ counter_t value)
{
value_t values[1];
value_list_t vl = VALUE_LIST_INIT;
- DEBUG ("type = %s; type_instance = %s; value = %llu;",
- type, type_instance, value);
-
values[0].counter = value;
vl.values = values;
strcpy (vl.host, hostname_g);
strcpy (vl.plugin, "apache");
strcpy (vl.plugin_instance, "");
- strncpy (vl.type_instance, type_instance, sizeof (vl.type_instance));
+
+ if (type_instance != NULL)
+ {
+ strncpy (vl.type_instance, type_instance,
+ sizeof (vl.type_instance));
+ vl.type_instance[sizeof (vl.type_instance) - 1] = '\0';
+ }
plugin_dispatch_values (type, &vl);
} /* void submit_counter */
static void submit_gauge (const char *type, const char *type_instance,
- double value)
+ gauge_t value)
{
value_t values[1];
value_list_t vl = VALUE_LIST_INIT;
- DEBUG ("type = %s; type_instance = %s; value = %lf;",
- type, type_instance, value);
-
values[0].gauge = value;
vl.values = values;
strcpy (vl.plugin_instance, "");
if (type_instance != NULL)
+ {
strncpy (vl.type_instance, type_instance,
sizeof (vl.type_instance));
+ vl.type_instance[sizeof (vl.type_instance) - 1] = '\0';
+ }
plugin_dispatch_values (type, &vl);
} /* void submit_counter */
An I<Identifier> is of the form
C<I<host>B</>I<plugin>B<->I<instance>B</>I<type>B<->I<instance>> with both
I<instance>-parts being optional. If they're omitted the hyphen must be
-omitted, too.
+omitted, too. I<plugin> and each I<instance>-part may be chosen freely as long
+as the tuple (plugin, plugin instance, type instance) uniquely identifies the
+plugin within collectd. I<type> identifies the type and number of values
+(i.E<nbsp>e. data-set) passed to collectd. A large list of predefined
+data-sets is available in the B<types.db> file.
The I<OptionList> is an optional list of I<Options>, where each option if a
key-value-pair. A list of currently understood options can be found below, all
* sread
*
* DESCRIPTION
- * Reads exactly `n' bytes or failes. Syntax and other behavior is analogous
+ * Reads exactly `n' bytes or fails. Syntax and other behavior is analogous
* to `read(2)'. If EOF is received the file descriptor is closed and an
* error is returned.
*
* PARAMETERS
* `fd' File descriptor to write to.
* `buf' Buffer that is to be written.
- * `count' Numver of bytes in the buffer.
+ * `count' Number of bytes in the buffer.
*
* RETURN VALUE
- * Zero upon success or non-zero if an error occured. `errno' is set in this
+ * Zero upon success or non-zero if an error occurred. `errno' is set in this
* case.
*/
ssize_t sread (int fd, void *buf, size_t count);
* swrite
*
* DESCRIPTION
- * Writes exactly `n' bytes or failes. Syntax and other behavior is analogous
+ * Writes exactly `n' bytes or fails. Syntax and other behavior is analogous
* to `write(2)'.
*
* PARAMETERS
* `fd' File descriptor to write to.
* `buf' Buffer that is to be written.
- * `count' Numver of bytes in the buffer.
+ * `count' Number of bytes in the buffer.
*
* RETURN VALUE
- * Zero upon success or non-zero if an error occured. `errno' is set in this
+ * Zero upon success or non-zero if an error occurred. `errno' is set in this
* case.
*/
ssize_t swrite (int fd, const void *buf, size_t count);
* strjoin
*
* DESCRIPTION
- * Joins together several parts of a string using `sep' as a seperator. This
- * is equipollent to the perl buildin `join'.
+ * Joins together several parts of a string using `sep' as a separator. This
+ * is equivalent to the Perl built-in `join'.
*
* PARAMETERS
* `dst' Buffer where the result is stored.
*
* RETURN VALUE
* Returns the number of characters in `dst', NOT including the trailing
- * null-byte. If an error occured (empty array or `dst' too small) a value
+ * null-byte. If an error occurred (empty array or `dst' too small) a value
* smaller than zero will be returned.
*/
int strjoin (char *dst, size_t dst_len, char **fields, size_t fields_num, const char *sep);