From fccb9df81736cf1589bd8a9dedc1d058b911e6b1 Mon Sep 17 00:00:00 2001 From: counterpoint Date: Tue, 26 May 2015 14:54:32 +0100 Subject: [PATCH] Add more status information to maxadmin displays --- server/core/dcb.c | 63 ++++++++++++++++++++++++++++++++++++++++++++ server/include/dcb.h | 2 ++ 2 files changed, 65 insertions(+) diff --git a/server/core/dcb.c b/server/core/dcb.c index 0e60f1bd8..75b89e3ca 100644 --- a/server/core/dcb.c +++ b/server/core/dcb.c @@ -1358,6 +1358,18 @@ printDCB(DCB *dcb) printf("\tUsername to: %s\n", dcb->user); if (dcb->writeq) printf("\tQueued write data: %d\n",gwbuf_length(dcb->writeq)); + char *server_status = server_status(dcb->dcb_server_status); + if (server_status) + { + printf("\tServer status: %s\n", server_status); + free(server_status); + } + char *rolename = dcb_role_name(dcb); + if (rolename) + { + printf("\tRole: %s\n", rolename); + free(rolename); + } printf("\tStatistics:\n"); printf("\t\tNo. of Reads: %d\n", dcb->stats.n_reads); @@ -1438,6 +1450,18 @@ DCB *dcb; if (dcb->writeq) dcb_printf(pdcb, "\tQueued write data: %d\n", gwbuf_length(dcb->writeq)); + char *server_status = server_status(dcb->dcb_server_status); + if (server_status) + { + dcb_printf(pdcb, "\tServer status: %s\n", server_status); + free(server_status); + } + char *rolename = dcb_role_name(dcb); + if (rolename) + { + dcb_printf(pdcb, "\tRole: %s\n", rolename); + free(rolename); + } dcb_printf(pdcb, "\tStatistics:\n"); dcb_printf(pdcb, "\t\tNo. of Reads: %d\n", dcb->stats.n_reads); dcb_printf(pdcb, "\t\tNo. of Writes: %d\n", dcb->stats.n_writes); @@ -1541,6 +1565,18 @@ dprintDCB(DCB *pdcb, DCB *dcb) dcb_printf(pdcb, "\tQueued write data: %d\n", gwbuf_length(dcb->writeq)); if (dcb->delayq) dcb_printf(pdcb, "\tDelayed write data: %d\n", gwbuf_length(dcb->delayq)); + char *server_status = server_status(dcb->dcb_server_status); + if (server_status) + { + dcb_printf(pdcb, "\tServer status: %s\n", server_status); + free(server_status); + } + char *rolename = dcb_role_name(dcb); + if (rolename) + { + dcb_printf(pdcb, "\tRole: %s\n", rolename); + free(rolename); + } dcb_printf(pdcb, "\tStatistics:\n"); dcb_printf(pdcb, "\t\tNo. of Reads: %d\n", dcb->stats.n_reads); @@ -2275,3 +2311,30 @@ DCB *ptr; spinlock_release(&dcbspin); return rval; } + +/** + * Convert a DCB role to a string, the returned + * string has been malloc'd and must be free'd by the caller + * + * @param DCB The DCB to return the role of + * @return A string representation of the DCB role + */ +char * +dcb_role_name(DCB *dcb) +{ +char *name = NULL; + + if (NULL != (name = (char *)malloc(64))) + { + name[0] = 0; + if (DCB_ROLE_SERVICE_LISTENER = dcb->dcb_role) + strcat(name, "Service Listener"); + else if (DCB_ROLE_REQUEST_HANDLER = dcb->dcb_role) + strcat(name, "Request Handler"); + else if (DCB_ROLE_INTERNAL = dcb->dcb_role) + strcat(name, "Internal"); + else + strcat(name, "Unknown"); + } + return name; +} diff --git a/server/include/dcb.h b/server/include/dcb.h index 262e3a3e9..0f4fdd8f1 100644 --- a/server/include/dcb.h +++ b/server/include/dcb.h @@ -340,6 +340,8 @@ void dcb_call_foreach (struct server* server, DCB_REASON reason); size_t dcb_get_session_id(DCB* dcb); bool dcb_get_ses_log_info(DCB* dcb, size_t* sesid, int* enabled_logs); +char *dcb_role_name(DCB *); /* Return the name of a role */ + /**