From 3fd701b47c22812ebc48ceea7c7e19ac357142bf Mon Sep 17 00:00:00 2001 From: Aaron Brady Date: Tue, 12 Feb 2019 09:20:29 -0500 Subject: [PATCH] Add backend connection status flags to stats_mysql_processlist --- lib/MySQL_Thread.cpp | 6 +++++- lib/ProxySQL_Admin.cpp | 10 ++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lib/MySQL_Thread.cpp b/lib/MySQL_Thread.cpp index d71a1551a..1653b0c22 100644 --- a/lib/MySQL_Thread.cpp +++ b/lib/MySQL_Thread.cpp @@ -4396,7 +4396,7 @@ void MySQL_Threads_Handler::Get_Memory_Stats() { } SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() { - const int colnum=14; + const int colnum=15; char port[NI_MAXSERV]; proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 4, "Dumping MySQL Processlist\n"); SQLite3_result *result=new SQLite3_result(colnum); @@ -4414,6 +4414,7 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() { result->add_column_definition(SQLITE_TEXT,"command"); result->add_column_definition(SQLITE_TEXT,"time_ms"); result->add_column_definition(SQLITE_TEXT,"info"); + result->add_column_definition(SQLITE_TEXT,"status_flags"); unsigned int i; unsigned int i2; // signal_all_threads(1); @@ -4549,12 +4550,15 @@ SQLite3_result * MySQL_Threads_Handler::SQL3_Processlist() { pta[13]=NULL; } } + sprintf(buf,"%d", mc->status_flags); + pta[14]=strdup(buf); } else { pta[7]=NULL; pta[8]=NULL; pta[9]=NULL; pta[10]=NULL; pta[13]=NULL; + pta[14]=NULL; } switch (sess->status) { case CONNECTING_SERVER: diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index 7b9959eec..e9fa9f1e8 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -303,7 +303,7 @@ static int http_handler(void *cls, struct MHD_Connection *connection, const char #define STATS_SQLITE_TABLE_MYSQL_QUERY_RULES "CREATE TABLE stats_mysql_query_rules (rule_id INTEGER PRIMARY KEY , hits INT NOT NULL)" #define STATS_SQLITE_TABLE_MYSQL_USERS "CREATE TABLE stats_mysql_users (username VARCHAR PRIMARY KEY , frontend_connections INT NOT NULL , frontend_max_connections INT NOT NULL)" #define STATS_SQLITE_TABLE_MYSQL_COMMANDS_COUNTERS "CREATE TABLE stats_mysql_commands_counters (Command VARCHAR NOT NULL PRIMARY KEY , Total_Time_us INT NOT NULL , Total_cnt INT NOT NULL , cnt_100us INT NOT NULL , cnt_500us INT NOT NULL , cnt_1ms INT NOT NULL , cnt_5ms INT NOT NULL , cnt_10ms INT NOT NULL , cnt_50ms INT NOT NULL , cnt_100ms INT NOT NULL , cnt_500ms INT NOT NULL , cnt_1s INT NOT NULL , cnt_5s INT NOT NULL , cnt_10s INT NOT NULL , cnt_INFs)" -#define STATS_SQLITE_TABLE_MYSQL_PROCESSLIST "CREATE TABLE stats_mysql_processlist (ThreadID INT NOT NULL , SessionID INTEGER PRIMARY KEY , user VARCHAR , db VARCHAR , cli_host VARCHAR , cli_port INT , hostgroup INT , l_srv_host VARCHAR , l_srv_port INT , srv_host VARCHAR , srv_port INT , command VARCHAR , time_ms INT NOT NULL , info VARCHAR)" +#define STATS_SQLITE_TABLE_MYSQL_PROCESSLIST "CREATE TABLE stats_mysql_processlist (ThreadID INT NOT NULL , SessionID INTEGER PRIMARY KEY , user VARCHAR , db VARCHAR , cli_host VARCHAR , cli_port INT , hostgroup INT , l_srv_host VARCHAR , l_srv_port INT , srv_host VARCHAR , srv_port INT , command VARCHAR , time_ms INT NOT NULL , info VARCHAR, status_flags INT)" #define STATS_SQLITE_TABLE_MYSQL_CONNECTION_POOL "CREATE TABLE stats_mysql_connection_pool (hostgroup INT , srv_host VARCHAR , srv_port INT , status VARCHAR , ConnUsed INT , ConnFree INT , ConnOK INT , ConnERR INT , MaxConnUsed INT , Queries INT , Queries_GTID_sync INT , Bytes_data_sent INT , Bytes_data_recv INT , Latency_us INT)" #define STATS_SQLITE_TABLE_MYSQL_CONNECTION_POOL_RESET "CREATE TABLE stats_mysql_connection_pool_reset (hostgroup INT , srv_host VARCHAR , srv_port INT , status VARCHAR , ConnUsed INT , ConnFree INT , ConnOK INT , ConnERR INT , MaxConnUsed INT , Queries INT , Queries_GTID_sync INT , Bytes_data_sent INT , Bytes_data_recv INT , Latency_us INT)" @@ -5713,12 +5713,13 @@ void ProxySQL_Admin::stats___mysql_processlist() { if (resultset==NULL) return; statsdb->execute("BEGIN"); statsdb->execute("DELETE FROM stats_mysql_processlist"); - char *a=(char *)"INSERT OR IGNORE INTO stats_mysql_processlist VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')"; + char *a=(char *)"INSERT OR IGNORE INTO stats_mysql_processlist VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')"; for (std::vector::iterator it = resultset->rows.begin() ; it != resultset->rows.end(); ++it) { SQLite3_row *r=*it; int arg_len=0; char *o_info=NULL; - for (int i=0; i<13; i++) { // info (field 13) is left out! See #746 + for (int i=0; i<15; i++) { // info (field 13) is left out! See #746 + if(i == 13) continue; if (r->fields[i]) arg_len+=strlen(r->fields[i]); } @@ -5742,7 +5743,8 @@ void ProxySQL_Admin::stats___mysql_processlist() { (r->fields[10] ? r->fields[10] : ""), (r->fields[11] ? r->fields[11] : ""), (r->fields[12] ? r->fields[12] : ""), - (r->fields[13] ? o_info : "") + (r->fields[13] ? o_info : ""), + (r->fields[14] ? r->fields[14] : "") ); statsdb->execute(query); free(query);