Merge from develop
Merge from develop
This commit is contained in:
@ -78,6 +78,15 @@ int blr_file_write_master_config(ROUTER_INSTANCE *router, char *error);
|
||||
extern uint32_t extract_field(uint8_t *src, int bits);
|
||||
static void blr_format_event_size(double *event_size, char *label);
|
||||
extern int MaxScaleUptime();
|
||||
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
|
||||
@ -831,6 +840,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,
|
||||
@ -862,6 +879,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]="";
|
||||
@ -1147,6 +1171,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+BINLOG_EVENT_HDR_LEN;
|
||||
|
||||
@ -1157,11 +1189,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);
|
||||
@ -1208,6 +1254,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;
|
||||
@ -1627,3 +1679,48 @@ char err_msg[STRERROR_BUFLEN];
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** 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)));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user