Code

Merge branch 'collectd-4.10' into collectd-5.2
[collectd.git] / src / mysql.c
index 1ca3b484ce6d2ebadc490196ed64260140c7d18c..d15a055fe3296f70835e8e6daed68a46b37965bc 100644 (file)
@@ -1,6 +1,6 @@
 /**
  * collectd - src/mysql.c
- * Copyright (C) 2006-2009  Florian octo Forster
+ * Copyright (C) 2006-2010  Florian octo Forster
  * Copyright (C) 2008       Mirko Buffoni
  * Copyright (C) 2009       Doug MacEachern
  * Copyright (C) 2009       Sebastian tokkee Harl
@@ -20,7 +20,7 @@
  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  *
  * Authors:
- *   Florian octo Forster <octo at verplant.org>
+ *   Florian octo Forster <octo at collectd.org>
  *   Mirko Buffoni <briareos at eswat.org>
  *   Doug MacEachern <dougm at hyperic.com>
  *   Sebastian tokkee Harl <sh at tokkee.org>
@@ -58,7 +58,7 @@ struct mysql_database_s /* {{{ */
        _Bool slave_sql_running;
 
        MYSQL *con;
-       int    state;
+       _Bool  is_connected;
 };
 typedef struct mysql_database_s mysql_database_t; /* }}} */
 
@@ -192,9 +192,9 @@ static int mysql_config_database (oconfig_item_t *ci) /* {{{ */
                ud.data = (void *) db;
                ud.free_func = mysql_database_free;
 
-               if (db->database != NULL)
+               if (db->instance != NULL)
                        ssnprintf (cb_name, sizeof (cb_name), "mysql-%s",
-                                       db->database);
+                                       db->instance);
                else
                        sstrncpy (cb_name, "mysql", sizeof (cb_name));
 
@@ -237,30 +237,28 @@ static int mysql_config (oconfig_item_t *ci) /* {{{ */
 
 static MYSQL *getconnection (mysql_database_t *db)
 {
-       if (db->state != 0)
+       if (db->is_connected)
        {
-               int err;
-               if ((err = mysql_ping (db->con)) != 0)
-               {
-                       /* Assured by "mysql_config_database" */
-                       assert (db->instance != NULL);
-                       WARNING ("mysql_ping failed for instance \"%s\": %s",
-                                       db->instance,
-                                       mysql_error (db->con));
-                       db->state = 0;
-               }
-               else
-               {
-                       db->state = 1;
+               int status;
+
+               status = mysql_ping (db->con);
+               if (status == 0)
                        return (db->con);
-               }
+
+               WARNING ("mysql plugin: Lost connection to instance \"%s\": %s",
+                               db->instance, mysql_error (db->con));
        }
+       db->is_connected = 0;
 
-       if ((db->con = mysql_init (db->con)) == NULL)
+       if (db->con == NULL)
        {
-               ERROR ("mysql_init failed: %s", mysql_error (db->con));
-               db->state = 0;
-               return (NULL);
+               db->con = mysql_init (NULL);
+               if (db->con == NULL)
+               {
+                       ERROR ("mysql plugin: mysql_init failed: %s",
+                                       mysql_error (db->con));
+                       return (NULL);
+               }
        }
 
        if (mysql_real_connect (db->con, db->host, db->user, db->pass,
@@ -271,20 +269,18 @@ static MYSQL *getconnection (mysql_database_t *db)
                                (db->database != NULL) ? db->database : "<none>",
                                (db->host != NULL) ? db->host : "localhost",
                                mysql_error (db->con));
-               db->state = 0;
                return (NULL);
        }
-       else
-       {
-               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),
-                               mysql_get_server_info (db->con),
-                               mysql_get_proto_info (db->con));
-               db->state = 1;
-               return (db->con);
-       }
+
+       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),
+                       mysql_get_server_info (db->con),
+                       mysql_get_proto_info (db->con));
+
+       db->is_connected = 1;
+       return (db->con);
 } /* static MYSQL *getconnection (mysql_database_t *db) */
 
 static void set_host (mysql_database_t *db, char *buf, size_t buflen)
@@ -321,11 +317,11 @@ static void submit (const char *type, const char *type_instance,
 } /* submit */
 
 static void counter_submit (const char *type, const char *type_instance,
-               counter_t value, mysql_database_t *db)
+               derive_t value, mysql_database_t *db)
 {
        value_t values[1];
 
-       values[0].counter = value;
+       values[0].derive = value;
        submit (type, type_instance, values, STATIC_ARRAY_SIZE (values), db);
 } /* void counter_submit */
 
@@ -347,12 +343,12 @@ static void derive_submit (const char *type, const char *type_instance,
        submit (type, type_instance, values, STATIC_ARRAY_SIZE (values), db);
 } /* void derive_submit */
 
-static void traffic_submit (counter_t rx, counter_t tx, mysql_database_t *db)
+static void traffic_submit (derive_t rx, derive_t tx, mysql_database_t *db)
 {
        value_t values[2];
 
-       values[0].counter = rx;
-       values[1].counter = tx;
+       values[0].derive = rx;
+       values[1].derive = tx;
 
        submit ("mysql_octets", NULL, values, STATIC_ARRAY_SIZE (values), db);
 } /* void traffic_submit */
@@ -403,6 +399,7 @@ static int mysql_read_master_stats (mysql_database_t *db, MYSQL *con)
        {
                ERROR ("mysql plugin: Failed to get master statistics: "
                                "`%s' did not return any rows.", query);
+               mysql_free_result (res);
                return (-1);
        }
 
@@ -411,6 +408,7 @@ static int mysql_read_master_stats (mysql_database_t *db, MYSQL *con)
        {
                ERROR ("mysql plugin: Failed to get master statistics: "
                                "`%s' returned less than two columns.", query);
+               mysql_free_result (res);
                return (-1);
        }
 
@@ -454,6 +452,7 @@ static int mysql_read_slave_stats (mysql_database_t *db, MYSQL *con)
        {
                ERROR ("mysql plugin: Failed to get slave statistics: "
                                "`%s' did not return any rows.", query);
+               mysql_free_result (res);
                return (-1);
        }
 
@@ -462,6 +461,7 @@ static int mysql_read_slave_stats (mysql_database_t *db, MYSQL *con)
        {
                ERROR ("mysql plugin: Failed to get slave statistics: "
                                "`%s' returned less than 33 columns.", query);
+               mysql_free_result (res);
                return (-1);
        }
 
@@ -534,7 +534,7 @@ static int mysql_read_slave_stats (mysql_database_t *db, MYSQL *con)
                        ssnprintf (n.message, sizeof (n.message),
                                        "slave SQL thread started");
                        plugin_dispatch_notification (&n);
-                       db->slave_sql_running = 0;
+                       db->slave_sql_running = 1;
                }
        }
 
@@ -555,7 +555,6 @@ static int mysql_read (user_data_t *ud)
        MYSQL_RES *res;
        MYSQL_ROW  row;
        char      *query;
-       int        field_num;
 
        derive_t qcache_hits          = 0;
        derive_t qcache_inserts       = 0;
@@ -591,7 +590,6 @@ static int mysql_read (user_data_t *ud)
        if (res == NULL)
                return (-1);
 
-       field_num = mysql_num_fields (res);
        while ((row = mysql_fetch_row (res)))
        {
                char *key;