32 #include "analysis_table.h"
33 #include "sysvar_holder.h"
35 #include <drizzled/error.h>
37 #include <libmemcached/memcached.h>
38 #include <libmemcached/server.h>
43 AnalysisTableTool::AnalysisTableTool() :
44 plugin::TableFunction(
"DATA_DICTIONARY",
"MEMCACHED_ANALYSIS")
46 add_field(
"SERVERS_ANALYZED", plugin::TableFunction::NUMBER);
47 add_field(
"AVERAGE_ITEM_SIZE", plugin::TableFunction::NUMBER);
48 add_field(
"NODE_WITH_MOST_MEM_CONSUMPTION");
49 add_field(
"USED_BYTES", plugin::TableFunction::NUMBER);
50 add_field(
"NODE_WITH_LEAST_FREE_SPACE");
51 add_field(
"FREE_BYTES", plugin::TableFunction::NUMBER);
52 add_field(
"NODE_WITH_LONGEST_UPTIME");
53 add_field(
"LONGEST_UPTIME", plugin::TableFunction::NUMBER);
54 add_field(
"POOL_WIDE_HIT_RATIO", plugin::TableFunction::NUMBER);
57 AnalysisTableTool::Generator::Generator(Field **arg) :
58 plugin::TableFunction::Generator(arg)
63 bool AnalysisTableTool::Generator::populate()
72 assert(servers_var != NULL);
74 const string servers_string(static_cast<char *>(servers_var.value_ptr(NULL, 0)));
76 if (servers_string.empty())
78 my_printf_error(ER_UNKNOWN_ERROR, _(
"No value in MEMCACHED_STATS_SERVERS variable."), MYF(0));
83 memcached_st *serv= memcached_create(NULL);
84 memcached_server_st *tmp_serv= memcached_servers_parse(servers_string.c_str());
85 memcached_server_push(serv, tmp_serv);
86 memcached_server_list_free(tmp_serv);
87 memcached_stat_st *stats= memcached_stat(serv, NULL, &rc);
88 memcached_server_st *servers= memcached_server_list(serv);
90 uint32_t server_count= memcached_server_count(serv);
94 memcached_analysis_st *report= memcached_analyze(serv, stats, &rc);
96 push(static_cast<uint64_t>(server_count));
97 push(static_cast<uint64_t>(report->average_item_size));
98 push(memcached_server_name(serv, servers[report->most_consumed_server]));
99 push(report->most_used_bytes);
100 push(memcached_server_name(serv, servers[report->least_free_server]));
101 push(report->least_remaining_bytes);
102 push(memcached_server_name(serv, servers[report->oldest_server]));
103 push(static_cast<uint64_t>(report->longest_uptime));
104 push(static_cast<int64_t>(report->pool_hit_ratio));
108 memcached_stat_free(serv, stats);
109 memcached_free(serv);
sys_var * find_sys_var(const std::string &name)