Added blr_print_binlog_details
Added blr_print_binlog_details
This commit is contained in:
parent
9064212353
commit
a718c995ae
@ -89,7 +89,7 @@ static void errorReply(
|
||||
error_action_t action,
|
||||
bool *succp);
|
||||
static uint8_t getCapabilities (ROUTER* inst, void* router_session);
|
||||
|
||||
char *blr_get_event_description(ROUTER_INSTANCE *router, uint8_t event);
|
||||
|
||||
/** The module object definition */
|
||||
static ROUTER_OBJECT MyObject = {
|
||||
@ -1371,7 +1371,6 @@ GWBUF *errbuf = NULL;
|
||||
return dcb->func.write(dcb, errbuf);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Extract a numeric field from a packet of the specified number of bits
|
||||
*
|
||||
@ -1391,3 +1390,35 @@ uint32_t rval = 0, shift = 0;
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the event description
|
||||
*
|
||||
* @param router The router instance
|
||||
* @param event The current event
|
||||
* @return The event description or NULL
|
||||
*/
|
||||
char *
|
||||
blr_get_event_description(ROUTER_INSTANCE *router, uint8_t event) {
|
||||
char *event_desc = NULL;
|
||||
|
||||
if (!router->mariadb10_compat) {
|
||||
if (event >= 0 &&
|
||||
event <= MAX_EVENT_TYPE) {
|
||||
event_desc = event_names[event];
|
||||
}
|
||||
} else {
|
||||
if (event >= 0 &&
|
||||
event <= MAX_EVENT_TYPE) {
|
||||
event_desc = event_names[event];
|
||||
} else {
|
||||
/* Check MariaDB 10 new events */
|
||||
if (event >= MARIADB_NEW_EVENTS_BEGIN &&
|
||||
event <= MAX_EVENT_TYPE_MARIADB10) {
|
||||
event_desc = event_names_mariadb10[(event - MARIADB_NEW_EVENTS_BEGIN)];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return event_desc;
|
||||
}
|
||||
|
@ -62,6 +62,15 @@ static int blr_file_create(ROUTER_INSTANCE *router, char *file);
|
||||
static void blr_file_append(ROUTER_INSTANCE *router, char *file);
|
||||
static void blr_log_header(logfile_id_t file, char *msg, uint8_t *ptr);
|
||||
static void blr_format_event_size(double *event_size, char *label);
|
||||
extern char *blr_get_event_description(ROUTER_INSTANCE *router, uint8_t event);
|
||||
|
||||
typedef struct binlog_event_desc {
|
||||
unsigned long long event_pos;
|
||||
uint8_t event_type;
|
||||
time_t event_time;
|
||||
} BINLOG_EVENT_DESC;
|
||||
|
||||
static void blr_print_binlog_details(ROUTER_INSTANCE *router, BINLOG_EVENT_DESC first_event_time, BINLOG_EVENT_DESC last_event_time);
|
||||
|
||||
/**
|
||||
* Initialise the binlog file for this instance. MaxScale will look
|
||||
@ -780,6 +789,14 @@ unsigned long event_bytes = 0;
|
||||
unsigned long max_bytes = 0;
|
||||
double average_events = 0;
|
||||
double average_bytes = 0;
|
||||
BINLOG_EVENT_DESC first_event;
|
||||
BINLOG_EVENT_DESC last_event;
|
||||
BINLOG_EVENT_DESC fde_event;
|
||||
int fde_seen = 0;
|
||||
|
||||
memset(&first_event, '\0', sizeof(first_event));
|
||||
memset(&last_event, '\0', sizeof(last_event));
|
||||
memset(&fde_event, '\0', sizeof(fde_event));
|
||||
|
||||
if (router->binlog_fd == -1) {
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
@ -810,6 +827,13 @@ double average_bytes = 0;
|
||||
if (n_transactions)
|
||||
average_bytes = (double)((double)total_bytes / (double)n_transactions) * (1.0);
|
||||
|
||||
/* Report Binlog First and Last event */
|
||||
if (first_event.event_type == 0)
|
||||
blr_print_binlog_details(router, fde_event, last_event);
|
||||
else
|
||||
blr_print_binlog_details(router, first_event, last_event);
|
||||
|
||||
/* Report Transaction Summary */
|
||||
if (n_transactions != 0) {
|
||||
char total_label[2]="";
|
||||
char average_label[2]="";
|
||||
@ -1088,6 +1112,14 @@ double average_bytes = 0;
|
||||
last_known_commit = pos;
|
||||
}
|
||||
|
||||
/* get firts event timestamp, after FDE */
|
||||
if (fde_seen) {
|
||||
first_event.event_time = (unsigned long)hdr.timestamp;
|
||||
first_event.event_type = hdr.event_type;
|
||||
first_event.event_pos = pos;
|
||||
fde_seen = 0;
|
||||
}
|
||||
|
||||
/* get event content */
|
||||
ptr = data+19;
|
||||
|
||||
@ -1098,11 +1130,25 @@ double average_bytes = 0;
|
||||
int n_events;
|
||||
int check_alg;
|
||||
uint8_t *checksum;
|
||||
char buf_t[40];
|
||||
struct tm tm_t;
|
||||
|
||||
fde_seen = 1;
|
||||
fde_event.event_time = (unsigned long)hdr.timestamp;
|
||||
fde_event.event_type = hdr.event_type;
|
||||
fde_event.event_pos = pos;
|
||||
|
||||
localtime_r(&fde_event.event_time, &tm_t);
|
||||
asctime_r(&tm_t, buf_t);
|
||||
|
||||
if (buf_t[strlen(buf_t)-1] == '\n') {
|
||||
buf_t[strlen(buf_t)-1] = '\0';
|
||||
}
|
||||
|
||||
if(debug)
|
||||
LOGIF(LD, (skygw_log_write_flush(LOGFILE_DEBUG,
|
||||
"- Format Description event FDE @ %llu, size %lu",
|
||||
pos, (unsigned long)hdr.event_size)));
|
||||
"- Format Description event FDE @ %llu, size %lu, time %lu (%s)",
|
||||
pos, (unsigned long)hdr.event_size, fde_event.event_time, buf_t)));
|
||||
|
||||
event_header_length = ptr[2 + 50 + 4];
|
||||
event_header_ntypes = hdr.event_size - event_header_length - (2 + 50 + 4 + 1);
|
||||
@ -1149,6 +1195,12 @@ double average_bytes = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* set last event time, pos and type */
|
||||
last_event.event_time = (unsigned long)hdr.timestamp;
|
||||
last_event.event_type = hdr.event_type;
|
||||
last_event.event_pos = pos;
|
||||
|
||||
/* Decode ROTATE EVENT */
|
||||
if(hdr.event_type == ROTATE_EVENT) {
|
||||
int len, slen;
|
||||
@ -1425,3 +1477,47 @@ blr_format_event_size(double *event_size, char *label)
|
||||
label[0] = 'B';
|
||||
}
|
||||
|
||||
/** Print Binlog Details
|
||||
*
|
||||
* @param router The router instance
|
||||
* @param first_event First Event details
|
||||
* @param last_event First Event details
|
||||
*/
|
||||
|
||||
static void
|
||||
blr_print_binlog_details(ROUTER_INSTANCE *router, BINLOG_EVENT_DESC first_event, BINLOG_EVENT_DESC last_event)
|
||||
{
|
||||
char buf_t[40];
|
||||
struct tm tm_t;
|
||||
char *event_desc;
|
||||
|
||||
/* First Event */
|
||||
localtime_r(&first_event.event_time, &tm_t);
|
||||
asctime_r(&tm_t, buf_t);
|
||||
|
||||
if (buf_t[strlen(buf_t)-1] == '\n') {
|
||||
buf_t[strlen(buf_t)-1] = '\0';
|
||||
}
|
||||
|
||||
event_desc = blr_get_event_description(router, first_event.event_type);
|
||||
|
||||
LOGIF(LM, (skygw_log_write_flush(LOGFILE_MESSAGE,
|
||||
"%lu @ %llu, %s, (%s), First EventTime",
|
||||
first_event.event_time, first_event.event_pos,
|
||||
event_desc != NULL ? event_desc : "unknown", buf_t)));
|
||||
|
||||
/* Last Event */
|
||||
localtime_r(&last_event.event_time, &tm_t);
|
||||
asctime_r(&tm_t, buf_t);
|
||||
|
||||
if (buf_t[strlen(buf_t)-1] == '\n') {
|
||||
buf_t[strlen(buf_t)-1] = '\0';
|
||||
}
|
||||
|
||||
event_desc = blr_get_event_description(router, last_event.event_type);
|
||||
|
||||
LOGIF(LM, (skygw_log_write_flush(LOGFILE_MESSAGE,
|
||||
"%lu @ %llu, %s, (%s), Last EventTime",
|
||||
last_event.event_time, last_event.event_pos,
|
||||
event_desc != NULL ? event_desc : "unknown", buf_t)));
|
||||
}
|
||||
|
@ -80,7 +80,7 @@ static struct option long_options[] = {
|
||||
{0, 0, 0, 0}
|
||||
};
|
||||
|
||||
char *binlog_check_version = "1.0.0";
|
||||
char *binlog_check_version = "1.1.0";
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
char** arg_vector;
|
||||
|
Loading…
x
Reference in New Issue
Block a user