[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