[svn] commit: r275 - in /branches/f2f200910/src/bin/parkinglot: ccsession.cc ccsession.h main.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Sat Oct 31 00:31:32 UTC 2009
Author: jinmei
Date: Sat Oct 31 00:31:32 2009
New Revision: 275
Log:
supported statistics in an ad hoc manner
Modified:
branches/f2f200910/src/bin/parkinglot/ccsession.cc
branches/f2f200910/src/bin/parkinglot/ccsession.h
branches/f2f200910/src/bin/parkinglot/main.cc
Modified: branches/f2f200910/src/bin/parkinglot/ccsession.cc
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/ccsession.cc (original)
+++ branches/f2f200910/src/bin/parkinglot/ccsession.cc Sat Oct 31 00:31:32 2009
@@ -28,6 +28,9 @@
using namespace std;
+using ISC::Data::Element;
+using ISC::Data::ElementPtr;
+
CommandSession::CommandSession() :
session_(ISC::CC::Session())
{
@@ -35,6 +38,7 @@
session_.establish();
session_.subscribe("ParkingLot");
session_.subscribe("Boss");
+ session_.subscribe("statistics");
} catch (...) {
throw std::runtime_error("SessionManager: failed to open sessions");
}
@@ -47,44 +51,40 @@
}
std::pair<std::string, std::string>
-CommandSession::getCommand() {
- ISC::Data::ElementPtr cmd, routing, data, ep;
+CommandSession::getCommand(int counter) {
+ ElementPtr cmd, routing, data, ep;
string s;
session_.group_recvmsg(routing, data, false);
- cmd = data->get("command");
+ string channel = routing->get("group")->string_value();
- if (cmd != NULL) {
- ep = cmd->get(0);
- if (ep != NULL) {
- s = ep->string_value();
- if (s == "addzone" || s == "delzone") {
- return std::pair<string, string>(s,
- cmd->get(1)->string_value());
+ if (channel == "statistics") {
+ cmd = data->get("command");
+ if (cmd != NULL && cmd->string_value() == "getstat") {
+ struct timeval now;
+ ElementPtr resp = Element::create(std::map<std::string,
+ ElementPtr>());
+ gettimeofday(&now, NULL);
+ resp->set("sent", Element::create(now.tv_sec +
+ (double)now.tv_usec /
+ 1000000));
+ resp->set("counter", Element::create(counter));
+ session_.group_sendmsg(resp, "statistics");
+ }
+ } else {
+ cmd = data->get("command");
+ if (cmd != NULL) {
+ ep = cmd->get(0);
+ if (ep != NULL) {
+ s = ep->string_value();
+ if (s == "addzone" || s == "delzone") {
+ return std::pair<string, string>(s,
+ cmd->get(1)->string_value());
+ }
+ return std::pair<string, string>(s, "");
}
- return std::pair<string, string>(s, "");
}
}
return std::pair<string, string>("unknown", "");
}
-
-#ifdef samplecode
-void
-handleStatRequest()
-{
- ISC::Data::ElementPtr ep, routing, data;
-
- session.group_recvmsg(routing, data, false);
- ep = data->get("command");
- if (ep != NULL && ep->string_value() == "getstat") {
- struct timeval now;
- ElementPtr resp = Element::create(std::map<std::string, ElementPtr>());
- gettimeofday(&now, NULL);
- resp->set("sent", Element::create(now.tv_sec +
- (double)now.tv_usec / 1000000));
- resp->set("counter", Element::create(++counter));
- session.group_sendmsg(resp, "statistics");
- }
-}
-#endif
Modified: branches/f2f200910/src/bin/parkinglot/ccsession.h
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/ccsession.h (original)
+++ branches/f2f200910/src/bin/parkinglot/ccsession.h Sat Oct 31 00:31:32 2009
@@ -25,7 +25,7 @@
public:
CommandSession();
int getSocket();
- std::pair<std::string, std::string> getCommand();
+ std::pair<std::string, std::string> getCommand(int counter);
private:
ISC::CC::Session session_;
};
Modified: branches/f2f200910/src/bin/parkinglot/main.cc
==============================================================================
--- branches/f2f200910/src/bin/parkinglot/main.cc (original)
+++ branches/f2f200910/src/bin/parkinglot/main.cc Sat Oct 31 00:31:32 2009
@@ -77,6 +77,7 @@
int ps = plot.getSocket();
int ss = cs.getSocket();
int nfds = max(ps, ss) + 1;
+ int counter = 0;
cout << "Server started." << endl;
while (true) {
@@ -88,11 +89,13 @@
if (n < 0)
throw FatalError("select error");
- if (FD_ISSET(ps, &fds))
+ if (FD_ISSET(ps, &fds)) {
+ ++counter;
plot.processMessage();
+ }
if (FD_ISSET(ss, &fds)) {
- pair<string,string> cmd = cs.getCommand();
+ pair<string,string> cmd = cs.getCommand(counter);
plot.command(cmd);
}
}
More information about the bind10-changes
mailing list