void inProgCmd( Message &m, DbResponse &dbresponse ) { BSONObjBuilder b; if (!cc().getAuthorizationManager()->checkAuthorization( AuthorizationManager::SERVER_RESOURCE_NAME, ActionType::inprog)) { b.append("err", "unauthorized"); } else { DbMessage d(m); QueryMessage q(d); bool all = q.query["$all"].trueValue(); bool allMatching = q.query["$allMatching"].trueValue(); vector<BSONObj> vals; BSONObjBuilder qb; for (BSONObjIterator it(q.query); it.more(); ) { BSONElement e = it.next(); StringData fn(e.fieldName()); if (fn != "$all" && fn != "$allMatching") { qb.append(e); } } { Client& me = cc(); scoped_lock bl(Client::clientsMutex); scoped_ptr<Matcher> m(new Matcher(qb.done())); for( set<Client*>::iterator i = Client::clients.begin(); i != Client::clients.end(); i++ ) { Client *c = *i; verify( c ); CurOp* co = c->curop(); if ( c == &me && !co ) { continue; } verify( co ); if( all || allMatching || co->displayInCurop() ) { BSONObj info = co->info(); if ( all || m->matches( info )) { vals.push_back( info ); } } } } b.append("inprog", vals); } replyToQuery(0, m, dbresponse, b.obj()); }
void inProgCmd( Message &m, DbResponse &dbresponse ) { BSONObjBuilder b; if (!cc().getAuthorizationManager()->checkAuthorization( AuthorizationManager::SERVER_RESOURCE_NAME, ActionType::inprog)) { b.append("err", "unauthorized"); } else { DbMessage d(m); QueryMessage q(d); bool all = q.query["$all"].trueValue(); vector<BSONObj> vals; { Client& me = cc(); scoped_lock bl(Client::clientsMutex); scoped_ptr<Matcher> m(new Matcher(q.query)); for( set<Client*>::iterator i = Client::clients.begin(); i != Client::clients.end(); i++ ) { Client *c = *i; verify( c ); CurOp* co = c->curop(); if ( c == &me && !co ) { continue; } verify( co ); if( all || co->displayInCurop() ) { BSONObj info = co->info(); if ( all || m->matches( info )) { vals.push_back( info ); } } } } b.append("inprog", vals); if( lockedForWriting() ) { b.append("fsyncLock", true); b.append("info", "use db.fsyncUnlock() to terminate the fsync write/snapshot lock"); } } replyToQuery(0, m, dbresponse, b.obj()); }