23 #include <drizzled/item.h>
25 #include <drizzled/session.h>
26 #include <drizzled/session/times.h>
27 #include <drizzled/plugin.h>
28 #include "query_log.h"
31 using namespace drizzled;
32 using namespace plugin;
35 drizzled::plugin::EventObserver(
"file_query_log"),
36 sysvar_enabled(enabled),
37 _logger_file(logger_file)
41 void QueryLog::registerSessionEventsDo(
Session &, EventObserverList &observers)
43 registerEvent(observers, AFTER_STATEMENT);
46 bool QueryLog::observeEventDo(EventData &data)
49 if (not sysvar_enabled
50 || not sysvar_file_enabled)
55 afterStatement((AfterStatementEventData &)data);
58 fprintf(stderr,
"query_log: Unexpected event '%s'\n",
59 EventObserver::eventName(data.event));
67 Session *session= &data.session;
71 if (session->
command != COM_QUERY)
75 uint64_t t_mark= session->times.getCurrentTimestamp(
false);
80 _event.execution_time= session->times.getElapsedTime();
81 _event.lock_time= (t_mark - session->times.utime_after_lock);
82 _event.session_time= (t_mark - session->times.getConnectMicroseconds());
89 if ( _event.execution_time < sysvar_threshold_execution_time
90 || _event.lock_time < sysvar_threshold_lock_time
91 || _event.session_time < sysvar_threshold_session_time)
99 _event.execution_time= _event.execution_time * 0.000001;
100 _event.lock_time= _event.lock_time * 0.000001;
101 _event.session_time= _event.session_time * 0.000001;
110 _event.tmp_tables= session->tmp_table;
111 _event.warnings= session->total_warn_count;
113 if ( _event.rows_examined < sysvar_threshold_rows_examined
114 || _event.rows_sent < sysvar_threshold_rows_sent
115 || _event.tmp_tables < sysvar_threshold_tmp_tables
116 || _event.warnings < sysvar_threshold_warnings)
122 _event.error= session->
is_error() ?
"true" :
"false";
127 _event.schema= session->schema()->c_str();
132 _event.query= session->getQueryString()->c_str();
138 boost::posix_time::ptime t_start= session->times.start_timer();
139 _event.ts= boost::posix_time::to_iso_extended_string(t_start);
142 _logger_file->logEvent((
const event_t *)&_event);