103
103
static bool sysvar_logging_stats_enabled= true;
105
static uint32_t sysvar_logging_stats_scoreboard_size= 2000;
107
static uint32_t sysvar_logging_stats_max_user_count= 500;
109
static uint32_t sysvar_logging_stats_bucket_count= 10;
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;
111
114
LoggingStats::LoggingStats(string name_arg) : Logging(name_arg)
152
155
for (; v_of_scoreboard_v_begin_it != v_of_scoreboard_v_end_it; ++v_of_scoreboard_v_begin_it)
154
vector<ScoreboardSlot* > *scoreboard_vector= *v_of_scoreboard_v_begin_it;
157
std::vector<ScoreboardSlot* > *scoreboard_vector= *v_of_scoreboard_v_begin_it;
156
vector<ScoreboardSlot* >::iterator scoreboard_vector_it= scoreboard_vector->begin();
157
vector<ScoreboardSlot* >::iterator scoreboard_vector_end= scoreboard_vector->end();
159
std::vector<ScoreboardSlot* >::iterator scoreboard_vector_it= scoreboard_vector->begin();
160
std::vector<ScoreboardSlot* >::iterator scoreboard_vector_end= scoreboard_vector->end();
158
161
for (; scoreboard_vector_it != scoreboard_vector_end; ++scoreboard_vector_it)
160
163
ScoreboardSlot *scoreboard_slot= *scoreboard_vector_it;
207
210
the scoreboard would be filled up quickly with invalid users.
209
212
scoreboard_slot= new ScoreboardSlot();
210
scoreboard_slot->setUser(session->getSecurityContext().getUser());
211
scoreboard_slot->setIp(session->getSecurityContext().getIp());
213
scoreboard_slot->setUser(session->user()->username());
214
scoreboard_slot->setIp(session->user()->address());
214
217
scoreboard_slot->getStatusVars()->logStatusVar(session);
215
scoreboard_slot->getStatusVars()->getStatusVarCounters()->connection_time= time(NULL) - session->start_time;
218
scoreboard_slot->getStatusVars()->getStatusVarCounters()->connection_time= session->getConnectSeconds();
217
220
cumulative_stats->logUserStats(scoreboard_slot, isInScoreboard);
218
221
cumulative_stats->logGlobalStats(scoreboard_slot);
251
254
static ScoreboardStatsTool *scoreboard_stats_tool= NULL;
253
static void enable(Session *,
256
static void enable(Session *, sql_var_t)
258
258
if (logging_stats)
260
if (*(bool *)save != false)
260
if (sysvar_logging_stats_enabled)
262
262
logging_stats->enable();
263
*(bool *) var_ptr= (bool) true;
267
266
logging_stats->disable();
268
*(bool *) var_ptr= (bool) false;
338
336
sysvar_logging_stats_enabled= (vm.count("disable")) ? false : true;
340
if (vm.count("max-user-count"))
342
if (sysvar_logging_stats_max_user_count < 100 || sysvar_logging_stats_max_user_count > 50000)
344
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for max-user-count\n"));
348
if (vm.count("bucket-count"))
350
if (sysvar_logging_stats_bucket_count < 5 || sysvar_logging_stats_bucket_count > 500)
352
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for bucket-count\n"));
357
if (vm.count("scoreboard-size"))
359
if (sysvar_logging_stats_scoreboard_size < 10 || sysvar_logging_stats_scoreboard_size > 50000)
361
errmsg_printf(ERRMSG_LVL_ERROR, _("Invalid value for scoreboard-size\n"));
365
sysvar_logging_stats_scoreboard_size= vm["scoreboard-size"].as<uint32_t>();
368
338
logging_stats= new LoggingStats("logging_stats");
387
357
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));
393
static DRIZZLE_SYSVAR_UINT(max_user_count,
394
sysvar_logging_stats_max_user_count,
396
N_("Max number of users that will be logged"),
397
NULL, /* check func */
398
NULL, /* update func */
404
static DRIZZLE_SYSVAR_UINT(bucket_count,
405
sysvar_logging_stats_bucket_count,
407
N_("Max number of range locks to use for Scoreboard"),
408
NULL, /* check func */
409
NULL, /* update func */
415
static DRIZZLE_SYSVAR_UINT(scoreboard_size,
416
sysvar_logging_stats_scoreboard_size,
418
N_("Max number of concurrent sessions that will be logged"),
419
NULL, /* check func */
420
NULL, /* update func */
426
static DRIZZLE_SYSVAR_BOOL(enable,
427
sysvar_logging_stats_enabled,
429
N_("Enable Logging Statistics Collection"),
430
NULL, /* check func */
431
enable, /* update func */
434
369
static void init_options(drizzled::module::option_context &context)
436
371
context("max-user-count",
437
po::value<uint32_t>(&sysvar_logging_stats_max_user_count)->default_value(500),
438
N_("Max number of users that will be logged"));
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"));
439
374
context("bucket-count",
440
po::value<uint32_t>(&sysvar_logging_stats_bucket_count)->default_value(10),
441
N_("Max number of range locks to use for Scoreboard"));
375
po::value<bucket_count_constraint>(&sysvar_logging_stats_bucket_count)->default_value(10),
376
_("Max number of range locks to use for Scoreboard"));
442
377
context("scoreboard-size",
443
po::value<uint32_t>(&sysvar_logging_stats_scoreboard_size)->default_value(2000),
444
N_("Max number of concurrent sessions that will be logged"));
445
context("disable", N_("Enable Logging Statistics Collection"));
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"));
448
static drizzle_sys_var* system_var[]= {
449
DRIZZLE_SYSVAR(max_user_count),
450
DRIZZLE_SYSVAR(bucket_count),
451
DRIZZLE_SYSVAR(scoreboard_size),
452
DRIZZLE_SYSVAR(enable),
456
383
DRIZZLE_DECLARE_PLUGIN
458
385
DRIZZLE_VERSION_ID,