Browse Source

[trac930] add statistics validation for bob

Naoki Kambe 13 years ago
parent
commit
703d5f36d0
2 changed files with 29 additions and 11 deletions
  1. 11 11
      src/bin/bind10/bind10_src.py.in
  2. 18 0
      src/bin/bind10/tests/bind10_test.py.in

+ 11 - 11
src/bin/bind10/bind10_src.py.in

@@ -325,18 +325,18 @@ class BoB:
                 answer = isc.config.ccsession.create_answer(0, self._get_stats_data())
             elif command == "sendstats":
                 # send statistics data to the stats daemon immediately
-                cmd = isc.config.ccsession.create_command(
+                statistics_data = {
+                    'boot_time': time.strftime('%Y-%m-%dT%H:%M:%SZ', _BASETIME)
+                    }
+                valid = self.ccs.get_module_spec().validate_statistics(
+                    True, statistics_data)
+                if valid:
+                    cmd = isc.config.ccsession.create_command(
                     'set', { "owner": "Boss",
-                             "data": {
-                            'boot_time': time.strftime('%Y-%m-%dT%H:%M:%SZ', _BASETIME)
-                            }})
-                seq = self.cc_session.group_sendmsg(cmd, 'Stats')
-                # Consume the answer, in case it becomes a orphan message.
-                try:
-                    self.cc_session.group_recvmsg(False, seq)
-                except isc.cc.session.SessionTimeout:
-                    pass
-                answer = isc.config.ccsession.create_answer(0)
+                             "data": statistics_data })
+                    seq = self.cc_session.group_sendmsg(cmd, 'Stats')
+                    self.cc_session.group_recvmsg(True, seq)
+                    answer = isc.config.ccsession.create_answer(0)
             elif command == "ping":
                 answer = isc.config.ccsession.create_answer(0, "pong")
             elif command == "show_processes":

+ 18 - 0
src/bin/bind10/tests/bind10_test.py.in

@@ -137,9 +137,27 @@ class TestBoB(unittest.TestCase):
             def group_sendmsg(self, msg, group):
                 (self.msg, self.group) = (msg, group)
             def group_recvmsg(self, nonblock, seq): pass
+        class DummyModuleCCSession():
+            module_spec = isc.config.module_spec.ModuleSpec({
+                    "module_name": "Boss",
+                    "statistics": [
+                        {
+                            "item_name": "boot_time",
+                            "item_type": "string",
+                            "item_optional": False,
+                            "item_default": "1970-01-01T00:00:00Z",
+                            "item_title": "Boot time",
+                            "item_description": "A date time when bind10 process starts initially",
+                            "item_format": "date-time"
+                            }
+                        ]
+                    })
+            def get_module_spec(self):
+                return self.module_spec
         bob = BoB()
         bob.verbose = True
         bob.cc_session = DummySession()
+        bob.ccs = DummyModuleCCSession()
         # a bad command
         self.assertEqual(bob.command_handler(-1, None),
                          isc.config.ccsession.create_answer(1, "bad command"))