From 7cfd65af5400d1944bb981827d6811b3732f54a5 Mon Sep 17 00:00:00 2001 From: octo Date: Fri, 27 Jan 2006 19:35:59 +0000 Subject: [PATCH] Added `qcache'-support to the MySQL plugin --- src/mysql.c | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 96 insertions(+), 16 deletions(-) diff --git a/src/mysql.c b/src/mysql.c index 222c02aa..8400a56c 100644 --- a/src/mysql.c +++ b/src/mysql.c @@ -1,6 +1,6 @@ /** * collectd - src/mysql.c - * Copyright (C) 2005 Florian octo Forster + * Copyright (C) 2006 Florian octo Forster * * 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 @@ -48,9 +48,14 @@ static char *db = NULL; static char init_suceeded = 0; #endif +/* TODO + * understand `Select_*' and possibly do that stuff as well.. + */ + static char *commands_file = "mysql/mysql_commands-%s.rrd"; -static char *handler_file = "mysql/mysql_handler-%s.rrd"; -static char *threads_file = "mysql/mysql_threads.rrd"; +static char *handler_file = "mysql/mysql_handler-%s.rrd"; +static char *qcache_file = "mysql/mysql_qcache.rrd"; +static char *threads_file = "mysql/mysql_threads.rrd"; static char *traffic_file = "traffic-mysql.rrd"; static char *commands_ds_def[] = @@ -67,14 +72,25 @@ static char *handler_ds_def[] = }; static int handler_ds_num = 1; +static char *qcache_ds_def[] = +{ + "DS:hits:COUNTER:25:0:U", + "DS:inserts:COUNTER:25:0:U", + "DS:not_cached:COUNTER:25:0:U", + "DS:queries_in_cache:GAUGE:25:0:U", + NULL +}; +static int qcache_ds_num = 4; + static char *threads_ds_def[] = { "DS:running:GAUGE:25:0:U", "DS:connected:GAUGE:25:0:U", "DS:cached:GAUGE:25:0:U", + "DS:created:COUNTER:25:0:u", NULL }; -static int threads_ds_num = 3; +static int threads_ds_num = 4; static char *traffic_ds_def[] = { @@ -197,6 +213,12 @@ static void traffic_write (char *host, char *inst, char *val) traffic_ds_def, traffic_ds_num); } +static void qcache_write (char *host, char *inst, char *val) +{ + rrd_update_file (host, qcache_file, val, + qcache_ds_def, qcache_ds_num); +} + #if MYSQL_HAVE_READ static void commands_submit (char *inst, unsigned long long value) { @@ -240,13 +262,39 @@ static void handler_submit (char *inst, unsigned long long value) plugin_submit ("mysql_handler", inst, buf); } -static void threads_submit (int running, int connected, int cached) +static void qcache_submit (unsigned long long hits, unsigned long long inserts, + unsigned long long not_cached, int queries_in_cache) +{ + char buf[BUFSIZE]; + int status; + + status = snprintf (buf, BUFSIZE, "%u:%llu:%llu:%llu:%i", + (unsigned int) curtime, hits, inserts, not_cached, + queries_in_cache); + + if (status < 0) + { + syslog (LOG_ERR, "snprintf failed"); + return; + } + else if (status >= BUFSIZE) + { + syslog (LOG_WARNING, "snprintf was truncated"); + return; + } + + plugin_submit ("mysql_qcache", "-", buf); +} + +static void threads_submit (int running, int connected, int cached, + unsigned long long created) { char buf[BUFSIZE]; int status; - status = snprintf (buf, BUFSIZE, "%u:%i:%i:%i", (unsigned int) curtime, - running, connected, cached); + status = snprintf (buf, BUFSIZE, "%u:%i:%i:%i:%llu", + (unsigned int) curtime, + running, connected, cached, created); if (status < 0) { @@ -294,12 +342,18 @@ static void mysql_read (void) int query_len; int field_num; + unsigned long long qcache_hits = 0ULL; + unsigned long long qcache_inserts = 0ULL; + unsigned long long qcache_not_cached = 0ULL; + int qcache_queries_in_cache = -1; + int threads_running = -1; int threads_connected = -1; int threads_cached = -1; + unsigned long long threads_created = 0ULL; - unsigned long long traffic_incoming = 0LL; - unsigned long long traffic_outgoing = 0LL; + unsigned long long traffic_incoming = 0ULL; + unsigned long long traffic_outgoing = 0ULL; if (init_suceeded == 0) return; @@ -334,19 +388,33 @@ static void mysql_read (void) key = row[0]; val = atoll (row[1]); - if (val == 0ULL) - continue; - if (strncmp (key, "Com_", 4) == 0) { + if (val == 0ULL) + continue; + /* Ignore `prepared statements' */ if (strncmp (key, "Com_stmt_", 9) != 0) commands_submit (key + 4, val); } else if (strncmp (key, "Handler_", 8) == 0) { + if (val == 0ULL) + continue; + handler_submit (key + 8, val); } + else if (strncmp (key, "Qcache_", 7) == 0) + { + if (strcmp (key, "Qcache_hits") == 0) + qcache_hits = val; + else if (strcmp (key, "Qcache_inserts") == 0) + qcache_inserts = val; + else if (strcmp (key, "Qcache_not_cached") == 0) + qcache_not_cached = val; + else if (strcmp (key, "Qcache_queries_in_cache") == 0) + qcache_queries_in_cache = (int) val; + } else if (strncmp (key, "Bytes_", 6) == 0) { if (strcmp (key, "Bytes_received") == 0) @@ -362,11 +430,22 @@ static void mysql_read (void) threads_connected = (int) val; else if (strcmp (key, "Threads_cached") == 0) threads_cached = (int) val; + else if (strcmp (key, "Threads_created") == 0) + threads_created = val; } } mysql_free_result (res); res = NULL; - threads_submit (threads_running, threads_connected, threads_cached); + if ((qcache_hits != 0ULL) + || (qcache_inserts != 0ULL) + || (qcache_not_cached != 0ULL)) + qcache_submit (qcache_hits, qcache_inserts, qcache_not_cached, + qcache_queries_in_cache); + + if (threads_created != 0ULL) + threads_submit (threads_running, threads_connected, + threads_cached, threads_created); + traffic_submit (traffic_incoming, traffic_outgoing); /* mysql_close (con); */ @@ -381,9 +460,10 @@ void module_register (void) { plugin_register (MODULE_NAME, init, mysql_read, NULL); plugin_register ("mysql_commands", NULL, NULL, commands_write); - plugin_register ("mysql_handler", NULL, NULL, handler_write); - plugin_register ("mysql_threads", NULL, NULL, threads_write); - plugin_register ("mysql_traffic", NULL, NULL, traffic_write); + plugin_register ("mysql_handler", NULL, NULL, handler_write); + plugin_register ("mysql_qcache", NULL, NULL, qcache_write); + plugin_register ("mysql_threads", NULL, NULL, threads_write); + plugin_register ("mysql_traffic", NULL, NULL, traffic_write); cf_register (MODULE_NAME, config, config_keys, config_keys_num); } -- 2.11.0