00001
00020 #include "../util/admin_access.h"
00021
00022 namespace mongo {
00023
00024 class Prioritizable {
00025 public:
00026 Prioritizable( double p ) : _priority(p) {}
00027 double priority() const { return _priority; }
00028 private:
00029 double _priority;
00030 };
00031
00032 class DbWebHandler : public Prioritizable {
00033 public:
00034 DbWebHandler( const string& name , double priority , bool requiresREST );
00035 virtual ~DbWebHandler() {}
00036
00037 virtual bool handles( const string& url ) const { return url == _defaultUrl; }
00038
00039 virtual bool requiresREST( const string& url ) const { return _requiresREST; }
00040
00041 virtual void handle( const char *rq,
00042 string url,
00043 BSONObj params,
00044
00045 string& responseMsg,
00046 int& responseCode,
00047 vector<string>& headers,
00048 const SockAddr &from
00049 ) = 0;
00050
00051 string toString() const { return _toString; }
00052 static DbWebHandler * findHandler( const string& url );
00053
00054 private:
00055 string _name;
00056 bool _requiresREST;
00057
00058 string _defaultUrl;
00059 string _toString;
00060
00061 static vector<DbWebHandler*> * _handlers;
00062 };
00063
00064 class WebStatusPlugin : public Prioritizable {
00065 public:
00066 WebStatusPlugin( const string& secionName , double priority , const string& subheader = "" );
00067 virtual ~WebStatusPlugin() {}
00068
00069 virtual void run( stringstream& ss ) = 0;
00071 virtual void init() = 0;
00072
00073 static void initAll();
00074 static void runAll( stringstream& ss );
00075 private:
00076 string _name;
00077 string _subHeading;
00078 static vector<WebStatusPlugin*> * _plugins;
00079
00080 };
00081
00082 void webServerThread( const AdminAccess* admins );
00083 string prettyHostName();
00084
00085 };