Addition of DCB and Poll statistics in show status output
This commit is contained in:
@ -1583,8 +1583,10 @@ va_list args;
|
||||
int
|
||||
dcb_isclient(DCB *dcb)
|
||||
{
|
||||
if(dcb->session) {
|
||||
if (dcb->session->client) {
|
||||
if (dcb->state != DCB_STATE_LISTENING && dcb->session)
|
||||
{
|
||||
if (dcb->session->client)
|
||||
{
|
||||
return (dcb->session && dcb == dcb->session->client);
|
||||
}
|
||||
}
|
||||
@ -2168,3 +2170,52 @@ dcb_null_auth(DCB *dcb, SERVER *server, SESSION *session, GWBUF *buf)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return DCB counts optionally filtered by usage
|
||||
*
|
||||
* @param usage The usage of the DCB
|
||||
* @return A count of DCBs in the desired state
|
||||
*/
|
||||
int
|
||||
dcb_count_by_usage(DCB_USAGE usage)
|
||||
{
|
||||
int rval = 0;
|
||||
DCB *ptr;
|
||||
|
||||
spinlock_acquire(&dcbspin);
|
||||
ptr = allDCBs;
|
||||
while (ptr)
|
||||
{
|
||||
switch (usage)
|
||||
{
|
||||
case DCB_USAGE_CLIENT:
|
||||
if (dcb_isclient(ptr))
|
||||
rval++;
|
||||
break;
|
||||
case DCB_USAGE_LISTENER:
|
||||
if (ptr->state == DCB_STATE_LISTENING)
|
||||
rval++;
|
||||
break;
|
||||
case DCB_USAGE_BACKEND:
|
||||
if (dcb_isclient(ptr) == 0
|
||||
&& ptr->dcb_role == DCB_ROLE_REQUEST_HANDLER)
|
||||
rval++;
|
||||
break;
|
||||
case DCB_USAGE_INTERNAL:
|
||||
if (ptr->dcb_role == DCB_ROLE_REQUEST_HANDLER)
|
||||
rval++;
|
||||
break;
|
||||
case DCB_USAGE_ZOMBIE:
|
||||
if (DCB_ISZOMBIE(ptr))
|
||||
rval++;
|
||||
break;
|
||||
case DCB_USAGE_ALL:
|
||||
rval++;
|
||||
break;
|
||||
}
|
||||
ptr = ptr->next;
|
||||
}
|
||||
spinlock_release(&dcbspin);
|
||||
return rval;
|
||||
}
|
||||
|
||||
@ -31,6 +31,7 @@
|
||||
#include <gw.h>
|
||||
#include <config.h>
|
||||
#include <housekeeper.h>
|
||||
#include <config.h>
|
||||
#include <mysql.h>
|
||||
|
||||
#define PROFILE_POLL 0
|
||||
@ -152,8 +153,8 @@ static struct {
|
||||
int n_hup; /*< Number of hangup events */
|
||||
int n_accept; /*< Number of accept events */
|
||||
int n_polls; /*< Number of poll cycles */
|
||||
int n_pollev; /*< Number of polls returnign events */
|
||||
int n_nbpollev; /*< Number of polls returnign events */
|
||||
int n_pollev; /*< Number of polls returning events */
|
||||
int n_nbpollev; /*< Number of polls returning events */
|
||||
int n_nothreads; /*< Number of times no threads are polling */
|
||||
int n_fds[MAXNFDS]; /*< Number of wakeups with particular
|
||||
n_fds value */
|
||||
@ -1525,3 +1526,38 @@ int i;
|
||||
dcb_printf(pdcb, " > %2d00ms | %-10d | %-10d\n", N_QUEUE_TIMES,
|
||||
queueStats.qtimes[N_QUEUE_TIMES], queueStats.exectimes[N_QUEUE_TIMES]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a poll statistic from the polling subsystem
|
||||
*
|
||||
* @param stat The required statistic
|
||||
* @return The value of that statistic
|
||||
*/
|
||||
int
|
||||
poll_get_stat(POLL_STAT stat)
|
||||
{
|
||||
switch (stat)
|
||||
{
|
||||
case POLL_STAT_READ:
|
||||
return pollStats.n_read;
|
||||
case POLL_STAT_WRITE:
|
||||
return pollStats.n_write;
|
||||
case POLL_STAT_ERROR:
|
||||
return pollStats.n_error;
|
||||
case POLL_STAT_HANGUP:
|
||||
return pollStats.n_hup;
|
||||
case POLL_STAT_ACCEPT:
|
||||
return pollStats.n_accept;
|
||||
case POLL_STAT_EVQ_LEN:
|
||||
return pollStats.evq_length;
|
||||
case POLL_STAT_EVQ_PENDING:
|
||||
return pollStats.evq_pending;
|
||||
case POLL_STAT_EVQ_MAX:
|
||||
return pollStats.evq_max;
|
||||
case POLL_STAT_MAX_QTIME:
|
||||
return (int)queueStats.maxqtime;
|
||||
case POLL_STAT_MAX_EXECTIME:
|
||||
return (int)queueStats.maxexectime;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user