diff --git a/include/transport/networkpluginserver.h b/include/transport/networkpluginserver.h index f04db01b..e1ef1d92 100644 --- a/include/transport/networkpluginserver.h +++ b/include/transport/networkpluginserver.h @@ -69,7 +69,7 @@ class NetworkPluginServer { void collectBackend(); - void moveToLongRunBackend(User *user); + bool moveToLongRunBackend(User *user); void handleMessageReceived(NetworkConversation *conv, boost::shared_ptr &message); diff --git a/spectrum/src/sample.cfg b/spectrum/src/sample.cfg index 39d761b4..f5113b16 100644 --- a/spectrum/src/sample.cfg +++ b/spectrum/src/sample.cfg @@ -8,7 +8,7 @@ backend_host=localhost # < this option doesn't work yet backend_port=10001 admin_username=admin admin_password=test -#idle_reconnect_time=10 +idle_reconnect_time=10 #cert= #patch to PKCS#12 certificate #cert_password= #password to that certificate if any users_per_backend=10 diff --git a/src/admininterface.cpp b/src/admininterface.cpp index 993df116..6c2b16f4 100644 --- a/src/admininterface.cpp +++ b/src/admininterface.cpp @@ -107,14 +107,20 @@ void AdminInterface::handleMessageReceived(Swift::Message::ref message) { const std::list &backends = m_server->getBackends(); for (std::list ::const_iterator b = backends.begin(); b != backends.end(); b++) { NetworkPluginServer::Backend *backend = *b; - lst += "Backend " + boost::lexical_cast(id) + ":\n"; + lst += "Backend " + boost::lexical_cast(id); + lst += backend->acceptUsers ? "" : " - not-accepting"; + lst += backend->longRun ? " - long-running" : ""; + lst += ":\n"; if (backend->users.size() == 0) { lst += " waiting for users\n"; } else { + time_t now = time(NULL); for (std::list::const_iterator u = backend->users.begin(); u != backend->users.end(); u++) { User *user = *u; - lst += " " + user->getJID().toBare().toString() + "\n"; + lst += " " + user->getJID().toBare().toString(); + lst += " - non-active for " + boost::lexical_cast(now - user->getLastActivity()) + " seconds"; + lst += "\n"; } } id++; diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index bfbbbb30..e5f35bfc 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -612,7 +612,8 @@ void NetworkPluginServer::pingTimeout() { BOOST_FOREACH(User *u, usersToMove) { LOG4CXX_INFO(logger, "Moving user " << u->getJID().toString() << " to long-running backend"); - moveToLongRunBackend(u); + if (!moveToLongRunBackend(u)) + break; } @@ -655,18 +656,18 @@ void NetworkPluginServer::collectBackend() { } } -void NetworkPluginServer::moveToLongRunBackend(User *user) { +bool NetworkPluginServer::moveToLongRunBackend(User *user) { // Check if user has already some backend Backend *old = (Backend *) user->getData(); if (!old) { LOG4CXX_INFO(logger, "User " << user->getJID().toString() << " does not have old backend. Not moving."); - return; + return true; } // if he's already on long run, do nothing if (old->longRun) { LOG4CXX_INFO(logger, "User " << user->getJID().toString() << " is already on long-running backend. Not moving."); - return; + return true; } // Get free longrun backend, if there's no longrun backend, create one and wait @@ -674,7 +675,7 @@ void NetworkPluginServer::moveToLongRunBackend(User *user) { Backend *backend = getFreeClient(false, true); if (!backend) { LOG4CXX_INFO(logger, "No free long-running backend for user " << user->getJID().toString() << ". Will try later"); - return; + return false; } // old backend will trigger disconnection which has to be ignored to keep user online @@ -690,6 +691,7 @@ void NetworkPluginServer::moveToLongRunBackend(User *user) { // connect him handleUserReadyToConnect(user); + return true; } void NetworkPluginServer::handleUserCreated(User *user) {