New feature: write header message at start of logging (both file and socket) or file flush. Includes configuration parameter: audit_header_msg to control if header message enabled/disabled (default enabled).
parent
a935dc105a
commit
d3eddd6cf7
|
@ -12,6 +12,7 @@
|
|||
#include <yajl/yajl_gen.h>
|
||||
|
||||
#define AUDIT_LOG_PREFIX "Audit Plugin:"
|
||||
#define AUDIT_PROTOCOL_VERSION "1.0"
|
||||
|
||||
class THD;
|
||||
|
||||
|
@ -267,13 +268,20 @@ public:
|
|||
|
||||
static const char * DEF_MSG_DELIMITER;
|
||||
|
||||
Audit_json_formatter(): m_msg_delimiter(NULL)
|
||||
Audit_json_formatter(): m_msg_delimiter(NULL), m_write_start_msg(true)
|
||||
{
|
||||
config.beautify = 0;
|
||||
config.indentString = NULL;
|
||||
}
|
||||
virtual ~Audit_json_formatter() {}
|
||||
virtual ssize_t event_format(ThdSesData *pThdData, IWriter * writer);
|
||||
virtual ssize_t start_msg_format(IWriter * writer);
|
||||
|
||||
/**
|
||||
* Boolean indicating if to log start msg.
|
||||
* Public so sysvar can update.
|
||||
*/
|
||||
my_bool m_write_start_msg;
|
||||
|
||||
/**
|
||||
* Message delimiter. Should point to a valid json string (supporting the json escapping format).
|
||||
|
|
|
@ -389,6 +389,45 @@ static const char * thd_query_str(THD * thd, size_t * len)
|
|||
}
|
||||
#endif
|
||||
|
||||
ssize_t Audit_json_formatter::start_msg_format(IWriter * writer)
|
||||
{
|
||||
if(!m_write_start_msg) //disabled
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
//initialize yajl
|
||||
yajl_gen gen = yajl_gen_alloc(&config, NULL);
|
||||
yajl_gen_map_open(gen);
|
||||
yajl_add_string_val(gen, "msg-type", "header");
|
||||
uint64 ts = my_getsystime() / (10000);
|
||||
yajl_add_uint64(gen, "date", ts);
|
||||
yajl_add_string_val(gen, "audit-version", MYSQL_AUDIT_PLUGIN_VERSION"-"MYSQL_AUDIT_PLUGIN_REVISION);
|
||||
yajl_add_string_val(gen, "audit-protocol-version", AUDIT_PROTOCOL_VERSION);
|
||||
yajl_add_string_val(gen, "hostname", glob_hostname);
|
||||
yajl_add_string_val(gen, "mysql-version", server_version);
|
||||
yajl_add_string_val(gen, "mysql-program", my_progname);
|
||||
yajl_add_string_val(gen, "mysql-socket", mysqld_unix_port);
|
||||
yajl_add_uint64(gen, "mysql-port", mysqld_port);
|
||||
ssize_t res = -2;
|
||||
yajl_gen_status stat = yajl_gen_map_close(gen); //close the object
|
||||
if(stat == yajl_gen_status_ok) //all is good write the buffer out
|
||||
{
|
||||
const unsigned char * text = NULL;
|
||||
unsigned int len = 0;
|
||||
yajl_gen_get_buf(gen, &text, &len);
|
||||
//print the json
|
||||
res = writer->write((const char *)text, len);
|
||||
if(res >= 0)
|
||||
{
|
||||
//TODO: use the msg_delimiter
|
||||
res = writer->write("\n", 1);
|
||||
}
|
||||
//my_fwrite(log_file, (uchar *) b.data, json_size(&b), MYF(0));
|
||||
}
|
||||
yajl_gen_free(gen); //free the generator
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
ssize_t Audit_json_formatter::event_format(ThdSesData* pThdData, IWriter * writer)
|
||||
{
|
||||
|
|
|
@ -2089,7 +2089,7 @@ static struct st_mysql_show_var audit_status[] =
|
|||
(char *) MYSQL_AUDIT_PLUGIN_VERSION "-" MYSQL_AUDIT_PLUGIN_REVISION,
|
||||
SHOW_CHAR },
|
||||
{ "Audit_protocol_version",
|
||||
(char *) "1.0",
|
||||
(char *) AUDIT_PROTOCOL_VERSION,
|
||||
SHOW_CHAR },
|
||||
//{"called", (char *)&number_of_calls, SHOW_LONG},
|
||||
{ 0, 0, (enum_mysql_show_type) 0 } };
|
||||
|
@ -2134,6 +2134,9 @@ static void json_log_socket_enable(THD *thd, struct st_mysql_sys_var *var,
|
|||
|
||||
//setup sysvars which update directly the relevant plugins
|
||||
|
||||
static MYSQL_SYSVAR_BOOL(header_msg, json_formatter.m_write_start_msg,
|
||||
PLUGIN_VAR_RQCMDARG,
|
||||
"AUDIT write header message at start of logging or file flush Enable|Disable. Default enabled.", NULL, NULL, 1);
|
||||
|
||||
static MYSQL_SYSVAR_STR(json_log_file, json_file_handler.m_filename,
|
||||
PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_MEMALLOC,
|
||||
|
@ -2218,6 +2221,7 @@ static MYSQL_SYSVAR_STR(record_objs, record_objs_string,
|
|||
*/
|
||||
static struct st_mysql_sys_var* audit_system_variables[] =
|
||||
{
|
||||
MYSQL_SYSVAR(header_msg),
|
||||
MYSQL_SYSVAR(json_log_file),
|
||||
MYSQL_SYSVAR(json_file_sync),
|
||||
MYSQL_SYSVAR(json_file),
|
||||
|
|
Loading…
Reference in New Issue