diff --git a/include/transport/networkpluginserver.h b/include/transport/networkpluginserver.h index e0ce31f9..5572780a 100644 --- a/include/transport/networkpluginserver.h +++ b/include/transport/networkpluginserver.h @@ -71,6 +71,10 @@ class NetworkPluginServer { return m_clients; } + const std::vector &getCrashedBackends() { + return m_crashedBackends; + } + void collectBackend(); bool moveToLongRunBackend(User *user); @@ -138,6 +142,7 @@ class NetworkPluginServer { bool m_isNextLongRun; std::map m_filetransfers; FileTransferManager *m_ftManager; + std::vector m_crashedBackends; }; } diff --git a/include/transport/usermanager.h b/include/transport/usermanager.h index 5ea47d5c..2601be21 100644 --- a/include/transport/usermanager.h +++ b/include/transport/usermanager.h @@ -116,6 +116,13 @@ class UserManager : public Swift::EntityCapsProvider { /// \param user JID of user. void disconnectUser(const Swift::JID &user); + void messageToXMPPSent() { m_sentToXMPP++; } + void messageToBackendSent() { m_sentToBackend++; } + + unsigned long getMessagesToXMPP() { return m_sentToXMPP; } + unsigned long getMessagesToBackend() { return m_sentToBackend; } + + private: void handlePresence(Swift::Presence::ref presence); void handleMessageReceived(Swift::Message::ref message); @@ -134,6 +141,8 @@ class UserManager : public Swift::EntityCapsProvider { StorageResponder *m_storageResponder; UserRegistry *m_userRegistry; Swift::Timer::ref m_removeTimer; + unsigned long m_sentToXMPP; + unsigned long m_sentToBackend; friend class RosterResponder; }; diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index f3f891f0..2ae551af 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -351,6 +351,10 @@ void NetworkPluginServer::handleSessionFinished(Backend *c) { // If there are users associated with this backend, it must have crashed, so print error output // and disconnect users + if (!c->users.empty()) { + m_crashedBackends.push_back(c->id); + } + for (std::list::const_iterator it = c->users.begin(); it != c->users.end(); it++) { LOG4CXX_ERROR(logger, "Backend " << c << " disconnected (probably crashed) with active user " << (*it)->getJID().toString()); (*it)->setData(NULL); diff --git a/src/statsresponder.cpp b/src/statsresponder.cpp index 802a1bbd..bf4e4b5f 100644 --- a/src/statsresponder.cpp +++ b/src/statsresponder.cpp @@ -81,7 +81,10 @@ bool StatsResponder::handleGetRequest(const Swift::JID& from, const Swift::JID& response->addItem(StatsPayload::Item("users/online")); response->addItem(StatsPayload::Item("contacts/online")); response->addItem(StatsPayload::Item("contacts/total")); - response->addItem(StatsPayload::Item("backends")); + response->addItem(StatsPayload::Item("messages/from-xmpp")); + response->addItem(StatsPayload::Item("messages/to-xmpp")); + response->addItem(StatsPayload::Item("backends/running")); + response->addItem(StatsPayload::Item("backends/crashed")); response->addItem(StatsPayload::Item("memory-usage")); } else { @@ -115,8 +118,11 @@ bool StatsResponder::handleGetRequest(const Swift::JID& from, const Swift::JID& else if (item.getName() == "users/online") { response->addItem(StatsPayload::Item("users/online", "users", boost::lexical_cast(m_userManager->getUserCount()))); } - else if (item.getName() == "backends") { - response->addItem(StatsPayload::Item("backends", "backends", boost::lexical_cast(m_server->getBackendCount()))); + else if (item.getName() == "backends/running") { + response->addItem(StatsPayload::Item("backends/running", "backends", boost::lexical_cast(m_server->getBackendCount()))); + } + else if (item.getName() == "backends/crashed") { + response->addItem(StatsPayload::Item("backends/crashed", "backends", boost::lexical_cast(m_server->getCrashedBackends().size()))); } else if (item.getName() == "memory-usage") { response->addItem(StatsPayload::Item("memory-usage", "KB", boost::lexical_cast(usedMemory()))); @@ -127,6 +133,12 @@ bool StatsResponder::handleGetRequest(const Swift::JID& from, const Swift::JID& else if (item.getName() == "contacts/total") { response->addItem(StatsPayload::Item("contacts/total", "contacts", boost::lexical_cast(contactsTotal))); } + else if (item.getName() == "messages/from-xmpp") { + response->addItem(StatsPayload::Item("messages/from-xmpp", "messages", boost::lexical_cast(m_userManager->getMessagesToBackend()))); + } + else if (item.getName() == "messages/to-xmpp") { + response->addItem(StatsPayload::Item("messages/to-xmpp", "messages", boost::lexical_cast(m_userManager->getMessagesToXMPP()))); + } } } diff --git a/src/usermanager.cpp b/src/usermanager.cpp index 08823715..ed99e668 100644 --- a/src/usermanager.cpp +++ b/src/usermanager.cpp @@ -42,6 +42,8 @@ static LoggerPtr logger = Logger::getLogger("UserManager"); UserManager::UserManager(Component *component, UserRegistry *userRegistry, StorageBackend *storageBackend) { m_cachedUser = NULL; m_onlineBuddies = 0; + m_sentToXMPP = 0; + m_sentToBackend = 0; m_component = component; m_storageBackend = storageBackend; m_storageResponder = NULL;