~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/memcached_stats/memcached_stats.cc

  • Committer: Padraig O'Sullivan
  • Date: 2009-09-29 19:34:58 UTC
  • mto: This revision was merged to the branch mainline in revision 1167.
  • Revision ID: osullivan.padraig@gmail.com-20090929193458-zs97say0t1t85b4h
Created plugin which simply adds I_S tables for querying memcached stats.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  Copyright (C) 2009 Sun Microsystems
 
3
 *
 
4
 *  This program is free software; you can redistribute it and/or modify
 
5
 *  it under the terms of the GNU General Public License as published by
 
6
 *  the Free Software Foundation; either version 2 of the License, or
 
7
 *  (at your option) any later version.
 
8
 *
 
9
 *  This program is distributed in the hope that it will be useful,
 
10
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
 *  GNU General Public License for more details.
 
13
 *
 
14
 *  You should have received a copy of the GNU General Public License
 
15
 *  along with this program; if not, write to the Free Software
 
16
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
17
 */
 
18
 
 
19
#include "drizzled/server_includes.h"
 
20
#include "drizzled/show.h"
 
21
#include "drizzled/gettext.h"
 
22
#include "drizzled/info_schema.h"
 
23
 
 
24
#include "stats_table.h"
 
25
 
 
26
#include <string>
 
27
#include <map>
 
28
 
 
29
using namespace std;
 
30
using namespace drizzled;
 
31
 
 
32
/*
 
33
 * Vectors of columns for I_S tables.
 
34
 */
 
35
static vector<const ColumnInfo *> memcached_stats_columns;
 
36
 
 
37
/*
 
38
 * Methods for I_S tables.
 
39
 */
 
40
static InfoSchemaMethods *memcached_stats_methods= NULL;
 
41
 
 
42
/*
 
43
 * I_S tables.
 
44
 */
 
45
static InfoSchemaTable *memcached_stats_table= NULL;
 
46
 
 
47
/*
 
48
 * System variable related variables.
 
49
 */
 
50
static char *sysvar_memcached_servers= NULL;
 
51
static const char DEFAULT_SERVERS_STRING[]= "localhost:11211";
 
52
 
 
53
/**
 
54
 * Populate the vectors of columns for each I_S table.
 
55
 *
 
56
 * @return false on success; true on failure.
 
57
 */
 
58
static bool initColumns()
 
59
{
 
60
  if (createMemcachedStatsColumns(memcached_stats_columns))
 
61
  {
 
62
    return true;
 
63
  }
 
64
 
 
65
  return false;
 
66
}
 
67
 
 
68
/**
 
69
 * Clear the vectors of columns for each I_S table.
 
70
 */
 
71
static void cleanupColumns()
 
72
{
 
73
  clearMemcachedColumns(memcached_stats_columns);
 
74
}
 
75
 
 
76
/**
 
77
 * Initialize the methods for each I_S table.
 
78
 *
 
79
 * @return false on success; true on failure
 
80
 */
 
81
static bool initMethods()
 
82
{
 
83
  memcached_stats_methods= new(std::nothrow) 
 
84
    MemcachedStatsISMethods(sysvar_memcached_servers);
 
85
  if (! memcached_stats_methods)
 
86
  {
 
87
    return true;
 
88
  }
 
89
 
 
90
  return false;
 
91
}
 
92
 
 
93
/**
 
94
 * Delete memory allocated for the I_S table methods.
 
95
 */
 
96
static void cleanupMethods()
 
97
{
 
98
  delete memcached_stats_methods;
 
99
}
 
100
 
 
101
/**
 
102
 * Initialize the I_S tables related to memcached.
 
103
 *
 
104
 * @return false on success; true on failure
 
105
 */
 
106
static bool initMemcachedTables()
 
107
{
 
108
  memcached_stats_table= new(std::nothrow) InfoSchemaTable("MEMCACHED_STATS",
 
109
                                                           memcached_stats_columns,
 
110
                                                           -1, -1, false, false, 0,
 
111
                                                           memcached_stats_methods);
 
112
  if (! memcached_stats_table)
 
113
  {
 
114
    return true;
 
115
  }
 
116
 
 
117
  return false;
 
118
}
 
119
 
 
120
/**
 
121
 * Delete memory allocated for the I_S tables.
 
122
 */
 
123
static void cleanupMemcachedTables()
 
124
{
 
125
  delete memcached_stats_table;
 
126
}
 
127
 
 
128
/**
 
129
 * Initialize the memcached stats plugin.
 
130
 *
 
131
 * @param[in] registry the drizzled::plugin::Registry singleton
 
132
 * @return false on success; true on failure.
 
133
 */
 
134
static int init(plugin::Registry &registry)
 
135
{
 
136
  if (initMethods())
 
137
  {
 
138
    return true;
 
139
  }
 
140
 
 
141
  if (initColumns())
 
142
  {
 
143
    return true;
 
144
  }
 
145
 
 
146
  if (initMemcachedTables())
 
147
  {
 
148
    return true;
 
149
  }
 
150
 
 
151
  /* we are good to go */
 
152
  registry.add(memcached_stats_table);
 
153
 
 
154
  return false;
 
155
}
 
156
 
 
157
/**
 
158
 * Clean up the memcached stats plugin.
 
159
 *
 
160
 * @param[in] registry the drizzled::plugin::Registry singleton
 
161
 * @return false on success; true on failure
 
162
 */
 
163
static int deinit(plugin::Registry &registry)
 
164
{
 
165
  registry.remove(memcached_stats_table);
 
166
 
 
167
  cleanupMethods();
 
168
  cleanupColumns();
 
169
  cleanupMemcachedTables();
 
170
 
 
171
  return false;
 
172
}
 
173
 
 
174
static DRIZZLE_SYSVAR_STR(servers,
 
175
                          sysvar_memcached_servers,
 
176
                          PLUGIN_VAR_OPCMDARG,
 
177
                          N_("List of memcached servers."),
 
178
                          NULL, /* check func */
 
179
                          NULL, /* update func */
 
180
                          DEFAULT_SERVERS_STRING);
 
181
 
 
182
static struct st_mysql_sys_var *system_variables[]=
 
183
{
 
184
  DRIZZLE_SYSVAR(servers),
 
185
  NULL
 
186
};
 
187
 
 
188
drizzle_declare_plugin(memcached_stats)
 
189
{
 
190
  "memcached_stats",
 
191
  "0.1",
 
192
  "Padraig O'Sullivan",
 
193
  N_("Memcached Stats as I_S tables"),
 
194
  PLUGIN_LICENSE_GPL,
 
195
  init,   /* Plugin Init      */
 
196
  deinit, /* Plugin Deinit    */
 
197
  NULL,   /* status variables */
 
198
  system_variables, /* system variables */
 
199
  NULL    /* config options   */
 
200
}
 
201
drizzle_declare_plugin_end;