diff --git a/include/ProxySQL_Admin_Tables_Definitions.h b/include/ProxySQL_Admin_Tables_Definitions.h index bcff6668f..ad6cf128d 100644 --- a/include/ProxySQL_Admin_Tables_Definitions.h +++ b/include/ProxySQL_Admin_Tables_Definitions.h @@ -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)" diff --git a/include/ProxySQL_Statistics.hpp b/include/ProxySQL_Statistics.hpp index 229ff5e34..02988d593 100644 --- a/include/ProxySQL_Statistics.hpp +++ b/include/ProxySQL_Statistics.hpp @@ -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 @@ -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); diff --git a/lib/Admin_Handler.cpp b/lib/Admin_Handler.cpp index acef7f910..b8c617077 100644 --- a/lib/Admin_Handler.cpp +++ b/lib/Admin_Handler.cpp @@ -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"); diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index 3984e21c4..0a2937da7 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -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) diff --git a/lib/ProxySQL_Statistics.cpp b/lib/ProxySQL_Statistics.cpp index 6587bfb0c..76eed7a64 100644 --- a/lib/ProxySQL_Statistics.cpp +++ b/lib/ProxySQL_Statistics.cpp @@ -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); +}