diff --git a/db/comdb2.h b/db/comdb2.h index 6c25f76f9f..85a1833ce5 100644 --- a/db/comdb2.h +++ b/db/comdb2.h @@ -486,6 +486,9 @@ enum CURTRAN_FLAGS { CURTRAN_RECOVERY = 0x00000001 }; struct rawnodestats { unsigned opcode_counts[MAXTYPCNT]; unsigned blockop_counts[NUM_BLOCKOP_OPCODES]; + unsigned sql_queries_cdb2api; + unsigned sql_queries_comdb2api; + unsigned sql_queries_converted; unsigned sql_queries; unsigned sql_steps; unsigned sql_rows; @@ -522,6 +525,9 @@ struct summary_nodestats { unsigned serial; /* serial sql */ unsigned sql_queries; + unsigned sql_queries_cdb2api; + unsigned sql_queries_comdb2api; + unsigned sql_queries_converted; unsigned sql_steps; unsigned sql_rows; double svc_time; diff --git a/db/reqlog.c b/db/reqlog.c index 1ef4e0e52c..0cf7bb6af1 100644 --- a/db/reqlog.c +++ b/db/reqlog.c @@ -2834,6 +2834,9 @@ struct summary_nodestats *get_nodestats_summary(unsigned *nodes_cnt, summaries[ii].ref = nodestats->ref; summaries[ii].is_ssl = nodestats->is_ssl; + summaries[ii].sql_queries_cdb2api = snap.sql_queries_cdb2api; + summaries[ii].sql_queries_comdb2api = snap.sql_queries_comdb2api; + summaries[ii].sql_queries_converted = snap.sql_queries_converted; summaries[ii].sql_queries = snap.sql_queries; summaries[ii].sql_steps = snap.sql_steps; summaries[ii].sql_rows = snap.sql_rows; @@ -3042,7 +3045,7 @@ void nodestats_report(FILE *fh, const char *prefix, int disp_rates) prefix, "node"); logmsgf(LOGMSG_USER, fh, "%s%5s | finds rngexts writes other | adds upds dels " - "blk/sql recom snapisl serial | queries steps rows\n", + "blk/sql recom snapisl serial | queries steps rows newapi oldapi old2new\n", prefix, ""); summaries = get_nodestats_summary(&max_clients, disp_rates); @@ -3056,14 +3059,17 @@ void nodestats_report(FILE *fh, const char *prefix, int disp_rates) inet_ntoa(summaries[ii].addr), summaries[ii].ref); logmsgf(LOGMSG_USER, fh, "%s%5d | %7u %7u %7u %7u | %7u %7u %7u %7u %7u %7u %7u | %7u " - "%7u %7u\n", + "%7u %7u %7u %7u %7u\n", prefix, summaries[ii].node, summaries[ii].finds, summaries[ii].rngexts, summaries[ii].writes, summaries[ii].other_fstsnds, summaries[ii].adds, summaries[ii].upds, summaries[ii].dels, summaries[ii].bsql, summaries[ii].recom, summaries[ii].snapisol, summaries[ii].serial, summaries[ii].sql_queries, - summaries[ii].sql_steps, summaries[ii].sql_rows); + summaries[ii].sql_steps, summaries[ii].sql_rows, + summaries[ii].sql_queries_cdb2api, + summaries[ii].sql_queries_comdb2api, + summaries[ii].sql_queries_converted); } for (ii = 0; ii < max_clients; ii++) { diff --git a/db/sqlinterfaces.c b/db/sqlinterfaces.c index 5bbcd3122f..3803bed37a 100644 --- a/db/sqlinterfaces.c +++ b/db/sqlinterfaces.c @@ -2843,8 +2843,18 @@ void query_stats_setup(struct sqlthdstate *thd, struct sqlclntstate *clnt) /* berkdb stats */ bdb_reset_thread_stats(); - if (clnt->rawnodestats) + if (clnt->rawnodestats) { clnt->rawnodestats->sql_queries++; + const char *api = clnt->plugin.api_type(clnt); + if (strcmp(api, "comdb2api") == 0) + clnt->rawnodestats->sql_queries_comdb2api++; + else if (clnt->features.require_fastsql) { + clnt->rawnodestats->sql_queries_converted++; + log_legacy_request(NULL, clnt); + } + else + clnt->rawnodestats->sql_queries_cdb2api++; + } /* sql thread stats */ thd->sqlthd->startms = comdb2_time_epochms(); diff --git a/sqlite/ext/comdb2/clientstats.c b/sqlite/ext/comdb2/clientstats.c index c712718fa4..cedc2ee951 100644 --- a/sqlite/ext/comdb2/clientstats.c +++ b/sqlite/ext/comdb2/clientstats.c @@ -56,7 +56,10 @@ enum { COLUMN_SQL_STEPS, COLUMN_SQL_ROWS, COLUMN_SVC_TIME, - COLUMN_IS_SSL + COLUMN_IS_SSL, + COLUMN_CDB2API, + COLUMN_COMDB2API, + COLUMN_CONVERTEDAPI }; static int systblClientStatsConnect(sqlite3 *db, void *pAux, int argc, @@ -72,7 +75,8 @@ static int systblClientStatsConnect(sqlite3 *db, void *pAux, int argc, "\"upds\" INTEGER, \"dels\" INTEGER, \"bsql\" INTEGER, \"recom\" " "INTEGER, \"snapisol\" INTEGER, \"serial\" INTEGER, " "\"sql_queries\" INTEGER, \"sql_steps\" INTEGER, \"sql_rows\" " - "INTEGER, \"svc_time\" DOUBLE, \"is_ssl\" INTEGER)"); + "INTEGER, \"svc_time\" DOUBLE, \"is_ssl\" INTEGER, " + "\"sql_cdb2api\" INTEGER, \"sql_comdb2api\" INTEGER, \"sql_convertedapi\" INTEGER)"); if (rc == SQLITE_OK) { if ((*ppVtab = sqlite3_malloc(sizeof(sqlite3_vtab))) == 0) { @@ -221,6 +225,16 @@ static int systblClientStatsColumn(sqlite3_vtab_cursor *cur, case COLUMN_IS_SSL: sqlite3_result_int(ctx, summaries[ii].is_ssl); break; + case COLUMN_CDB2API: + sqlite3_result_int(ctx, summaries[ii].sql_queries_cdb2api); + break; + case COLUMN_COMDB2API: + sqlite3_result_int(ctx, summaries[ii].sql_queries_comdb2api); + break; + case COLUMN_CONVERTEDAPI: + sqlite3_result_int(ctx, summaries[ii].sql_queries_converted); + break; + default: assert(0); };