2
* Copyright (c) 2009, Padraig O'Sullivan
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
8
* * Redistributions of source code must retain the above copyright notice,
9
* this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above copyright notice,
11
* this list of conditions and the following disclaimer in the documentation
12
* and/or other materials provided with the distribution.
13
* * Neither the name of Padraig O'Sullivan nor the names of its contributors
14
* may be used to endorse or promote products derived from this software
15
* without specific prior written permission.
17
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
27
* THE POSSIBILITY OF SUCH DAMAGE.
30
#include "drizzled/server_includes.h"
31
#include "drizzled/show.h"
32
#include "drizzled/gettext.h"
33
#include "drizzled/plugin/info_schema_table.h"
35
#include "stats_table.h"
36
#include "analysis_table.h"
37
#include "sysvar_holder.h"
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;
64
* System variable related variables.
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;
169
* Initialize the memcached stats plugin.
171
* @param[in] registry the drizzled::plugin::Registry singleton
172
* @return false on success; true on failure.
174
static int init(plugin::Registry ®istry)
186
if (initMemcachedTables())
191
SysvarHolder &sysvar_holder= SysvarHolder::singleton();
192
sysvar_holder.setServersString(sysvar_memcached_servers);
194
/* we are good to go */
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)
270
"Padraig O'Sullivan",
271
N_("Memcached Stats as I_S tables"),
273
init, /* Plugin Init */
274
deinit, /* Plugin Deinit */
275
NULL, /* status variables */
276
system_variables, /* system variables */
277
NULL /* config options */
279
drizzle_declare_plugin_end;