class TestSummary(unittest.TestCase): def setUp(self): self.registry = CollectorRegistry() self.summary = Summary('s', 'help', registry=self.registry) def test_summary(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) self.assertEqual(0, self.registry.get_sample_value('s_sum')) self.summary.observe(10) self.assertEqual(1, self.registry.get_sample_value('s_count')) self.assertEqual(10, self.registry.get_sample_value('s_sum')) def test_function_decorator(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) @self.summary.time() def f(): pass self.assertEqual(([], None, None, None), inspect.getargspec(f)) f() self.assertEqual(1, self.registry.get_sample_value('s_count')) def test_block_decorator(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) with self.summary.time(): pass self.assertEqual(1, self.registry.get_sample_value('s_count'))
def test_summary_adds(self): s1 = Summary('s', 'help', registry=None) s2 = Summary('s', 'help', registry=None) self.assertEqual(0, self.registry.get_sample_value('s_count')) self.assertEqual(0, self.registry.get_sample_value('s_sum')) s1.observe(1) s2.observe(2) self.assertEqual(2, self.registry.get_sample_value('s_count')) self.assertEqual(3, self.registry.get_sample_value('s_sum'))
def test_summary_adds(self): s1 = Summary('s', 'help', registry=None) values.ValueClass = MultiProcessValue(lambda: 456) s2 = Summary('s', 'help', registry=None) self.assertEqual(0, self.registry.get_sample_value('s_count')) self.assertEqual(0, self.registry.get_sample_value('s_sum')) s1.observe(1) s2.observe(2) self.assertEqual(2, self.registry.get_sample_value('s_count')) self.assertEqual(3, self.registry.get_sample_value('s_sum'))
class TestSummary(unittest.TestCase): def setUp(self): self.registry = CollectorRegistry() self.summary = Summary('s', 'help', registry=self.registry) def test_summary(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) self.assertEqual(0, self.registry.get_sample_value('s_sum')) self.summary.observe(10) self.assertEqual(1, self.registry.get_sample_value('s_count')) self.assertEqual(10, self.registry.get_sample_value('s_sum')) def test_function_decorator(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) @self.summary.time() def f(): pass self.assertEqual(([], None, None, None), inspect.getargspec(f)) f() self.assertEqual(1, self.registry.get_sample_value('s_count')) def test_function_decorator_multithread(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) summary2 = Summary('s2', 'help', registry=self.registry) workers = 3 duration = 0.1 pool = ThreadPoolExecutor(max_workers=workers) @self.summary.time() def f(): time.sleep(duration / 2) # Testing that different instances of timer do not interfere summary2.time()(lambda : time.sleep(duration / 2))() jobs = workers * 3 for i in range(jobs): pool.submit(f) pool.shutdown(wait=True) self.assertEqual(jobs, self.registry.get_sample_value('s_count')) rounding_coefficient = 0.9 total_expected_duration = jobs * duration * rounding_coefficient self.assertLess(total_expected_duration, self.registry.get_sample_value('s_sum')) self.assertLess(total_expected_duration / 2 , self.registry.get_sample_value('s2_sum')) def test_block_decorator(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) with self.summary.time(): pass self.assertEqual(1, self.registry.get_sample_value('s_count'))
class TestSummary(unittest.TestCase): def setUp(self): self.registry = CollectorRegistry() self.summary = Summary('s', 'help', registry=self.registry) def test_repr(self): self.assertEqual(repr(self.summary), "prometheus_client.metrics.Summary(s)") def test_summary(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) self.assertEqual(0, self.registry.get_sample_value('s_sum')) self.summary.observe(10) self.assertEqual(1, self.registry.get_sample_value('s_count')) self.assertEqual(10, self.registry.get_sample_value('s_sum')) def test_function_decorator(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) @self.summary.time() def f(): pass self.assertEqual(([], None, None, None), getargspec(f)) f() self.assertEqual(1, self.registry.get_sample_value('s_count')) def test_function_decorator_multithread(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) summary2 = Summary('s2', 'help', registry=self.registry) workers = 3 duration = 0.1 pool = ThreadPoolExecutor(max_workers=workers) @self.summary.time() def f(): time.sleep(duration / 2) # Testing that different instances of timer do not interfere summary2.time()(lambda: time.sleep(duration / 2))() jobs = workers * 3 for i in range(jobs): pool.submit(f) pool.shutdown(wait=True) self.assertEqual(jobs, self.registry.get_sample_value('s_count')) rounding_coefficient = 0.9 total_expected_duration = jobs * duration * rounding_coefficient self.assertLess(total_expected_duration, self.registry.get_sample_value('s_sum')) self.assertLess(total_expected_duration / 2, self.registry.get_sample_value('s2_sum')) def test_function_decorator_reentrancy(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) iterations = 2 sleep = 0.1 @self.summary.time() def f(i=1): time.sleep(sleep) if i == iterations: return f(i + 1) f() self.assertEqual(iterations, self.registry.get_sample_value('s_count')) # Arithmetic series with d == a_1 total_expected_duration = sleep * (iterations ** 2 + iterations) / 2 rounding_coefficient = 0.9 total_expected_duration *= rounding_coefficient self.assertLess(total_expected_duration, self.registry.get_sample_value('s_sum')) def test_block_decorator(self): self.assertEqual(0, self.registry.get_sample_value('s_count')) with self.summary.time(): pass self.assertEqual(1, self.registry.get_sample_value('s_count')) def test_timer_not_observable(self): s = Summary('test', 'help', labelnames=('label',), registry=self.registry) try: s.time() except ValueError as e: self.assertIn('missing label values', str(e))
def test_reset_registry(self): registry = CollectorRegistry() gauge = Gauge('g', 'help', registry=registry) gauge.inc() self.assertEqual(1, registry.get_sample_value('g')) counter = Counter('c_total', 'help', registry=registry) counter.inc() self.assertEqual(1, registry.get_sample_value('c_total')) summary = Summary('s', 'help', registry=registry) summary.observe(10) self.assertEqual(1, registry.get_sample_value('s_count')) self.assertEqual(10, registry.get_sample_value('s_sum')) histogram = Histogram('h', 'help', registry=registry) histogram.observe(2) self.assertEqual(0, registry.get_sample_value('h_bucket', {'le': '1.0'})) self.assertEqual(1, registry.get_sample_value('h_bucket', {'le': '2.5'})) self.assertEqual(1, registry.get_sample_value('h_bucket', {'le': '5.0'})) self.assertEqual(1, registry.get_sample_value('h_bucket', {'le': '+Inf'})) self.assertEqual(1, registry.get_sample_value('h_count')) self.assertEqual(2, registry.get_sample_value('h_sum')) registry.reset() self.assertEqual(0, registry.get_sample_value('g')) self.assertEqual(0, registry.get_sample_value('c_total')) self.assertEqual(0, registry.get_sample_value('s_count')) self.assertEqual(0, registry.get_sample_value('s_sum')) self.assertEqual(0, registry.get_sample_value('h_bucket', {'le': '1.0'})) self.assertEqual(0, registry.get_sample_value('h_bucket', {'le': '2.5'})) self.assertEqual(0, registry.get_sample_value('h_bucket', {'le': '5.0'})) self.assertEqual(0, registry.get_sample_value('h_bucket', {'le': '+Inf'})) self.assertEqual(0, registry.get_sample_value('h_count')) self.assertEqual(0, registry.get_sample_value('h_sum')) # -------------------------- gauge.inc() gauge.inc() gauge.inc() gauge.dec() self.assertEqual(2, registry.get_sample_value('g')) counter.inc() counter.inc() counter.inc() self.assertEqual(3, registry.get_sample_value('c_total')) summary.observe(10) summary.observe(5) self.assertEqual(2, registry.get_sample_value('s_count')) self.assertEqual(15, registry.get_sample_value('s_sum')) histogram.observe(2) histogram.observe(6) histogram.observe(1) self.assertEqual(1, registry.get_sample_value('h_bucket', {'le': '1.0'})) self.assertEqual(2, registry.get_sample_value('h_bucket', {'le': '2.5'})) self.assertEqual(2, registry.get_sample_value('h_bucket', {'le': '5.0'})) self.assertEqual(3, registry.get_sample_value('h_bucket', {'le': '+Inf'})) self.assertEqual(3, registry.get_sample_value('h_count')) self.assertEqual(9, registry.get_sample_value('h_sum')) registry.reset() self.assertEqual(0, registry.get_sample_value('g')) self.assertEqual(0, registry.get_sample_value('c_total')) self.assertEqual(0, registry.get_sample_value('s_count')) self.assertEqual(0, registry.get_sample_value('s_sum')) self.assertEqual(0, registry.get_sample_value('h_bucket', {'le': '1.0'})) self.assertEqual(0, registry.get_sample_value('h_bucket', {'le': '2.5'})) self.assertEqual(0, registry.get_sample_value('h_bucket', {'le': '5.0'})) self.assertEqual(0, registry.get_sample_value('h_bucket', {'le': '+Inf'})) self.assertEqual(0, registry.get_sample_value('h_count')) self.assertEqual(0, registry.get_sample_value('h_sum'))