91
91
#include "logging_stats.h"
92
92
#include "status_tool.h"
93
93
#include "stats_schema.h"
94
#include <boost/program_options.hpp>
95
#include <drizzled/module/option_map.h>
96
95
#include <drizzled/session.h>
98
namespace po= boost::program_options;
99
97
using namespace drizzled;
100
98
using namespace plugin;
101
99
using namespace std;
103
101
static bool sysvar_logging_stats_enabled= true;
105
typedef constrained_check<uint32_t, 50000, 10> scoreboard_size_constraint;
106
static scoreboard_size_constraint sysvar_logging_stats_scoreboard_size;
108
typedef constrained_check<uint32_t, 50000, 100> max_user_count_constraint;
109
static max_user_count_constraint sysvar_logging_stats_max_user_count;
111
typedef constrained_check<uint32_t, 500, 5> bucket_count_constraint;
112
static bucket_count_constraint sysvar_logging_stats_bucket_count;
103
static uint32_t sysvar_logging_stats_scoreboard_size= 2000;
105
static uint32_t sysvar_logging_stats_max_user_count= 500;
107
static uint32_t sysvar_logging_stats_bucket_count= 10;
114
109
LoggingStats::LoggingStats(string name_arg) : Logging(name_arg)
140
135
scoreboard_slot->getStatusVars()->logStatusVar(session);
143
bool LoggingStats::resetGlobalScoreboard()
145
cumulative_stats->getGlobalStatusVars()->reset();
146
cumulative_stats->getGlobalStats()->getUserCommands()->reset();
148
ScoreBoardVectors *vector_of_scoreboard_vectors=
149
current_scoreboard->getVectorOfScoreboardVectors();
151
ScoreBoardVectors::iterator v_of_scoreboard_v_begin_it= vector_of_scoreboard_vectors->begin();
153
ScoreBoardVectors::iterator v_of_scoreboard_v_end_it= vector_of_scoreboard_vectors->end();
155
for (; v_of_scoreboard_v_begin_it != v_of_scoreboard_v_end_it; ++v_of_scoreboard_v_begin_it)
157
std::vector<ScoreboardSlot* > *scoreboard_vector= *v_of_scoreboard_v_begin_it;
159
std::vector<ScoreboardSlot* >::iterator scoreboard_vector_it= scoreboard_vector->begin();
160
std::vector<ScoreboardSlot* >::iterator scoreboard_vector_end= scoreboard_vector->end();
161
for (; scoreboard_vector_it != scoreboard_vector_end; ++scoreboard_vector_it)
163
ScoreboardSlot *scoreboard_slot= *scoreboard_vector_it;
164
scoreboard_slot->getStatusVars()->reset();
165
scoreboard_slot->getUserCommands()->reset();
172
138
bool LoggingStats::post(Session *session)
174
140
if (! isEnabled() || (session->getSessionId() == 0))
210
176
the scoreboard would be filled up quickly with invalid users.
212
178
scoreboard_slot= new ScoreboardSlot();
213
scoreboard_slot->setUser(session->user()->username());
214
scoreboard_slot->setIp(session->user()->address());
179
scoreboard_slot->setUser(session->getSecurityContext().getUser());
180
scoreboard_slot->setIp(session->getSecurityContext().getIp());
217
183
scoreboard_slot->getStatusVars()->logStatusVar(session);
218
scoreboard_slot->getStatusVars()->getStatusVarCounters()->connection_time= session->getConnectSeconds();
184
scoreboard_slot->getStatusVars()->getStatusVarCounters()->connection_time= time(NULL) - session->start_time;
220
186
cumulative_stats->logUserStats(scoreboard_slot, isInScoreboard);
221
187
cumulative_stats->logGlobalStats(scoreboard_slot);
252
218
static CumulativeUserStatsTool *cumulative_user_stats_tool= NULL;
254
static ScoreboardStatsTool *scoreboard_stats_tool= NULL;
256
static void enable(Session *, sql_var_t)
220
static void enable(Session *,
258
225
if (logging_stats)
260
if (sysvar_logging_stats_enabled)
227
if (*(bool *)save != false)
262
229
logging_stats->enable();
230
*(bool *) var_ptr= (bool) true;
266
234
logging_stats->disable();
235
*(bool *) var_ptr= (bool) false;
322
scoreboard_stats_tool= new(nothrow)ScoreboardStatsTool(logging_stats);
324
if (! scoreboard_stats_tool)
332
static int init(drizzled::module::Context &context)
294
static int init(module::Context &context)
334
const module::option_map &vm= context.getOptions();
336
sysvar_logging_stats_enabled= (vm.count("disable")) ? false : true;
338
296
logging_stats= new LoggingStats("logging_stats");
350
308
context.add(session_status_tool);
351
309
context.add(global_status_tool);
352
310
context.add(cumulative_user_stats_tool);
353
context.add(scoreboard_stats_tool);
355
312
if (sysvar_logging_stats_enabled)
357
314
logging_stats->enable();
360
context.registerVariable(new sys_var_constrained_value_readonly<uint32_t>("max_user_count", sysvar_logging_stats_max_user_count));
361
context.registerVariable(new sys_var_constrained_value_readonly<uint32_t>("bucket_count", sysvar_logging_stats_bucket_count));
362
context.registerVariable(new sys_var_constrained_value_readonly<uint32_t>("scoreboard_size", sysvar_logging_stats_scoreboard_size));
363
context.registerVariable(new sys_var_bool_ptr("enable", &sysvar_logging_stats_enabled, enable));
369
static void init_options(drizzled::module::option_context &context)
371
context("max-user-count",
372
po::value<max_user_count_constraint>(&sysvar_logging_stats_max_user_count)->default_value(500),
373
_("Max number of users that will be logged"));
374
context("bucket-count",
375
po::value<bucket_count_constraint>(&sysvar_logging_stats_bucket_count)->default_value(10),
376
_("Max number of range locks to use for Scoreboard"));
377
context("scoreboard-size",
378
po::value<scoreboard_size_constraint>(&sysvar_logging_stats_scoreboard_size)->default_value(2000),
379
_("Max number of concurrent sessions that will be logged"));
380
context("disable", _("Enable Logging Statistics Collection"));
320
static DRIZZLE_SYSVAR_UINT(max_user_count,
321
sysvar_logging_stats_max_user_count,
323
N_("Max number of users that will be logged"),
324
NULL, /* check func */
325
NULL, /* update func */
331
static DRIZZLE_SYSVAR_UINT(bucket_count,
332
sysvar_logging_stats_bucket_count,
334
N_("Max number of vector buckets to construct for logging"),
335
NULL, /* check func */
336
NULL, /* update func */
342
static DRIZZLE_SYSVAR_UINT(scoreboard_size,
343
sysvar_logging_stats_scoreboard_size,
345
N_("Max number of concurrent sessions that will be logged"),
346
NULL, /* check func */
347
NULL, /* update func */
353
static DRIZZLE_SYSVAR_BOOL(enable,
354
sysvar_logging_stats_enabled,
356
N_("Enable Logging Statistics Collection"),
357
NULL, /* check func */
358
enable, /* update func */
361
static drizzle_sys_var* system_var[]= {
362
DRIZZLE_SYSVAR(max_user_count),
363
DRIZZLE_SYSVAR(bucket_count),
364
DRIZZLE_SYSVAR(scoreboard_size),
365
DRIZZLE_SYSVAR(enable),
383
369
DRIZZLE_DECLARE_PLUGIN