diff --git a/include/ProxySQL_Statistics.hpp b/include/ProxySQL_Statistics.hpp index 02988d593..76ace75dc 100644 --- a/include/ProxySQL_Statistics.hpp +++ b/include/ProxySQL_Statistics.hpp @@ -186,7 +186,6 @@ 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/include/proxysql_admin.h b/include/proxysql_admin.h index 44e2ddf83..7b737662a 100644 --- a/include/proxysql_admin.h +++ b/include/proxysql_admin.h @@ -688,6 +688,7 @@ class ProxySQL_Admin { void save_admin_variables_from_runtime() { flush_admin_variables___runtime_to_database(admindb, true, true, false); } // TSDB + void init_tsdb_variables(); void load_tsdb_variables_to_runtime(); void save_tsdb_variables_from_runtime(); @@ -716,6 +717,7 @@ class ProxySQL_Admin { void stats___mysql_errors(bool reset); void stats___memory_metrics(); void stats___mysql_global(); + void stats___tsdb(); void stats___mysql_users(); void stats___pgsql_global(); diff --git a/lib/Admin_Bootstrap.cpp b/lib/Admin_Bootstrap.cpp index 1751eeacf..f0d514533 100644 --- a/lib/Admin_Bootstrap.cpp +++ b/lib/Admin_Bootstrap.cpp @@ -879,6 +879,7 @@ bool ProxySQL_Admin::init(const bootstrap_info_t& bootstrap_info) { insert_into_tables_defs(tables_defs_stats,"stats_mysql_errors", STATS_SQLITE_TABLE_MYSQL_ERRORS); insert_into_tables_defs(tables_defs_stats,"stats_mysql_errors_reset", STATS_SQLITE_TABLE_MYSQL_ERRORS_RESET); insert_into_tables_defs(tables_defs_stats,"stats_mysql_global", STATS_SQLITE_TABLE_MYSQL_GLOBAL); + insert_into_tables_defs(tables_defs_stats,"stats_tsdb", STATS_SQLITE_TABLE_TSDB); insert_into_tables_defs(tables_defs_stats,"stats_mysql_gtid_executed", STATS_SQLITE_TABLE_MYSQL_GTID_EXECUTED); insert_into_tables_defs(tables_defs_stats,"stats_memory_metrics", STATS_SQLITE_TABLE_MEMORY_METRICS); insert_into_tables_defs(tables_defs_stats,"stats_mysql_users", STATS_SQLITE_TABLE_MYSQL_USERS); diff --git a/lib/ProxySQL_Admin.cpp b/lib/ProxySQL_Admin.cpp index 0a2937da7..fa5647c6a 100644 --- a/lib/ProxySQL_Admin.cpp +++ b/lib/ProxySQL_Admin.cpp @@ -1610,7 +1610,7 @@ bool ProxySQL_Admin::GenericRefreshStatistics(const char *query_no_space, unsign if (stats_mysql_users) stats___mysql_users(); if (stats_tsdb) - GloProxyStats->stats___tsdb(); + stats___tsdb(); if (stats_pgsql_users) stats___pgsql_users(); if (stats_mysql_gtid_executed) @@ -3005,6 +3005,26 @@ void ProxySQL_Admin::init_genai_variables() { } #endif /* PROXYSQLGENAI */ +void ProxySQL_Admin::init_tsdb_variables() { + char **tsdb_vars = GloProxyStats->get_variables_list(); + char *a = (char *)"INSERT OR IGNORE INTO global_variables(variable_name, variable_value) VALUES(\"tsdb-%s\",\"%s\")"; + for (int i=0; tsdb_vars[i]; i++) { + char *val = GloProxyStats->get_variable(tsdb_vars[i]); + if (val) { + size_t l = strlen(a) + strlen(tsdb_vars[i]) + strlen(val) + 10; + char *query = (char *)malloc(l); + snprintf(query, l, a, tsdb_vars[i], val); + configdb->execute(query); // persistent + admindb->execute(query); // memory + free(query); + free(val); + } + free(tsdb_vars[i]); + } + free(tsdb_vars); + load_tsdb_variables_to_runtime(); +} + void ProxySQL_Admin::admin_shutdown() { int i; // do { usleep(50); } while (main_shutdown==0); diff --git a/lib/ProxySQL_Admin_Stats.cpp b/lib/ProxySQL_Admin_Stats.cpp index 341ef35c8..b3a9599c7 100644 --- a/lib/ProxySQL_Admin_Stats.cpp +++ b/lib/ProxySQL_Admin_Stats.cpp @@ -13,6 +13,7 @@ #include "MySQL_PreparedStatement.h" #include "PgSQL_PreparedStatement.h" #include "ProxySQL_Cluster.hpp" +#include "ProxySQL_Statistics.hpp" #include "MySQL_Query_Cache.h" #include "PgSQL_Query_Cache.h" #include "MySQL_Query_Processor.h" @@ -49,7 +50,7 @@ extern PgSQL_STMT_Manager* GloPgStmt; extern MySQL_Query_Processor* GloMyQPro; extern PgSQL_Query_Processor* GloPgQPro; extern ProxySQL_Cluster *GloProxyCluster; - +extern ProxySQL_Statistics *GloProxyStats; extern MySQL_Logger *GloMyLogger; void ProxySQL_Admin::p_update_metrics() { @@ -785,6 +786,23 @@ void ProxySQL_Admin::stats___pgsql_global() { statsdb->execute("COMMIT"); } +void ProxySQL_Admin::stats___tsdb() { + ProxySQL_Statistics::tsdb_status_t status = GloProxyStats->get_tsdb_status(); + char query[512]; + statsdb->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->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); +} + void ProxySQL_Admin::stats___mysql_processlist() { int rc; diff --git a/lib/ProxySQL_Statistics.cpp b/lib/ProxySQL_Statistics.cpp index 76eed7a64..6587bfb0c 100644 --- a/lib/ProxySQL_Statistics.cpp +++ b/lib/ProxySQL_Statistics.cpp @@ -235,7 +235,6 @@ 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); @@ -1862,20 +1861,3 @@ 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); -} diff --git a/src/main.cpp b/src/main.cpp index 78eac7d55..e917e2ef1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1674,6 +1674,8 @@ void ProxySQL_Main_init_phase3___start_all() { GloAdmin->init_ldap_variables(); } + GloAdmin->init_tsdb_variables(); + #ifdef PROXYSQLGENAI // GenAI if (GloVars.global.genai_enabled && GloGATH) {