summaryrefslogtreecommitdiff
path: root/db/dbwebserver.h
diff options
context:
space:
mode:
Diffstat (limited to 'db/dbwebserver.h')
-rw-r--r--db/dbwebserver.h90
1 files changed, 90 insertions, 0 deletions
diff --git a/db/dbwebserver.h b/db/dbwebserver.h
new file mode 100644
index 0000000..d1a2f0d
--- /dev/null
+++ b/db/dbwebserver.h
@@ -0,0 +1,90 @@
+/** @file dbwebserver.h
+ */
+
+/**
+* Copyright (C) 2008 10gen Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License, version 3,
+* as published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+namespace mongo {
+
+ class Prioritizable {
+ public:
+ Prioritizable( double p ) : _priority(p){}
+ double priority() const { return _priority; }
+ private:
+ double _priority;
+ };
+
+ class DbWebHandler : public Prioritizable {
+ public:
+ DbWebHandler( const string& name , double priority , bool requiresREST );
+ virtual ~DbWebHandler(){}
+
+ virtual bool handles( const string& url ) const { return url == _defaultUrl; }
+
+ virtual bool requiresREST( const string& url ) const { return _requiresREST; }
+
+ virtual void handle( const char *rq, // the full request
+ string url,
+ // set these and return them:
+ string& responseMsg,
+ int& responseCode,
+ vector<string>& headers, // if completely empty, content-type: text/html will be added
+ const SockAddr &from
+ ) = 0;
+
+ string toString() const { return _toString; }
+ static DbWebHandler * findHandler( const string& url );
+
+ private:
+ string _name;
+ bool _requiresREST;
+
+ string _defaultUrl;
+ string _toString;
+
+ static vector<DbWebHandler*> * _handlers;
+ };
+
+ class WebStatusPlugin : public Prioritizable {
+ public:
+ WebStatusPlugin( const string& secionName , double priority , const string& subheader = "" );
+ virtual ~WebStatusPlugin(){}
+
+ virtual void run( stringstream& ss ) = 0;
+ /** called when web server stats up */
+ virtual void init() = 0;
+
+ static void initAll();
+ static void runAll( stringstream& ss );
+ private:
+ string _name;
+ string _subHeading;
+ static vector<WebStatusPlugin*> * _plugins;
+
+ };
+
+ void webServerThread();
+ string prettyHostName();
+
+ /** @return if there are any admin users. this should not block for long and throw if can't get a lock if needed */
+ bool webHaveAdminUsers();
+
+ /** @return admin user with this name. this should not block for long and throw if can't get a lock if needed */
+ BSONObj webGetAdminUser( const string& username );
+
+};
+
+