tsdb: implement SHOW TSDB VARIABLES and SHOW TSDB STATUS

pull/5383/head
Rene Cannao 3 months ago
parent 685b92ceaa
commit 6404d7b365

@ -176,6 +176,8 @@
#define STATS_SQLITE_TABLE_MYSQL_GLOBAL "CREATE TABLE stats_mysql_global (Variable_Name VARCHAR NOT NULL PRIMARY KEY , Variable_Value VARCHAR NOT NULL)"
#define STATS_SQLITE_TABLE_TSDB "CREATE TABLE stats_tsdb (Variable_Name VARCHAR NOT NULL PRIMARY KEY , Variable_Value VARCHAR NOT NULL)"
#define STATS_SQLITE_TABLE_MEMORY_METRICS "CREATE TABLE stats_memory_metrics (Variable_Name VARCHAR NOT NULL PRIMARY KEY , Variable_Value VARCHAR NOT NULL)"
#define STATS_SQLITE_TABLE_MYSQL_GTID_EXECUTED "CREATE TABLE stats_mysql_gtid_executed (hostname VARCHAR NOT NULL , port INT NOT NULL DEFAULT 3306 , gtid_executed VARCHAR , events INT NOT NULL)"

@ -2,6 +2,7 @@
#define CLASS_PROXYSQL_STATISTICS_H
#include "proxysql.h"
#include "cpp.h"
#include "ProxySQL_Admin_Tables_Definitions.h"
//#include "thread.h"
//#include "wqueue.h"
#include <vector>
@ -185,6 +186,7 @@ class ProxySQL_Statistics {
#ifndef NOJEM
void system_memory_sets();
#endif
void stats___tsdb();
void MySQL_Query_Cache_sets(SQLite3_result *);
SQLite3_result * get_mysql_metrics(int interval);
SQLite3_result * get_myhgm_metrics(int interval);

@ -4527,6 +4527,20 @@ void admin_session_handler(S* sess, void *_pa, PtrSize_t *pkt) {
goto __run_query;
}
if (query_no_space_length == strlen("SHOW TSDB VARIABLES") && !strncasecmp("SHOW TSDB VARIABLES", query_no_space, query_no_space_length)) {
l_free(query_length, query);
query = l_strdup("SELECT variable_name AS Variable_name, variable_value AS Value FROM global_variables WHERE variable_name LIKE 'tsdb-%' ORDER BY variable_name");
query_length = strlen(query) + 1;
goto __run_query;
}
if (query_no_space_length == strlen("SHOW TSDB STATUS") && !strncasecmp("SHOW TSDB STATUS", query_no_space, query_no_space_length)) {
l_free(query_length, query);
query = l_strdup("SELECT Variable_Name AS Variable_name, Variable_Value AS Value FROM stats_tsdb ORDER BY Variable_name");
query_length = strlen(query) + 1;
goto __run_query;
}
if (query_no_space_length == strlen("SHOW PGSQL STATUS") && !strncasecmp("SHOW PGSQL STATUS", query_no_space, query_no_space_length)) {
l_free(query_length, query);
query = l_strdup("SELECT Variable_Name AS Variable_name, Variable_Value AS Value FROM stats_pgsql_global ORDER BY variable_name");

@ -1244,6 +1244,8 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign
bool stats_pgsql_connection_pool = false;
bool stats_pgsql_connection_pool_reset = false;
bool stats_tsdb = false;
bool runtime_proxysql_servers=false;
bool runtime_checksums_values=false;
@ -1382,6 +1384,8 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign
{ stats_pgsql_query_rules = true; refresh = true; }
if (strstr(query_no_space,"stats_mysql_users"))
{ stats_mysql_users=true; refresh=true; }
if (strstr(query_no_space,"stats_tsdb"))
{ stats_tsdb=true; refresh=true; }
if (strstr(query_no_space,"stats_pgsql_users"))
{ stats_pgsql_users = true; refresh = true; }
if (strstr(query_no_space,"stats_mysql_gtid_executed"))
@ -1605,6 +1609,8 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign
stats___pgsql_commands_counters();
if (stats_mysql_users)
stats___mysql_users();
if (stats_tsdb)
GloProxyStats->stats___tsdb();
if (stats_pgsql_users)
stats___pgsql_users();
if (stats_mysql_gtid_executed)

@ -235,6 +235,7 @@ void ProxySQL_Statistics::init() {
insert_into_tables_defs(tables_defs_statsdb_disk,"history_pgsql_status_variables", STATSDB_SQLITE_TABLE_HISTORY_PGSQL_STATUS_VARIABLES);
insert_into_tables_defs(tables_defs_statsdb_disk,"history_pgsql_status_variables_lookup", STATSDB_SQLITE_TABLE_HISTORY_PGSQL_STATUS_VARIABLES_LOOKUP);
insert_into_tables_defs(tables_defs_statsdb_mem,"stats_tsdb", STATS_SQLITE_TABLE_TSDB);
insert_into_tables_defs(tables_defs_statsdb_disk,"history_mysql_query_events", STATSDB_SQLITE_TABLE_HISTORY_MYSQL_QUERY_EVENTS);
@ -1861,3 +1862,20 @@ void ProxySQL_Statistics::tsdb_monitor_loop() {
delete resultset;
}
}
void ProxySQL_Statistics::stats___tsdb() {
tsdb_status_t status = get_tsdb_status();
char query[512];
statsdb_mem->execute("DELETE FROM stats_tsdb");
auto insert_stat = [&](const char* name, unsigned long long value) {
snprintf(query, sizeof(query), "INSERT INTO stats_tsdb VALUES ('%s', '%llu')", name, value);
statsdb_mem->execute(query);
};
insert_stat("Total_Series", status.total_series);
insert_stat("Total_Datapoints", status.total_datapoints);
insert_stat("Disk_Size_Bytes", status.disk_size_bytes);
insert_stat("Oldest_Datapoint_TS", status.oldest_datapoint);
insert_stat("Newest_Datapoint_TS", status.newest_datapoint);
}

Loading…
Cancel
Save