diff --git a/libresapi/src/api/ApiServer.cpp b/libresapi/src/api/ApiServer.cpp index 34d1cfc5c..b9606a003 100644 --- a/libresapi/src/api/ApiServer.cpp +++ b/libresapi/src/api/ApiServer.cpp @@ -15,6 +15,7 @@ #include "ApiPluginHandler.h" #include "ChannelsHandler.h" +#include "StatsHandler.h" /* data types in json http://json.org/ @@ -234,7 +235,8 @@ public: mTransfersHandler(sts, ifaces.mFiles), mChatHandler(sts, ifaces.mNotify, ifaces.mMsgs, ifaces.mPeers, ifaces.mIdentity, &mPeersHandler), mApiPluginHandler(sts, ifaces), - mChannelsHandler(ifaces.mGxsChannels) + mChannelsHandler(ifaces.mGxsChannels), + mStatsHandler() { // the dynamic cast is to not confuse the addResourceHandler template like this: // addResourceHandler(derived class, parent class) @@ -258,6 +260,8 @@ public: &ChatHandler::handleRequest); router.addResourceHandler("channels", dynamic_cast(&mChannelsHandler), &ChannelsHandler::handleRequest); + router.addResourceHandler("stats", dynamic_cast(&mStatsHandler), + &StatsHandler::handleRequest); } PeersHandler mPeersHandler; @@ -269,6 +273,7 @@ public: ChatHandler mChatHandler; ApiPluginHandler mApiPluginHandler; ChannelsHandler mChannelsHandler; + StatsHandler mStatsHandler; }; ApiServer::ApiServer(): diff --git a/libresapi/src/api/StatsHandler.cpp b/libresapi/src/api/StatsHandler.cpp new file mode 100644 index 000000000..cd904ffa6 --- /dev/null +++ b/libresapi/src/api/StatsHandler.cpp @@ -0,0 +1,39 @@ +#include "StatsHandler.h" +#include "Operators.h" + +#include +#include +#include + +namespace resource_api +{ + +StatsHandler::StatsHandler() +{ + addResourceHandler("*", this, &StatsHandler::handleStatsRequest); +} + +void StatsHandler::handleStatsRequest(Request &/*req*/, Response &resp) +{ + StreamBase& itemStream = resp.mDataStream.getStreamToMember(); + + // location info + itemStream << makeKeyValue("name", rsPeers->getGPGName(rsPeers->getGPGOwnId())); + itemStream << makeKeyValue("location", AuthSSL::getAuthSSL()->getOwnLocation()); + + // peer info + unsigned int all, online; + rsPeers->getPeerCount(&all, &online, false); + itemStream << makeKeyValue("peers_all", all); + itemStream << makeKeyValue("peers_connected", online); + + // bandwidth info + float downKb, upKb; + rsConfig->GetCurrentDataRates(downKb, upKb); + itemStream << makeKeyValue("bandwidth_up_kb", (double)upKb); + itemStream << makeKeyValue("bandwidth_down_kb", (double)downKb); + + resp.setOk(); +} + +} // namespace resource_api diff --git a/libresapi/src/api/StatsHandler.h b/libresapi/src/api/StatsHandler.h new file mode 100644 index 000000000..cbe8ae231 --- /dev/null +++ b/libresapi/src/api/StatsHandler.h @@ -0,0 +1,25 @@ +#ifndef STATSHANDLER_H +#define STATSHANDLER_H + +/* + * simple class to output some basic stats about RS + * like bandwidth, connected peers, ... + */ + +#include "ResourceRouter.h" + +namespace resource_api +{ + +class StatsHandler : public ResourceRouter +{ +public: + StatsHandler(); + +private: + void handleStatsRequest(Request& req, Response& resp); +}; + +} // namespace resource_api + +#endif // STATSHANDLER_H diff --git a/libresapi/src/libresapi.pro b/libresapi/src/libresapi.pro index 14faff570..b76b2a30b 100644 --- a/libresapi/src/libresapi.pro +++ b/libresapi/src/libresapi.pro @@ -146,7 +146,8 @@ SOURCES += \ api/TmpBlobStore.cpp \ util/ContentTypes.cpp \ api/ApiPluginHandler.cpp \ - api/ChannelsHandler.cpp + api/ChannelsHandler.cpp \ + api/StatsHandler.cpp HEADERS += \ api/ApiServer.h \ @@ -172,7 +173,8 @@ HEADERS += \ api/TmpBlobStore.h \ util/ContentTypes.h \ api/ApiPluginHandler.h \ - api/ChannelsHandler.h + api/ChannelsHandler.h \ + api/StatsHandler.h libresapilocalserver { CONFIG *= qt