Beispiel #1
0
 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)
Beispiel #2
0
 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)
Beispiel #3
0
 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)
Beispiel #4
0
 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)
Beispiel #5
0
    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])
Beispiel #6
0
    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])
Beispiel #7
0
 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)
Beispiel #8
0
 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)]),
     ])
Beispiel #9
0
 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)
Beispiel #10
0
 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)
Beispiel #11
0
    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])
Beispiel #12
0
    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)
Beispiel #13
0
    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()
Beispiel #14
0
 def test_stop_unstarted(self):
     mm = metrics.MetricManager("vumi.test.", 0.1, self.on_publish)
     mm.stop()
     mm.stop()  # Check that .stop() is idempotent.
Beispiel #15
0
 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")
Beispiel #16
0
 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"))
Beispiel #17
0
 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])
Beispiel #18
0
 def test_managed(self):
     metric = metrics.Metric("foo")
     self.assertFalse(metric.managed)
     mm = metrics.MetricManager("vumi.test.")
     metric.manage(mm)
     self.assertTrue(metric.managed)
Beispiel #19
0
 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)