// caller locks void doLockedStuff(stringstream& ss) { ss << "# databases: " << dbHolder.size() << '\n'; ss << bold(ClientCursor::byLocSize()>10000) << "Cursors byLoc.size(): " << ClientCursor::byLocSize() << bold() << '\n'; ss << "\n<b>replication</b>\n"; ss << "master: " << replSettings.master << '\n'; ss << "slave: " << replSettings.slave << '\n'; if ( replPair ) { ss << "replpair:\n"; ss << replPair->getInfo(); } bool seemCaughtUp = getInitialSyncCompleted(); if ( !seemCaughtUp ) ss << "<b>"; ss << "initialSyncCompleted: " << seemCaughtUp; if ( !seemCaughtUp ) ss << "</b>"; ss << '\n'; auto_ptr<SnapshotDelta> delta = statsSnapshots.computeDelta(); if ( delta.get() ){ ss << "\n<b>DBTOP (occurences|percent of elapsed)</b>\n"; ss << "<table border=1>"; ss << "<tr align='left'>"; ss << "<th>NS</th>" "<th colspan=2>total</th>" "<th colspan=2>Reads</th>" "<th colspan=2>Writes</th>" "<th colspan=2>Queries</th>" "<th colspan=2>GetMores</th>" "<th colspan=2>Inserts</th>" "<th colspan=2>Updates</th>" "<th colspan=2>Removes</th>"; ss << "</tr>"; display( ss , (double) delta->elapsed() , "GLOBAL" , delta->globalUsageDiff() ); Top::UsageMap usage = delta->collectionUsageDiff(); for ( Top::UsageMap::iterator i=usage.begin(); i != usage.end(); i++ ){ display( ss , (double) delta->elapsed() , i->first , i->second ); } ss << "</table>"; } statsSnapshots.outputLockInfoHTML( ss ); BackgroundOperation::dump(ss); }
// caller locks void doLockedStuff(stringstream& ss) { ss << "# databases: " << dbHolder.size() << '\n'; if ( cc().database() ) { ss << "curclient: " << cc().database()->name; // TODO: isn't this useless? ss << '\n'; } ss << bold(ClientCursor::byLocSize()>10000) << "Cursors byLoc.size(): " << ClientCursor::byLocSize() << bold() << '\n'; ss << "\n<b>replication</b>\n"; ss << "master: " << master << '\n'; ss << "slave: " << slave << '\n'; if ( replPair ) { ss << "replpair:\n"; ss << replPair->getInfo(); } bool seemCaughtUp = getInitialSyncCompleted(); if ( !seemCaughtUp ) ss << "<b>"; ss << "initialSyncCompleted: " << seemCaughtUp; if ( !seemCaughtUp ) ss << "</b>"; ss << '\n'; ss << "\n<b>DBTOP</b>\n"; ss << "<table border=1><tr align='left'><th>Namespace</th><th>%</th><th>Reads</th><th>Writes</th><th>Calls</th><th>Time</th>"; vector< Top::Usage > usage; Top::usage( usage ); for( vector< Top::Usage >::iterator i = usage.begin(); i != usage.end(); ++i ) ss << setprecision( 2 ) << fixed << "<tr><td>" << i->ns << "</td><td>" << i->pct << "</td><td>" << i->reads << "</td><td>" << i->writes << "</td><td>" << i->calls << "</td><td>" << i->time << "</td></tr>\n"; ss << "</table>"; ss << "\n<b>dt\ttlocked</b>\n"; unsigned i = q; while ( 1 ) { ss << lockStats[i] << '\n'; i = (i-1)%NStats; if ( i == q ) break; } }