def test_multiple_decorators(self): mm = MetricManager() mr = BaseMetricsReporter() mm.setup_reporters(mr) mm.start() @mm.meter_calls @mm.count_calls @mm.hist_calls @mm.time_calls def somefunc(i): return i self.assertEqual(somefunc(1), 1) self.assertEqual(somefunc(1, context='test'), 1) # check metrics collected for reporter in mm.metric_reporters: timestamp, metrics = reporter.get_metrics() self.assertIsInstance(timestamp, integer_types) self.assertIsInstance(metrics, dict) self.assertEqual(len(metrics), 3) # context aware self.assertIn('test.meter', metrics) self.assertIsInstance(metrics['test.meter'], dict) self.assertGreater(metrics['test.meter']['mean_rate'], 100) # normal one self.assertIn('somefunc.calls', metrics) self.assertIsInstance(metrics['somefunc.calls'], dict) self.assertEqual(metrics['somefunc.calls']['count'], 2) mm.stop()
def test_start_stop_mechanism(self): mm = MetricManager() mr = BaseMetricsReporter() mm.setup_reporters(mr) mm.start() for mr in mm.metric_reporters: self.assertTrue(mr.task.running) mm.stop() for mr in mm.metric_reporters: self.assertFalse(mr.task.running)
def test_metric_getter(self): mm = MetricManager() mr = BaseMetricsReporter() mm.setup_reporters(mr) mm.start() # increment counters for counter in mm.counters('test'): counter.inc() timestamp, metrics = mr.get_metrics() self.assertIsInstance(timestamp, integer_types) self.assertIsInstance(metrics, dict) self.assertEqual(len(metrics), 1) self.assertIn('test', metrics) self.assertIsInstance(metrics['test'], dict) self.assertEqual(metrics['test']['count'], 1) mm.stop()
def test_timer_decorator(self): mm = MetricManager() mr = BaseMetricsReporter() mm.setup_reporters(mr) mm.start() @mm.time_calls def somefunc(i): return i @mm.time_calls def badfunc(i): raise Exception("test exception") self.assertEqual(somefunc(1), 1) self.assertEqual(somefunc(1, context='test'), 1) with self.assertRaises(Exception): badfunc(1) # check metrics collected for reporter in mm.metric_reporters: timestamp, metrics = reporter.get_metrics() self.assertIsInstance(timestamp, integer_types) self.assertIsInstance(metrics, dict) self.assertEqual(len(metrics), 5) # context aware self.assertIn('test.timer', metrics) self.assertIsInstance(metrics['test.timer'], dict) self.assertLess(metrics['test.timer']['max'], 0.01) # normal one self.assertIn('somefunc.timer', metrics) self.assertIsInstance(metrics['somefunc.timer'], dict) self.assertLess(metrics['somefunc.timer']['max'], 0.01) mm.stop()