From: brain Date: Thu, 8 May 2008 22:40:11 +0000 (+0000) Subject: Add call to protocol interface to get useful info on the server map. Return a std... X-Git-Tag: v2.0.23~3215 X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;ds=sidebyside;h=99a1ea0892b575c6d66d9f4c0aab5042c261ce4a;p=user%2Fhenk%2Fcode%2Finspircd.git 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 --- 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 parameterlist; +class ProtoServer +{ + public: + std::string servername; + std::string parentname; + unsigned int usercount; + unsigned int opercount; + unsigned int latencyms; +}; + +typedef std::list 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(u->second->server,1)); - } - } this->changed = false; } @@ -156,11 +143,17 @@ class ModuleHttpStats : public Module data << ""; - 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 << ""; - data << "" << b->first << ""; - data << "" << b->second << ""; + data << "" << b->servername << ""; + data << "" << b->parentname << ""; + data << "" << b->usercount << ""; + data << "" << b->opercount << ""; + data << "" << b->latencyms << ""; data << ""; } data << ""; 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 +