From efd4237b95192a905aeff57d7d865a8a3059f35e Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 5 Jul 2010 10:46:00 +0200 Subject: [PATCH] v5upgrade target: Implement handling of the "mysql_qcache" and "mysql_threads" types. --- src/target_v5upgrade.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) diff --git a/src/target_v5upgrade.c b/src/target_v5upgrade.c index 670efce8..7fc0d421 100644 --- a/src/target_v5upgrade.c +++ b/src/target_v5upgrade.c @@ -99,6 +99,117 @@ static int v5_interface (const data_set_t *ds, value_list_t *vl) /* {{{ */ return (FC_TARGET_CONTINUE); } /* }}} int v5_interface */ +/* + * MySQL query cache + * + * 4.* uses the "mysql_qcache" type which mixes different types of + * information. In 5.* this has been broken up. + */ +static int v5_mysql_qcache (const data_set_t *ds, value_list_t *vl) /* {{{ */ +{ + value_list_t new_vl; + value_t new_value; + + if (vl->values_len != 5) + return (FC_TARGET_STOP); + + /* Copy everything: Time, interval, host, ... */ + memcpy (&new_vl, vl, sizeof (new_vl)); + + /* Reset data we can't simply copy */ + new_vl.values = &new_value; + new_vl.values_len = 1; + new_vl.meta = NULL; + + /* Change the type to "cache_result" */ + sstrncpy (new_vl.type, "cache_result", sizeof (new_vl.type)); + + /* Dispatch new value lists instead of this one */ + new_vl.values[0].derive = (derive_t) vl->values[0].counter; + sstrncpy (new_vl.type_instance, "qcache-hits", + sizeof (new_vl.type_instance)); + plugin_dispatch_values (&new_vl); + + new_vl.values[0].derive = (derive_t) vl->values[1].counter; + sstrncpy (new_vl.type_instance, "qcache-inserts", + sizeof (new_vl.type_instance)); + plugin_dispatch_values (&new_vl); + + new_vl.values[0].derive = (derive_t) vl->values[2].counter; + sstrncpy (new_vl.type_instance, "qcache-not_cached", + sizeof (new_vl.type_instance)); + plugin_dispatch_values (&new_vl); + + new_vl.values[0].derive = (derive_t) vl->values[3].counter; + sstrncpy (new_vl.type_instance, "qcache-prunes", + sizeof (new_vl.type_instance)); + plugin_dispatch_values (&new_vl); + + /* The last data source is a gauge value, so we have to use a different type + * here. */ + new_vl.values[0].gauge = vl->values[4].gauge; + sstrncpy (new_vl.type, "cache_size", sizeof (new_vl.type)); + sstrncpy (new_vl.type_instance, "qcache", + sizeof (new_vl.type_instance)); + plugin_dispatch_values (&new_vl); + + /* Abort processing */ + return (FC_TARGET_STOP); +} /* }}} int v5_mysql_qcache */ + +/* + * MySQL thread count + * + * 4.* uses the "mysql_threads" type which mixes different types of + * information. In 5.* this has been broken up. + */ +static int v5_mysql_threads (const data_set_t *ds, value_list_t *vl) /* {{{ */ +{ + value_list_t new_vl; + value_t new_value; + + if (vl->values_len != 4) + return (FC_TARGET_STOP); + + /* Copy everything: Time, interval, host, ... */ + memcpy (&new_vl, vl, sizeof (new_vl)); + + /* Reset data we can't simply copy */ + new_vl.values = &new_value; + new_vl.values_len = 1; + new_vl.meta = NULL; + + /* Change the type to "threads" */ + sstrncpy (new_vl.type, "threads", sizeof (new_vl.type)); + + /* Dispatch new value lists instead of this one */ + new_vl.values[0].gauge = vl->values[0].gauge; + sstrncpy (new_vl.type_instance, "running", + sizeof (new_vl.type_instance)); + plugin_dispatch_values (&new_vl); + + new_vl.values[0].gauge = vl->values[1].gauge; + sstrncpy (new_vl.type_instance, "connected", + sizeof (new_vl.type_instance)); + plugin_dispatch_values (&new_vl); + + new_vl.values[0].gauge = vl->values[2].gauge; + sstrncpy (new_vl.type_instance, "cached", + sizeof (new_vl.type_instance)); + plugin_dispatch_values (&new_vl); + + /* The last data source is a counter value, so we have to use a different + * type here. */ + new_vl.values[0].derive = (derive_t) vl->values[3].counter; + sstrncpy (new_vl.type, "total_threads", sizeof (new_vl.type)); + sstrncpy (new_vl.type_instance, "created", + sizeof (new_vl.type_instance)); + plugin_dispatch_values (&new_vl); + + /* Abort processing */ + return (FC_TARGET_STOP); +} /* }}} int v5_mysql_threads */ + static int v5_destroy (void **user_data) /* {{{ */ { return (0); @@ -121,6 +232,10 @@ static int v5_invoke (const data_set_t *ds, value_list_t *vl, /* {{{ */ return (v5_df (ds, vl)); else if (strcmp ("interface", vl->plugin) == 0) return (v5_interface (ds, vl)); + else if (strcmp ("mysql_qcache", vl->type) == 0) + return (v5_mysql_qcache (ds, vl)); + else if (strcmp ("mysql_threads", vl->type) == 0) + return (v5_mysql_threads (ds, vl)); return (FC_TARGET_CONTINUE); } /* }}} int v5_invoke */ -- 2.11.0