Many build fixes that turned up with GCC 4.6.
[collectd.git] / src / mysql.c
index 0d3cb7f..bfdbb76 100644 (file)
@@ -1,8 +1,10 @@
 /**
  * collectd - src/mysql.c
  * Copyright (C) 2006-2009  Florian octo Forster
- * Copyright (C) 2009  Doug MacEachern
- * Copyright (C) 2009  Sebastian tokkee Harl
+ * Copyright (C) 2008       Mirko Buffoni
+ * Copyright (C) 2009       Doug MacEachern
+ * Copyright (C) 2009       Sebastian tokkee Harl
+ * Copyright (C) 2009       Rodolphe QuiĆ©deville
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -22,6 +24,7 @@
  *   Mirko Buffoni <briareos at eswat.org>
  *   Doug MacEachern <dougm at hyperic.com>
  *   Sebastian tokkee Harl <sh at tokkee.org>
+ *   Rodolphe QuiĆ©deville <rquiedeville at bearstech.com>
  **/
 
 #include "collectd.h"
@@ -223,7 +226,6 @@ static int mysql_config (oconfig_item_t *ci) /* {{{ */
                        return (status);
                }
                assert (db->instance != NULL);
-               db->database = strdup (db->instance);
        }
        else
        {
@@ -318,11 +320,6 @@ static int mysql_config (oconfig_item_t *ci) /* {{{ */
                                        db->port);
                        status = -1;
                }
-               if (db->database == NULL)
-               {
-                       ERROR ("mysql plugin: No `Database' configured");
-                       status = -1;
-               }
                break;
        } /* while (status == 0) */
 
@@ -332,7 +329,8 @@ static int mysql_config (oconfig_item_t *ci) /* {{{ */
                user_data_t ud;
                char cb_name[DATA_MAX_NAME_LEN];
 
-               DEBUG ("mysql plugin: Registering new read callback: %s", db->database);
+               DEBUG ("mysql plugin: Registering new read callback: %s",
+                               (db->database != NULL) ? db->database : "<default>");
 
                memset (&ud, 0, sizeof (ud));
                ud.data = (void *) db;
@@ -344,7 +342,8 @@ static int mysql_config (oconfig_item_t *ci) /* {{{ */
                else
                        sstrncpy (cb_name, "mysql", sizeof (cb_name));
 
-               plugin_register_complex_read (cb_name, mysql_read,
+               plugin_register_complex_read (/* group = */ NULL, cb_name,
+                                             mysql_read,
                                              /* interval = */ NULL, &ud);
        }
        else
@@ -365,7 +364,11 @@ static MYSQL *getconnection (mysql_database_t *db)
                int err;
                if ((err = mysql_ping (db->con)) != 0)
                {
-                       WARNING ("mysql_ping failed: %s", mysql_error (db->con));
+                       WARNING ("mysql_ping failed for %s: %s",
+                                       (db->instance != NULL)
+                                       ? db->instance
+                                       : "<legacy>",
+                                       mysql_error (db->con));
                        db->state = 0;
                }
                else
@@ -395,7 +398,7 @@ static MYSQL *getconnection (mysql_database_t *db)
        }
        else
        {
-               INFO ("mysql plugin: Sucessfully connected to database %s "
+               INFO ("mysql plugin: Successfully connected to database %s "
                                "at server %s (server version: %s, protocol version: %d)",
                                (db->database != NULL) ? db->database : "<none>",
                                mysql_get_host_info (db->con),
@@ -704,7 +707,6 @@ static int mysql_read (user_data_t *ud)
        MYSQL_RES *res;
        MYSQL_ROW  row;
        char      *query;
-       int        field_num;
 
        unsigned long long qcache_hits          = 0ULL;
        unsigned long long qcache_inserts       = 0ULL;
@@ -740,7 +742,7 @@ static int mysql_read (user_data_t *ud)
        if (res == NULL)
                return (-1);
 
-       field_num = mysql_num_fields (res);
+       mysql_num_fields (res);
        while ((row = mysql_fetch_row (res)))
        {
                char *key;
@@ -749,23 +751,30 @@ static int mysql_read (user_data_t *ud)
                key = row[0];
                val = atoll (row[1]);
 
-               if (strncmp (key, "Com_", 4) == 0)
+               if (strncmp (key, "Com_", 
+                                 strlen ("Com_")) == 0)
                {
                        if (val == 0ULL)
                                continue;
 
                        /* Ignore `prepared statements' */
-                       if (strncmp (key, "Com_stmt_", 9) != 0)
-                               counter_submit ("mysql_commands", key + 4, val, db);
+                       if (strncmp (key, "Com_stmt_", strlen ("Com_stmt_")) != 0)
+                               counter_submit ("mysql_commands", 
+                                               key + strlen ("Com_"), 
+                                               val, db);
                }
-               else if (strncmp (key, "Handler_", 8) == 0)
+               else if (strncmp (key, "Handler_", 
+                                       strlen ("Handler_")) == 0)
                {
                        if (val == 0ULL)
                                continue;
 
-                       counter_submit ("mysql_handler", key + 8, val, db);
+                       counter_submit ("mysql_handler", 
+                                       key + strlen ("Handler_"), 
+                                       val, db);
                }
-               else if (strncmp (key, "Qcache_", 7) == 0)
+               else if (strncmp (key, "Qcache_",
+                                               strlen ("Qcache_")) == 0)
                {
                        if (strcmp (key, "Qcache_hits") == 0)
                                qcache_hits = val;
@@ -778,14 +787,16 @@ static int mysql_read (user_data_t *ud)
                        else if (strcmp (key, "Qcache_queries_in_cache") == 0)
                                qcache_queries_in_cache = (int) val;
                }
-               else if (strncmp (key, "Bytes_", 6) == 0)
+               else if (strncmp (key, "Bytes_", 
+                                       strlen ("Bytes_")) == 0)
                {
                        if (strcmp (key, "Bytes_received") == 0)
                                traffic_incoming += val;
                        else if (strcmp (key, "Bytes_sent") == 0)
                                traffic_outgoing += val;
                }
-               else if (strncmp (key, "Threads_", 8) == 0)
+               else if (strncmp (key, "Threads_", 
+                                               strlen ("Threads_")) == 0)
                {
                        if (strcmp (key, "Threads_running") == 0)
                                threads_running = (int) val;
@@ -796,6 +807,13 @@ static int mysql_read (user_data_t *ud)
                        else if (strcmp (key, "Threads_created") == 0)
                                threads_created = val;
                }
+               else if (strncmp (key, "Table_locks_",
+                                       strlen ("Table_locks_")) == 0)
+               {
+                       counter_submit ("mysql_locks",
+                                       key + strlen ("Table_locks_"),
+                                       val, db);
+               }
        }
        mysql_free_result (res); res = NULL;