def test_manage(self): mm = metrics.MetricManager("vumi.test.") metric = metrics.Metric("foo") metric.manage(mm) self.assertEqual(metric.name, "foo") mm2 = metrics.MetricManager("vumi.othertest.") self.assertRaises(metrics.MetricRegistrationError, metric.manage, mm2)
def test_start_manager_publisher_and_channel(self): publisher = metrics.MetricPublisher() mm = metrics.MetricManager("vumi.test.", publisher=publisher) self.assertEqual(mm._publisher, publisher) self.assertEqual(mm._task, None) channel = yield get_stubbed_channel(self.worker_helper.broker) self.assertRaises(RuntimeError, mm.start, channel)
def test_start_manager_publisher_and_channel(self): publisher = metrics.MetricPublisher() mm = metrics.MetricManager("vumi.test.", publisher=publisher) self.assertEqual(mm._publisher, publisher) self.assertEqual(mm._task, None) yield self.assertFailure(self.start_manager_as_publisher(mm), RuntimeError)
def test_start_manager_no_publisher(self): mm = metrics.MetricManager("vumi.test.") self.assertEqual(mm._publisher, None) self.assertEqual(mm._task, None) yield self.start_manager_as_publisher(mm) self.assertIsInstance(mm._publisher, metrics.MetricPublisher) self.assertNotEqual(mm._task, None)
def test_publish_metrics_poll(self): mm = metrics.MetricManager("vumi.test.", 0.1, self.on_publish) cnt = mm.register(metrics.Count("my.count")) yield self.start_manager_as_publisher(mm) cnt.inc() mm.publish_metrics() self._check_msg(mm, cnt, [1])
def test_publish_metrics_oneshot(self): mm = metrics.MetricManager("vumi.test.", 0.1, self.on_publish) cnt = metrics.Count("my.count") yield self.start_manager_as_publisher(mm) mm.oneshot(cnt, 1) mm.publish_metrics() self._check_msg(mm, cnt, [1])
def test_start_polling_no_publisher(self): mm = metrics.MetricManager("vumi.test.") self.assertEqual(mm._publisher, None) self.assertEqual(mm._task, None) mm.start_polling() self.add_cleanup(mm.stop_polling) self.assertEqual(mm._publisher, None) self.assertNotEqual(mm._task, None)
def test_oneshot(self): self.patch(time, "time", lambda: 12345) mm = metrics.MetricManager("vumi.test.") cnt = metrics.Count("my.count") mm.oneshot(cnt, 3) self.assertEqual(cnt.name, "my.count") self.assertEqual(mm._oneshot_msgs, [ (cnt, [(12345, 3)]), ])
def test_start_polling_with_publisher(self): publisher = metrics.MetricPublisher() mm = metrics.MetricManager("vumi.test.", publisher=publisher) self.assertEqual(mm._publisher, publisher) self.assertEqual(mm._task, None) mm.start_polling() self.add_cleanup(mm.stop_polling) self.assertEqual(mm._publisher, publisher) self.assertNotEqual(mm._task, None)
def test_start_manager_no_publisher(self): mm = metrics.MetricManager("vumi.test.") self.assertEqual(mm._publisher, None) self.assertEqual(mm._task, None) channel = yield get_stubbed_channel(self.worker_helper.broker) mm.start(channel) self.add_cleanup(mm.stop) self.assertIsInstance(mm._publisher, metrics.MetricPublisher) self.assertNotEqual(mm._task, None)
def test_start(self): mm = metrics.MetricManager("vumi.test.", 0.1, self.on_publish) cnt = mm.register(metrics.Count("my.count")) yield self.start_manager_as_publisher(mm) self.assertTrue(mm._task is not None) self._check_msg(mm, cnt, None) cnt.inc() yield self.wait_publish() self._check_msg(mm, cnt, [1]) cnt.inc() cnt.inc() yield self.wait_publish() self._check_msg(mm, cnt, [1, 1])
def test_task_failure(self): mm = metrics.MetricManager("vumi.test.", 0.1) wait_error = Deferred() class BadMetricError(Exception): pass class BadMetric(metrics.Metric): def poll(self): wait_error.callback(None) raise BadMetricError("bad metric") mm.register(BadMetric("bad")) yield self.start_manager_as_publisher(mm) yield wait_error yield self._sleep(0) # allow log message to be processed error, = self.flushLoggedErrors(BadMetricError) self.assertTrue(error.type is BadMetricError)
def test_start(self): channel = yield get_stubbed_channel() broker = channel.broker mm = metrics.MetricManager("vumi.test.", 0.1, self.on_publish) cnt = mm.register(metrics.Count("my.count")) mm.start(channel) try: self.assertTrue(mm._task is not None) self._check_msg(broker, cnt, None) cnt.inc() yield self.wait_publish() self._check_msg(broker, cnt, [1]) cnt.inc() cnt.inc() yield self.wait_publish() self._check_msg(broker, cnt, [1, 1]) finally: mm.stop()
def test_stop_unstarted(self): mm = metrics.MetricManager("vumi.test.", 0.1, self.on_publish) mm.stop() mm.stop() # Check that .stop() is idempotent.
def test_lookup(self): mm = metrics.MetricManager("vumi.test.") cnt = mm.register(metrics.Count("my.count")) self.assertTrue("my.count" in mm) self.assertTrue(mm["my.count"] is cnt) self.assertEqual(mm["my.count"].name, "vumi.test.my.count")
def test_double_register(self): mm = metrics.MetricManager("vumi.test.") mm.register(metrics.Count("my.count")) self.assertRaises(metrics.MetricRegistrationError, mm.register, metrics.Count("my.count"))
def test_register(self): mm = metrics.MetricManager("vumi.test.") cnt = mm.register(metrics.Count("my.count")) self.assertEqual(cnt.name, "vumi.test.my.count") self.assertEqual(mm._metrics, [cnt])
def test_managed(self): metric = metrics.Metric("foo") self.assertFalse(metric.managed) mm = metrics.MetricManager("vumi.test.") metric.manage(mm) self.assertTrue(metric.managed)
def test_publish_metrics_not_started_no_publisher(self): mm = metrics.MetricManager("vumi.test.") self.assertEqual(mm._publisher, None) mm.oneshot(metrics.Count("my.count"), 1) self.assertRaises(ValueError, mm.publish_metrics)