From cdffa376ca7a5ddf102b8934d02db9fb2d0587ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Wed, 19 Aug 2015 07:54:25 +0000 Subject: [PATCH] Added ConnOK and ConnERR in stats_mysql_connection_pool , per issue #338 --- include/MySQL_HostGroups_Manager.h | 2 ++ lib/MySQL_HostGroups_Manager.cpp | 10 +++++++++- lib/ProxySQL_Admin.cpp | 8 ++++---- lib/mysql_connection.cpp | 3 +++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/include/MySQL_HostGroups_Manager.h b/include/MySQL_HostGroups_Manager.h index 3dea64619..7bb25395a 100644 --- a/include/MySQL_HostGroups_Manager.h +++ b/include/MySQL_HostGroups_Manager.h @@ -45,6 +45,8 @@ class MySrvC { // MySQL Server Container enum MySerStatus status; unsigned int compression; unsigned int max_connections; + unsigned int connect_OK; + unsigned int connect_ERR; //uint8_t charset; MySrvConnList *ConnectionsUsed; MySrvConnList *ConnectionsFree; diff --git a/lib/MySQL_HostGroups_Manager.cpp b/lib/MySQL_HostGroups_Manager.cpp index 2ac69d2aa..a579f423f 100644 --- a/lib/MySQL_HostGroups_Manager.cpp +++ b/lib/MySQL_HostGroups_Manager.cpp @@ -109,6 +109,8 @@ MySrvC::MySrvC(char *add, uint16_t p, unsigned int _weight, enum MySerStatus _st status=_status; compression=_compression; max_connections=_max_connections; + connect_OK=0; + connect_ERR=0; //charset=_charset; myhgc=NULL; ConnectionsUsed=new MySrvConnList(this); @@ -602,7 +604,7 @@ __exit_get_multiple_idle_connections: } SQLite3_result * MySQL_HostGroups_Manager::SQL3_Connection_Pool() { - const int colnum=6; + const int colnum=8; proxy_debug(PROXY_DEBUG_MYSQL_CONNECTION, 4, "Dumping Connection Pool\n"); SQLite3_result *result=new SQLite3_result(colnum); result->add_column_definition(SQLITE_TEXT,"hostgroup"); @@ -611,6 +613,8 @@ SQLite3_result * MySQL_HostGroups_Manager::SQL3_Connection_Pool() { result->add_column_definition(SQLITE_TEXT,"status"); result->add_column_definition(SQLITE_TEXT,"ConnUsed"); result->add_column_definition(SQLITE_TEXT,"ConnFree"); + result->add_column_definition(SQLITE_TEXT,"ConnOK"); + result->add_column_definition(SQLITE_TEXT,"ConnERR"); wrlock(); int i,j, k; @@ -655,6 +659,10 @@ SQLite3_result * MySQL_HostGroups_Manager::SQL3_Connection_Pool() { pta[4]=strdup(buf); sprintf(buf,"%u", mysrvc->ConnectionsFree->conns->len); pta[5]=strdup(buf); + sprintf(buf,"%u", mysrvc->connect_OK); + pta[6]=strdup(buf); + sprintf(buf,"%u", mysrvc->connect_ERR); + pta[7]=strdup(buf); result->add_row(pta); for (k=0; kexecute("BEGIN"); statsdb->execute("DELETE FROM stats_mysql_connection_pool"); - char *a=(char *)"INSERT INTO stats_mysql_connection_pool VALUES (\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")"; + char *a=(char *)"INSERT INTO stats_mysql_connection_pool VALUES (\"%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; - for (int i=0; i<6; i++) { + for (int i=0; i<8; i++) { arg_len+=strlen(r->fields[i]); } char *query=(char *)malloc(strlen(a)+arg_len+32); - sprintf(query,a,r->fields[0],r->fields[1],r->fields[2],r->fields[3],r->fields[4],r->fields[5]); + sprintf(query,a,r->fields[0],r->fields[1],r->fields[2],r->fields[3],r->fields[4],r->fields[5],r->fields[6],r->fields[7]); statsdb->execute(query); free(query); } diff --git a/lib/mysql_connection.cpp b/lib/mysql_connection.cpp index e4c109a57..698949aca 100644 --- a/lib/mysql_connection.cpp +++ b/lib/mysql_connection.cpp @@ -386,11 +386,14 @@ handler_again: } break; case ASYNC_CONNECT_SUCCESSFUL: + __sync_fetch_and_add(&parent->connect_OK,1); break; case ASYNC_CONNECT_FAILED: + __sync_fetch_and_add(&parent->connect_ERR,1); break; case ASYNC_CONNECT_TIMEOUT: proxy_error("Connect timeout on %s:%d : %llu - %llu = %llu\n", parent->address, parent->port, myds->sess->thread->curtime , myds->wait_until, myds->sess->thread->curtime - myds->wait_until); + __sync_fetch_and_add(&parent->connect_ERR,1); break; case ASYNC_CHANGE_USER_START: change_user_start();