apache plugin: Do not initialize the plugin if no URL has been specified.
[collectd.git] / src / apache.c
index 973ad86..5a3272f 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * collectd - src/apache.c
- * Copyright (C) 2006  Florian octo Forster
+ * Copyright (C) 2006,2007  Florian octo Forster
  * Copyright (C) 2007  Florent EppO Monbillard
  *
  * This program is free software; you can redistribute it and/or modify it
 #include "common.h"
 #include "plugin.h"
 #include "configfile.h"
-#include "utils_debug.h"
-
-#if HAVE_LIBCURL && HAVE_CURL_CURL_H
-#  define APACHE_HAVE_READ 1
-#  include <curl/curl.h>
-#else
-#  define APACHE_HAVE_READ 0
-#endif
-
-/* Limit to 2^27 bytes/s. That's what a gigabit-ethernet link can handle, in
- * theory. */
-static data_source_t apache_bytes_dsrc[1] =
-{
-       {"count", DS_TYPE_COUNTER, 0, 134217728.0},
-};
-
-static data_set_t apache_bytes_ds =
-{
-       "apache_bytes", 1, apache_bytes_dsrc
-};
 
-/* Limit to 2^20 requests/s */
-static data_source_t apache_requests_dsrc[1] =
-{
-       {"count", DS_TYPE_COUNTER, 0, 134217728.0},
-};
+#include <curl/curl.h>
 
-static data_set_t apache_requests_ds =
-{
-       "apache_requests", 1, apache_requests_dsrc
-};
-
-static data_source_t apache_scoreboard_dsrc[1] =
-{
-       {"count", DS_TYPE_GAUGE, 0, 65535.0},
-};
-
-static data_set_t apache_scoreboard_ds =
-{
-       "apache_scoreboard", 1, apache_scoreboard_dsrc
-};
-
-static data_source_t apache_connections_dsrc[1] =
-{
-       {"count", DS_TYPE_GAUGE, 0, 65535.0},
-};
-
-static data_set_t apache_connections_ds =
-{
-       "apache_connections", 1, apache_connections_dsrc
-};
-
-#if APACHE_HAVE_READ
 static char *url    = NULL;
 static char *user   = NULL;
 static char *pass   = NULL;
@@ -152,6 +102,9 @@ static int init (void)
 {
        static char credentials[1024];
 
+       if (url == NULL)
+               return (0);
+
        if (curl != NULL)
        {
                curl_easy_cleanup (curl);
@@ -159,7 +112,7 @@ static int init (void)
 
        if ((curl = curl_easy_init ()) == NULL)
        {
-               syslog (LOG_ERR, "apache: `curl_easy_init' failed.");
+               ERROR ("apache: `curl_easy_init' failed.");
                return (-1);
        }
 
@@ -171,17 +124,14 @@ static int init (void)
        {
                if (snprintf (credentials, 1024, "%s:%s", user, pass == NULL ? "" : pass) >= 1024)
                {
-                       syslog (LOG_ERR, "apache: Credentials would have been truncated.");
+                       ERROR ("apache: Credentials would have been truncated.");
                        return (-1);
                }
 
                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)
        {
@@ -197,7 +147,7 @@ static void submit_counter (const char *type, const char *type_instance,
        value_t values[1];
        value_list_t vl = VALUE_LIST_INIT;
 
-       DBG ("type = %s; type_instance = %s; value = %llu;",
+       DEBUG ("type = %s; type_instance = %s; value = %llu;",
                        type, type_instance, value);
 
        values[0].counter = value;
@@ -219,7 +169,7 @@ static void submit_gauge (const char *type, const char *type_instance,
        value_t values[1];
        value_list_t vl = VALUE_LIST_INIT;
 
-       DBG ("type = %s; type_instance = %s; value = %lf;",
+       DEBUG ("type = %s; type_instance = %s; value = %lf;",
                        type, type_instance, value);
 
        values[0].gauge = value;
@@ -294,6 +244,7 @@ static int apache_read (void)
        int i;
 
        char *ptr;
+       char *saveptr;
        char *lines[16];
        int   lines_num = 0;
 
@@ -308,13 +259,14 @@ static int apache_read (void)
        apache_buffer_len = 0;
        if (curl_easy_perform (curl) != 0)
        {
-               syslog (LOG_ERR, "apache: curl_easy_perform failed: %s",
+               ERROR ("apache: curl_easy_perform failed: %s",
                                apache_curl_error);
                return (-1);
        }
 
        ptr = apache_buffer;
-       while ((lines[lines_num] = strtok (ptr, "\n\r")) != NULL)
+       saveptr = NULL;
+       while ((lines[lines_num] = strtok_r (ptr, "\n\r", &saveptr)) != NULL)
        {
                ptr = NULL;
                lines_num++;
@@ -351,19 +303,11 @@ static int apache_read (void)
 
        return (0);
 } /* int apache_read */
-#endif /* APACHE_HAVE_READ */
 
 void module_register (void)
 {
-       plugin_register_data_set (&apache_bytes_ds);
-       plugin_register_data_set (&apache_requests_ds);
-       plugin_register_data_set (&apache_scoreboard_ds);
-       plugin_register_data_set (&apache_connections_ds);
-
-#if APACHE_HAVE_READ
        plugin_register_config ("apache", config,
                        config_keys, config_keys_num);
        plugin_register_init ("apache", init);
        plugin_register_read ("apache", apache_read);
-#endif
-}
+} /* void module_register */