show repl state in shell prompt. needs more work

This commit is contained in:
dwight
2010-11-23 04:16:04 -05:00
parent 95517ebb68
commit f6a923ca3f
8 changed files with 104 additions and 59 deletions

View File

@@ -39,6 +39,7 @@ jmp_buf jbuf;
#include "../util/password.h"
#include "../util/version.h"
#include "../util/goodies.h"
#include "../db/repl/rs_member.h"
using namespace std;
using namespace boost::filesystem;
@@ -223,6 +224,7 @@ void quitNicely( int sig ){
#endif
char * shellReadline( const char * prompt , int handlesigint = 0 ){
atPrompt = true;
#ifdef USE_READLINE
@@ -432,6 +434,35 @@ bool fileExists( string file ){
namespace mongo {
extern bool isShell;
extern DBClientWithCommands *latestConn;
}
string stateToString(MemberState s) {
if( s.s == MemberState::RS_STARTUP ) return "STARTUP";
if( s.s == MemberState::RS_PRIMARY ) return "PRIMARY";
if( s.s == MemberState::RS_SECONDARY ) return "SECONDARY";
if( s.s == MemberState::RS_RECOVERING ) return "RECOVERING";
if( s.s == MemberState::RS_FATAL ) return "FATAL";
if( s.s == MemberState::RS_STARTUP2 ) return "STARTUP2";
if( s.s == MemberState::RS_ARBITER ) return "ARBITER";
if( s.s == MemberState::RS_DOWN ) return "DOWN";
if( s.s == MemberState::RS_ROLLBACK ) return "ROLLBACK";
return "";
}
void sayReplSetMemberState() {
try {
if( latestConn ) {
BSONObj info;
if( latestConn->simpleCommand("admin", &info, "replSetGetStatus") ) {
stringstream ss;
ss << info["set"].String() << ':';
int s = info["myState"].Number();
MemberState ms(s);
ss << stateToString(ms);
cout << ss.str();
}
}
} catch(...) { }
}
int _main(int argc, char* argv[]) {
@@ -637,6 +668,11 @@ int _main(int argc, char* argv[]) {
while ( 1 ){
inMultiLine = 0;
gotInterrupted = 0;
// shellMainScope->localConnect;
//DBClientWithCommands *c = getConnection( JSContext *cx, JSObject *obj );
sayReplSetMemberState();
char * line = shellReadline( "> " );
if ( line ){
@@ -700,7 +736,6 @@ int _main(int argc, char* argv[]) {
}
}
shellHistoryAdd( line );
}