summaryrefslogtreecommitdiff
path: root/src/pg_valve_maat.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/pg_valve_maat.cpp')
-rw-r--r--src/pg_valve_maat.cpp138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/pg_valve_maat.cpp b/src/pg_valve_maat.cpp
new file mode 100644
index 0000000..31039d4
--- /dev/null
+++ b/src/pg_valve_maat.cpp
@@ -0,0 +1,138 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <errno.h>
+#include <assert.h>
+
+#include "pg_valve_maat.h"
+
+extern pgvavle_global_info_t g_pgvalve_info;
+
+//�޿���������ȫ���¼�
+
+//�п���������������ȫ���¼�
+
+int maat_start_config_table(configure_table_t *table, MaatService *maat_service)
+{
+ int ret;
+ maat_callback_data_t *maat_data;
+ Maat_feather_t feather = maat_service->get_maat_feather();
+
+ table->table_id_maat = Maat_table_register(feather, table->table_name);
+ if(table->table_id_maat < 0)
+ {
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime, RLOG_LV_FATAL, MODULE_NAME, "Maat_table_register table %s failed.", table->table_name);
+ assert(0);
+ return -1;
+ }
+
+ maat_data = (maat_callback_data_t *)malloc(sizeof(maat_callback_data_t));
+ maat_data->table = table;
+ maat_data->update_type = 0;
+ maat_data->maat_service = maat_service;
+ ret = Maat_table_callback_register(feather, (short)table->table_id_maat, table->maat_start_cb, table->maat_update_cb, table->maat_finish_cb, maat_data);
+ if(ret != 1)
+ {
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime, RLOG_LV_FATAL, MODULE_NAME, "Maat_table_callback_register table %s failed.", table->table_name);
+ assert(0);
+ return -2;
+ }
+ return 0;
+}
+
+long long MaatService::read_last_version(void)
+{
+ if(access(table_relate->version_file, R_OK))
+ {
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime,RLOG_LV_INFO, MODULE_NAME, "read_last_version %s failed: %s, using default version 0.", table_relate->version_file, strerror(errno));
+ return 0;
+ }
+ FILE *fp = fopen(table_relate->version_file, "r");
+ if(fp==NULL)
+ {
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime,RLOG_LV_FATAL, MODULE_NAME, "read_last_version open %s failed: %s.", table_relate->version_file, strerror(errno));
+ assert(0);
+ return -1;
+ }
+ if(fscanf(fp, "%llu\n", &version) != 1)
+ {
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime,RLOG_LV_FATAL, MODULE_NAME, "read_last_version fscanf %s failed: %s.", table_relate->version_file, strerror(errno));
+ fclose(fp);
+ assert(0);
+ return -1;
+ }
+ else
+ {
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime,RLOG_LV_FATAL, MODULE_NAME, "read_last_version %s success, version: %u.", table_relate->version_file, version);
+ }
+ fclose(fp);
+ return version;
+}
+
+int MaatService::store_latest_version(long long ver)
+{
+ char verbuf[48];
+
+ version = ver;
+ FILE *fp = fopen(table_relate->version_file, "w");
+ if(fp==NULL)
+ {
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime,RLOG_LV_FATAL, MODULE_NAME, "Open version file %s failed: %s.", table_relate->version_file, strerror(errno));
+ return -1;
+ }
+
+ sprintf(verbuf, "%llu\n", version);
+ if(fwrite(verbuf, 1, strlen(verbuf), fp) != strlen(verbuf))
+ {
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime,RLOG_LV_FATAL, MODULE_NAME, "fwrite version file %s failed: %s, version: %u.", table_relate->version_file, strerror(errno), version);
+ fclose(fp);
+ return -1;
+ }
+ fclose(fp);
+
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime,RLOG_LV_FATAL, MODULE_NAME, "store_latest_version %s success, version: %u.", table_relate->version_file, version);
+ return 0;
+}
+
+int MaatService::maat_feather_start(void)
+{
+ char tmp_buffer[1024];
+ int ret;
+
+ feather = Maat_feather(1, g_pgvalve_info.maat_table_info, g_pgvalve_info.log_runtime);
+ if(feather == NULL)
+ {
+ return -1;
+ }
+
+ snprintf(tmp_buffer, 1024, "%s/maat_stat_%s.log", g_pgvalve_info.root_log_dir, table_relate->instance_name);
+ ret = Maat_set_feather_opt(feather, MAAT_OPT_STAT_FILE_PATH, tmp_buffer, strlen(tmp_buffer)+1);
+ ret |= Maat_set_feather_opt(feather, MAAT_OPT_STAT_ON, NULL, 0);
+ ret |= Maat_set_feather_opt(feather, MAAT_OPT_PERF_ON, NULL, 0);
+
+ ret |= Maat_set_feather_opt(feather, MAAT_OPT_INSTANCE_NAME, table_relate->instance_name, strlen(table_relate->instance_name)+1);
+ if(g_pgvalve_info.maat_source == MAAT_CONFIG_FILE)
+ {
+ ret |= Maat_set_feather_opt(feather, MAAT_OPT_FULL_CFG_DIR, table_relate->full_dir, strlen(table_relate->full_dir)+1);
+ ret |= Maat_set_feather_opt(feather, MAAT_OPT_INC_CFG_DIR, table_relate->incr_dir, strlen(table_relate->incr_dir)+1);
+ }
+ else
+ {
+ ret |= Maat_set_feather_opt(feather, MAAT_OPT_REDIS_IP, table_relate->redisip, strlen(table_relate->redisip)+1);
+ ret |= Maat_set_feather_opt(feather, MAAT_OPT_REDIS_PORT, &table_relate->redisport, sizeof(table_relate->redisport));
+ ret |= Maat_set_feather_opt(feather, MAAT_OPT_REDIS_INDEX, &table_relate->redis_index, sizeof(table_relate->redis_index));
+ }
+
+ if(ret || Maat_initiate_feather(feather) < 0)
+ {
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime, RLOG_LV_FATAL, MODULE_NAME, "Maat_initiate_feather instance %s failed.", table_relate->instance_name);
+ return -2;
+ }
+
+ MESA_HANDLE_RUNTIME_LOGV2(g_pgvalve_info.log_runtime, RLOG_LV_FATAL, MODULE_NAME, "maat_feather_start instance %s success.", table_relate->instance_name);
+ return 0;
+}
+