bool run(const string& dbname, BSONObj& jsobj, string& errmsg, BSONObjBuilder& result, bool fromRepl ) {
list<string> collections;
Database* d = cc().database();
if ( d )
d->namespaceIndex.getNamespaces( collections );
longlong ncollections = 0;
longlong objects = 0;
longlong size = 0;
longlong storageSize = 0;
longlong numExtents = 0;
longlong indexes = 0;
longlong indexSize = 0;
for (list<string>::const_iterator it = collections.begin(); it != collections.end(); ++it) {
const string ns = *it;
NamespaceDetails * nsd = nsdetails( ns.c_str() );
if ( ! nsd ) {
errmsg = "missing ns: ";
errmsg += ns;
returnfalse;
}
ncollections += 1;
objects += nsd->stats.nrecords;
size += nsd->stats.datasize;
int temp;
storageSize += nsd->storageSize( &temp );
numExtents += temp;
indexes += nsd->nIndexes;
indexSize += getIndexSizeForCollection(dbname, ns);
}
result.append ( "db" , dbname );
result.appendNumber( "collections" , ncollections );
result.appendNumber( "objects" , objects );
result.append ( "avgObjSize" , objects == 0 ? 0 : double(size) / double(objects) );
result.appendNumber( "dataSize" , size );
result.appendNumber( "storageSize" , storageSize);
result.appendNumber( "numExtents" , numExtents );
result.appendNumber( "indexes" , indexes );
result.appendNumber( "indexSize" , indexSize );
result.appendNumber( "fileSize" , d->fileSize() );
returntrue;
}
dDBStats;