Merge pull request #2556 from sysown/v2.0.10-extended_stats

Extending Statistics, only for new Web UI
pull/2557/head
René Cannaò 6 years ago committed by GitHub
commit 090d93a1ba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -12,6 +12,15 @@
#define STATSDB_SQLITE_TABLE_MYSQL_CONNECTIONS STATSDB_SQLITE_TABLE_MYSQL_CONNECTIONS_V2_0
#define STATSDB_SQLITE_TABLE_HISTORY_MYSQL_STATUS_VARIABLES_V2_0_10 "CREATE TABLE history_mysql_status_variables (timestamp INT NOT NULL , variable_name VARCHAR NOT NULL , variable_value VARCHAR NOT NULL , PRIMARY KEY (timestamp, variable_name))"
#define STATSDB_SQLITE_TABLE_HISTORY_MYSQL_STATUS_VARIABLES STATSDB_SQLITE_TABLE_HISTORY_MYSQL_STATUS_VARIABLES_V2_0_10
#define STATSDB_SQLITE_TABLE_HISTORY_STATS_MYSQL_CONNECTION_POOL_V2_0_10 "CREATE TABLE history_stats_mysql_connection_pool (timestamp INT NOT NULL , 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, PRIMARY KEY (timestamp, hostgroup , srv_host , srv_port))"
#define STATSDB_SQLITE_TABLE_HISTORY_STATS_MYSQL_CONNECTION_POOL STATSDB_SQLITE_TABLE_HISTORY_STATS_MYSQL_CONNECTION_POOL_V2_0_10
#define STATSDB_SQLITE_TABLE_MYHGM_CONNECTIONS_V2_0 "CREATE TABLE myhgm_connections (timestamp INT NOT NULL, MyHGM_myconnpoll_destroy INT NOT NULL, MyHGM_myconnpoll_get INT NOT NULL, MyHGM_myconnpoll_get_ok INT NOT NULL, MyHGM_myconnpoll_push INT NOT NULL, MyHGM_myconnpoll_reset INT NOT NULL, PRIMARY KEY (timestamp))"
#define STATSDB_SQLITE_TABLE_MYHGM_CONNECTIONS STATSDB_SQLITE_TABLE_MYHGM_CONNECTIONS_V2_0
@ -80,6 +89,10 @@ class ProxySQL_Statistics {
unsigned long long next_timer_system_memory;
#endif
unsigned long long next_timer_MySQL_Query_Cache;
void MySQL_Threads_Handler_sets_v1(SQLite3_result *);
void MySQL_Threads_Handler_sets_v2(SQLite3_result *);
void MyHGM_Handler_sets_v1(SQLite3_result *);
void MyHGM_Handler_sets_connection_pool(SQLite3_result *);
public:
struct {
int stats_mysql_connection_pool;
@ -104,7 +117,7 @@ class ProxySQL_Statistics {
#endif
bool MySQL_Query_Cache_timetoget(unsigned long long);
void MySQL_Threads_Handler_sets(SQLite3_result *);
void MyHGM_Handler_sets(SQLite3_result *);
void MyHGM_Handler_sets(SQLite3_result *, SQLite3_result *);
void system_cpu_sets();
#ifndef NOJEM
void system_memory_sets();

@ -4596,8 +4596,15 @@ __end_while_pool:
if (MyHGM) {
SQLite3_result * resultset=MyHGM->SQL3_Get_ConnPool_Stats();
if (resultset) {
GloProxyStats->MyHGM_Handler_sets(resultset);
SQLite3_result * resultset2 = NULL;
if (GloVars.web_interface_plugin) {
resultset2 = MyHGM->SQL3_Connection_Pool(false);
}
GloProxyStats->MyHGM_Handler_sets(resultset, resultset2);
delete resultset;
if (resultset2) {
delete resultset2;
}
}
}
}

@ -19,6 +19,7 @@
#endif /* DEBUG */
#define PROXYSQL_STATISTICS_VERSION "1.4.1027" DEB
using namespace std;
extern ProxySQL_Admin *GloAdmin;
extern MySQL_Threads_Handler *GloMTH;
@ -80,6 +81,8 @@ void ProxySQL_Statistics::init() {
tables_defs_statsdb_disk = new std::vector<table_def_t *>;
insert_into_tables_defs(tables_defs_statsdb_mem,"mysql_connections", STATSDB_SQLITE_TABLE_MYSQL_CONNECTIONS);
insert_into_tables_defs(tables_defs_statsdb_disk,"mysql_connections", STATSDB_SQLITE_TABLE_MYSQL_CONNECTIONS);
insert_into_tables_defs(tables_defs_statsdb_disk,"history_mysql_status_variables", STATSDB_SQLITE_TABLE_HISTORY_MYSQL_STATUS_VARIABLES);
insert_into_tables_defs(tables_defs_statsdb_disk,"history_stats_mysql_connection_pool", STATSDB_SQLITE_TABLE_HISTORY_STATS_MYSQL_CONNECTION_POOL);
insert_into_tables_defs(tables_defs_statsdb_disk,"system_cpu", STATSDB_SQLITE_TABLE_SYSTEM_CPU);
#ifndef NOJEM
insert_into_tables_defs(tables_defs_statsdb_disk,"system_memory", STATSDB_SQLITE_TABLE_SYSTEM_MEMORY);
@ -629,7 +632,49 @@ void ProxySQL_Statistics::system_memory_sets() {
}
#endif
void ProxySQL_Statistics::MyHGM_Handler_sets(SQLite3_result *resultset) {
void ProxySQL_Statistics::MyHGM_Handler_sets(SQLite3_result *resultset1, SQLite3_result *resultset2) {
MyHGM_Handler_sets_v1(resultset1);
if (GloVars.web_interface_plugin && resultset2) {
MySQL_Threads_Handler_sets_v2(resultset1);
MyHGM_Handler_sets_connection_pool(resultset2);
}
}
void ProxySQL_Statistics::MyHGM_Handler_sets_connection_pool(SQLite3_result *resultset) {
int rc;
if (resultset == NULL)
return;
sqlite3 *mydb3=statsdb_disk->get_db();
sqlite3_stmt *statement=NULL;
string query;
if (resultset->rows_count == 0) {
return;
}
time_t ts = time(NULL);
query = "INSERT INTO history_stats_mysql_connection_pool VALUES (?1";
for (int i=0; i < resultset->columns; i++) {
query += ",?" + to_string(i+2);
}
query += ")";
rc=sqlite3_prepare_v2(mydb3, query.c_str(), -1, &statement, 0);
if (rc!=SQLITE_OK) {
proxy_error("SQLITE CRITICAL error: %s . Shutting down.\n", sqlite3_errmsg(mydb3));
exit(EXIT_SUCCESS);
}
for (std::vector<SQLite3_row *>::iterator it = resultset->rows.begin() ; it != resultset->rows.end(); ++it) {
SQLite3_row *r=*it;
rc=sqlite3_bind_int64(statement, 1, ts); ASSERT_SQLITE_OK(rc, statsdb_disk);
for (int i=0 ; i < resultset->columns ; i++) {
rc=sqlite3_bind_text(statement, i+2, r->fields[i] , -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb_disk);
}
SAFE_SQLITE3_STEP2(statement);
rc=sqlite3_clear_bindings(statement); ASSERT_SQLITE_OK(rc, statsdb_disk);
rc=sqlite3_reset(statement); //ASSERT_SQLITE_OK(rc, statsdb_disk);
}
sqlite3_finalize(statement);
}
void ProxySQL_Statistics::MyHGM_Handler_sets_v1(SQLite3_result *resultset) {
int rc;
if (resultset == NULL)
return;
@ -733,6 +778,50 @@ void ProxySQL_Statistics::MyHGM_Handler_sets(SQLite3_result *resultset) {
}
void ProxySQL_Statistics::MySQL_Threads_Handler_sets(SQLite3_result *resultset) {
MySQL_Threads_Handler_sets_v1(resultset);
if (GloVars.web_interface_plugin) {
MySQL_Threads_Handler_sets_v2(resultset);
}
}
void ProxySQL_Statistics::MySQL_Threads_Handler_sets_v2(SQLite3_result *resultset) {
int rc;
if (resultset == NULL)
return;
sqlite3 *mydb3=statsdb_disk->get_db();
sqlite3_stmt *statement=NULL;
string query;
if (resultset->rows_count == 0) {
return;
}
time_t ts = time(NULL);
query = "INSERT INTO history_mysql_status_variables VALUES ";
int idx = 0;
for (int i=0; i < resultset->rows_count; i++) {
query += "(?" + to_string(idx+1) + ",?" + to_string(idx+2) + ",?" + to_string(idx+3) + "),";
idx+=3;
}
query.pop_back();
rc=sqlite3_prepare_v2(mydb3, query.c_str(), -1, &statement, 0);
if (rc!=SQLITE_OK) {
proxy_error("SQLITE CRITICAL error: %s . Shutting down.\n", sqlite3_errmsg(mydb3));
exit(EXIT_SUCCESS);
}
idx=0;
for (std::vector<SQLite3_row *>::iterator it = resultset->rows.begin() ; it != resultset->rows.end(); ++it) {
SQLite3_row *r=*it;
rc=sqlite3_bind_int64(statement, idx+1, ts); ASSERT_SQLITE_OK(rc, statsdb_disk);
rc=sqlite3_bind_text(statement, idx+2, r->fields[0] , -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb_disk); // name
rc=sqlite3_bind_text(statement, idx+3, r->fields[1] , -1, SQLITE_TRANSIENT); ASSERT_SQLITE_OK(rc, statsdb_disk); // value
idx+=3;
}
SAFE_SQLITE3_STEP2(statement);
rc=sqlite3_clear_bindings(statement); ASSERT_SQLITE_OK(rc, statsdb_disk);
rc=sqlite3_reset(statement); //ASSERT_SQLITE_OK(rc, statsdb_disk);
sqlite3_finalize(statement);
}
void ProxySQL_Statistics::MySQL_Threads_Handler_sets_v1(SQLite3_result *resultset) {
int rc;
if (resultset == NULL)
return;

Loading…
Cancel
Save