summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2008-05-08 22:40:11 +0000
committerbrain <brain@e03df62e-2008-0410-955e-edbf42e46eb7>2008-05-08 22:40:11 +0000
commit99a1ea0892b575c6d66d9f4c0aab5042c261ce4a (patch)
tree42f369f72519bf4e13ac30d5851166de8b897073
parent2425244549a45295168b1958b9d599e5e286e629 (diff)
Add call to protocol interface to get useful info on the server map. Return a std::list of classes each of which has a server name, parent server name, user and oper count, and latency in millisecs
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@9673 e03df62e-2008-0410-955e-edbf42e46eb7
-rw-r--r--include/protocol.h14
-rw-r--r--src/modules/m_httpd_stats.cpp27
-rw-r--r--src/modules/m_spanningtree/protocolinterface.cpp16
-rw-r--r--src/modules/m_spanningtree/protocolinterface.h3
4 files changed, 42 insertions, 18 deletions
diff --git a/include/protocol.h b/include/protocol.h
index 16e347ad2..44013a1ca 100644
--- a/include/protocol.h
+++ b/include/protocol.h
@@ -20,6 +20,18 @@ class InspIRCd;
typedef std::deque<std::string> parameterlist;
+class ProtoServer
+{
+ public:
+ std::string servername;
+ std::string parentname;
+ unsigned int usercount;
+ unsigned int opercount;
+ unsigned int latencyms;
+};
+
+typedef std::list<ProtoServer> ProtoServerList;
+
class ProtocolInterface : public Extensible
{
protected:
@@ -60,6 +72,8 @@ class ProtocolInterface : public Extensible
virtual void SendUserPrivmsg(User* target, const std::string &text) { }
virtual void SendUserNotice(User* target, const std::string &text) { }
+
+ virtual void GetServerList(ProtoServerList &sl) { }
};
#endif
diff --git a/src/modules/m_httpd_stats.cpp b/src/modules/m_httpd_stats.cpp
index d95824c83..aa64dc3ea 100644
--- a/src/modules/m_httpd_stats.cpp
+++ b/src/modules/m_httpd_stats.cpp
@@ -13,6 +13,7 @@
#include "inspircd.h"
#include "httpd.h"
+#include "protocol.h"
/* $ModDesc: Provides statistics over HTTP via m_httpd.so */
/* $ModDep: httpd.h */
@@ -26,8 +27,6 @@ typedef SortedList::iterator SortedIter;
static StatsHash* sh = new StatsHash();
static SortedList* so = new SortedList();
-static StatsHash* Servers = new StatsHash();
-
class ModuleHttpStats : public Module
{
@@ -73,18 +72,6 @@ class ModuleHttpStats : public Module
so->clear();
for (StatsIter a = sh->begin(); a != sh->end(); a++)
InsertOrder(a->first, a->second);
- for (user_hash::iterator u = ServerInstance->Users->clientlist->begin(); u != ServerInstance->Users->clientlist->end(); u++)
- {
- StatsHash::iterator n = Servers->find(u->second->server);
- if (n != Servers->end())
- {
- n->second++;
- }
- else
- {
- Servers->insert(std::make_pair<irc::string,int>(u->second->server,1));
- }
- }
this->changed = false;
}
@@ -156,11 +143,17 @@ class ModuleHttpStats : public Module
data << "<serverlist>";
- for (StatsHash::iterator b = Servers->begin(); b != Servers->end(); b++)
+ ProtoServerList sl;
+ ServerInstance->PI->GetServerList(sl);
+
+ for (ProtoServerList::iterator b = sl.begin(); b != sl.end(); ++b)
{
data << "<server>";
- data << "<servername>" << b->first << "</servername>";
- data << "<usercount>" << b->second << "</usercount>";
+ data << "<servername>" << b->servername << "</servername>";
+ data << "<parentname>" << b->parentname << "</parentname>";
+ data << "<usercount>" << b->usercount << "</usercount>";
+ data << "<opercount>" << b->opercount << "</opercount>";
+ data << "<lagmillisecs>" << b->latencyms << "</lagmillisecs>";
data << "</server>";
}
data << "</serverlist>";
diff --git a/src/modules/m_spanningtree/protocolinterface.cpp b/src/modules/m_spanningtree/protocolinterface.cpp
index 7aed1ddfa..e586c7017 100644
--- a/src/modules/m_spanningtree/protocolinterface.cpp
+++ b/src/modules/m_spanningtree/protocolinterface.cpp
@@ -5,6 +5,22 @@
#include "m_spanningtree/treesocket.h"
#include "m_spanningtree/protocolinterface.h"
+void SpanningTreeProtocolInterface::GetServerList(ProtoServerList &sl)
+{
+ sl.clear();
+ for (server_hash::iterator i = Utils->serverlist.begin(); i != Utils->serverlist.end(); i++)
+ {
+ ProtoServer ps;
+ ps.servername = i->second->GetName();
+ TreeServer* s = i->second->GetParent();
+ ps.parentname = s ? s->GetName() : ServerInstance->Config->ServerName;
+ ps.usercount = i->second->GetUserCount();
+ ps.opercount = i->second->GetOperCount();
+ ps.latencyms = i->second->rtt;
+ sl.push_back(ps);
+ }
+}
+
void SpanningTreeProtocolInterface::SendEncapsulatedData(parameterlist &encap)
{
Utils->DoOneToMany(ServerInstance->Config->GetSID(), "ENCAP", encap);
diff --git a/src/modules/m_spanningtree/protocolinterface.h b/src/modules/m_spanningtree/protocolinterface.h
index 60f961a22..b43e88c67 100644
--- a/src/modules/m_spanningtree/protocolinterface.h
+++ b/src/modules/m_spanningtree/protocolinterface.h
@@ -4,7 +4,6 @@
class SpanningTreeUtilities;
class ModuleSpanningTree;
-
class SpanningTreeProtocolInterface : public ProtocolInterface
{
SpanningTreeUtilities* Utils;
@@ -25,6 +24,8 @@ class SpanningTreeProtocolInterface : public ProtocolInterface
virtual void SendChannelNotice(Channel* target, char status, const std::string &text);
virtual void SendUserPrivmsg(User* target, const std::string &text);
virtual void SendUserNotice(User* target, const std::string &text);
+ virtual void GetServerList(ProtoServerList &sl);
};
#endif
+