MXS-1220: Implement JSON diagnostics for most routers
All routers except the binlogrouter now fully implement the JSON diagnostic entry point. The binlogrouter needs to be handled in a separate commit as it produces a large amount of diagnostic output.
This commit is contained in:

committed by
Markus Mäkelä

parent
25c8fb8556
commit
eb3ff1cc7b
@ -302,35 +302,30 @@ SchemaRouterSession* SchemaRouter::newSession(MXS_SESSION* pSession)
|
||||
return rval;
|
||||
}
|
||||
|
||||
void SchemaRouter::diagnostics(DCB* dcb)
|
||||
json_t* SchemaRouter::diagnostics()
|
||||
{
|
||||
double sescmd_pct = m_stats.n_sescmd != 0 ?
|
||||
100.0 * ((double)m_stats.n_sescmd / (double)m_stats.n_queries) :
|
||||
0.0;
|
||||
100.0 * ((double)m_stats.n_sescmd / (double)m_stats.n_queries) :
|
||||
0.0;
|
||||
|
||||
/** Session command statistics */
|
||||
dcb_printf(dcb, "\n\33[1;4mSession Commands\33[0m\n");
|
||||
dcb_printf(dcb, "Total number of queries: %d\n",
|
||||
m_stats.n_queries);
|
||||
dcb_printf(dcb, "Percentage of session commands: %.2f\n",
|
||||
sescmd_pct);
|
||||
dcb_printf(dcb, "Longest chain of stored session commands: %d\n",
|
||||
m_stats.longest_sescmd);
|
||||
dcb_printf(dcb, "Session command history limit exceeded: %d times\n",
|
||||
m_stats.n_hist_exceeded);
|
||||
json_t* rval = json_object();
|
||||
json_object_set_new(rval, "queries", json_integer(m_stats.n_queries));
|
||||
json_object_set_new(rval, "sescmd_percentage", json_real(sescmd_pct));
|
||||
json_object_set_new(rval, "longest_sescmd_chain", json_integer(m_stats.longest_sescmd));
|
||||
json_object_set_new(rval, "times_sescmd_limit_exceeded", json_integer(m_stats.n_hist_exceeded));
|
||||
|
||||
/** Session time statistics */
|
||||
|
||||
if (m_stats.sessions > 0)
|
||||
{
|
||||
dcb_printf(dcb, "\n\33[1;4mSession Time Statistics\33[0m\n");
|
||||
dcb_printf(dcb, "Longest session: %.2lf seconds\n", m_stats.ses_longest);
|
||||
dcb_printf(dcb, "Shortest session: %.2lf seconds\n", m_stats.ses_shortest);
|
||||
dcb_printf(dcb, "Average session length: %.2lf seconds\n", m_stats.ses_average);
|
||||
json_object_set_new(rval, "longest_session", json_real(m_stats.ses_longest));
|
||||
json_object_set_new(rval, "shortest_session", json_real(m_stats.ses_shortest));
|
||||
json_object_set_new(rval, "average_session", json_real(m_stats.ses_average));
|
||||
}
|
||||
dcb_printf(dcb, "Shard map cache hits: %d\n", m_stats.shmap_cache_hit);
|
||||
dcb_printf(dcb, "Shard map cache misses: %d\n", m_stats.shmap_cache_miss);
|
||||
dcb_printf(dcb, "\n");
|
||||
|
||||
json_object_set_new(rval, "shard_map_hits", json_integer(m_stats.shmap_cache_hit));
|
||||
json_object_set_new(rval, "shard_map_misses", json_integer(m_stats.shmap_cache_miss));
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
uint64_t SchemaRouter::getCapabilities()
|
||||
|
Reference in New Issue
Block a user