tsdb: correctly implement SHOW TSDB commands and variable initialization

pull/5383/head
Rene Cannao 2 months ago
parent 6404d7b365
commit 2d51aeff64

@ -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);

@ -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();

@ -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);

@ -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);

@ -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;

@ -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);
}

@ -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) {

Loading…
Cancel
Save