42
namespace po=boost::program_options;
44
namespace drizzle_plugin
49
* DATA_DICTIONARY tables.
51
static AnalysisTableTool *analysis_table_tool;
53
static StatsTableTool *stats_table_tool;
43
using namespace drizzled;
46
* Vectors of columns for I_S tables.
48
static vector<const plugin::ColumnInfo *> memcached_stats_columns;
49
static vector<const plugin::ColumnInfo *> memcached_analysis_columns;
52
* Methods for I_S tables.
54
static plugin::InfoSchemaMethods *memcached_stats_methods= NULL;
55
static plugin::InfoSchemaMethods *memcached_analysis_methods= NULL;
60
static plugin::InfoSchemaTable *memcached_stats_table= NULL;
61
static plugin::InfoSchemaTable *memcached_analysis_table= NULL;
56
64
* System variable related variables.
58
static std::string sysvar_memcached_servers;
66
static char *sysvar_memcached_servers= NULL;
69
* Populate the vectors of columns for each I_S table.
71
* @return false on success; true on failure.
73
static bool initColumns()
75
if (createMemcachedStatsColumns(memcached_stats_columns))
80
if (createMemcachedAnalysisColumns(memcached_analysis_columns))
89
* Clear the vectors of columns for each I_S table.
91
static void cleanupColumns()
93
clearMemcachedColumns(memcached_stats_columns);
94
clearMemcachedColumns(memcached_analysis_columns);
98
* Initialize the methods for each I_S table.
100
* @return false on success; true on failure
102
static bool initMethods()
104
memcached_stats_methods= new(std::nothrow)
105
MemcachedStatsISMethods();
106
if (! memcached_stats_methods)
111
memcached_analysis_methods= new(std::nothrow)
112
MemcachedAnalysisISMethods();
113
if (! memcached_analysis_methods)
122
* Delete memory allocated for the I_S table methods.
124
static void cleanupMethods()
126
delete memcached_stats_methods;
127
delete memcached_analysis_methods;
131
* Initialize the I_S tables related to memcached.
133
* @return false on success; true on failure
135
static bool initMemcachedTables()
137
memcached_stats_table= new(std::nothrow) plugin::InfoSchemaTable("MEMCACHED_STATS",
138
memcached_stats_columns,
139
-1, -1, false, false, 0,
140
memcached_stats_methods);
141
if (! memcached_stats_table)
146
memcached_analysis_table=
147
new(std::nothrow) plugin::InfoSchemaTable("MEMCACHED_ANALYSIS",
148
memcached_analysis_columns,
149
-1, -1, false, false, 0,
150
memcached_analysis_methods);
151
if (! memcached_analysis_table)
160
* Delete memory allocated for the I_S tables.
162
static void cleanupMemcachedTables()
164
delete memcached_stats_table;
165
delete memcached_analysis_table;
61
169
* Initialize the memcached stats plugin.
63
171
* @param[in] registry the drizzled::plugin::Registry singleton
64
172
* @return false on success; true on failure.
66
static int init(drizzled::module::Context &context)
174
static int init(plugin::Registry ®istry)
68
const drizzled::module::option_map &vm= context.getOptions();
186
if (initMemcachedTables())
191
SysvarHolder &sysvar_holder= SysvarHolder::singleton();
192
sysvar_holder.setServersString(sysvar_memcached_servers);
70
194
/* we are good to go */
71
stats_table_tool= new StatsTableTool;
72
context.add(stats_table_tool);
74
analysis_table_tool= new AnalysisTableTool;
75
context.add(analysis_table_tool);
77
context.registerVariable(new sys_var_std_string("servers",
78
sysvar_memcached_servers));
83
static void init_options(drizzled::module::option_context &context)
86
po::value<std::string>()->default_value(""),
87
_("List of memcached servers."));
90
} /* namespace drizzle_plugin */
92
DRIZZLE_DECLARE_PLUGIN
195
registry.add(memcached_stats_table);
196
registry.add(memcached_analysis_table);
202
* Clean up the memcached stats plugin.
204
* @param[in] registry the drizzled::plugin::Registry singleton
205
* @return false on success; true on failure
207
static int deinit(plugin::Registry ®istry)
209
registry.remove(memcached_stats_table);
210
registry.remove(memcached_analysis_table);
214
cleanupMemcachedTables();
219
static int check_memc_servers(Session *,
220
struct st_mysql_sys_var *,
222
struct st_mysql_value *value)
224
char buff[STRING_BUFFER_USUAL_SIZE];
225
int len= sizeof(buff);
226
const char *input= value->val_str(value, buff, &len);
230
SysvarHolder &sysvar_holder= SysvarHolder::singleton();
231
sysvar_holder.setServersStringVar(input);
232
*(bool *) save= (bool) true;
236
*(bool *) save= (bool) false;
240
static void set_memc_servers(Session *,
241
struct st_mysql_sys_var *,
245
if (*(bool *) save != false)
247
SysvarHolder &sysvar_holder= SysvarHolder::singleton();
248
sysvar_holder.updateServersSysvar((const char **) var_ptr);
252
static DRIZZLE_SYSVAR_STR(servers,
253
sysvar_memcached_servers,
255
N_("List of memcached servers."),
256
check_memc_servers, /* check func */
257
set_memc_servers, /* update func */
258
""); /* default value */
260
static struct st_mysql_sys_var *system_variables[]=
262
DRIZZLE_SYSVAR(servers),
266
drizzle_declare_plugin(memcached_stats)
95
268
"memcached_stats",
97
270
"Padraig O'Sullivan",
98
271
N_("Memcached Stats as I_S tables"),
99
272
PLUGIN_LICENSE_BSD,
100
drizzle_plugin::init, /* Plugin Init */
102
drizzle_plugin::init_options /* config options */
273
init, /* Plugin Init */
274
deinit, /* Plugin Deinit */
275
NULL, /* status variables */
276
system_variables, /* system variables */
277
NULL /* config options */
104
DRIZZLE_DECLARE_PLUGIN_END;
279
drizzle_declare_plugin_end;