class TestGauge(unittest.TestCase): def setUp(self): self.registry = CollectorRegistry() self.gauge = Gauge('g', 'help', registry=self.registry) def test_gauge(self): self.assertEqual(0, self.registry.get_sample_value('g')) self.gauge.inc() self.assertEqual(1, self.registry.get_sample_value('g')) self.gauge.dec(3) self.assertEqual(-2, self.registry.get_sample_value('g')) self.gauge.set(9) self.assertEqual(9, self.registry.get_sample_value('g')) def test_function_decorator(self): self.assertEqual(0, self.registry.get_sample_value('g')) @self.gauge.track_inprogress() def f(): self.assertEqual(1, self.registry.get_sample_value('g')) f() self.assertEqual(0, self.registry.get_sample_value('g')) def test_block_decorator(self): self.assertEqual(0, self.registry.get_sample_value('g')) with self.gauge.track_inprogress(): self.assertEqual(1, self.registry.get_sample_value('g')) self.assertEqual(0, self.registry.get_sample_value('g')) def test_gauge_function(self): x = {} self.gauge.set_function(lambda: len(x)) self.assertEqual(0, self.registry.get_sample_value('g')) self.gauge.inc() self.assertEqual(0, self.registry.get_sample_value('g')) x['a'] = None self.assertEqual(1, self.registry.get_sample_value('g')) def test_function_decorator(self): self.assertEqual(0, self.registry.get_sample_value('g')) @self.gauge.time() def f(): time.sleep(.001) f() self.assertNotEqual(0, self.registry.get_sample_value('g')) def test_block_decorator(self): self.assertEqual(0, self.registry.get_sample_value('g')) with self.gauge.time(): time.sleep(.001) self.assertNotEqual(0, self.registry.get_sample_value('g'))
with c.count_exceptions(): pass # Count only one type of exception with c.count_exceptions(ValueError): pass # Gauges: Used to track any value, anything that's not counting will be here (e.g. temperature, cpu usage, ...) # Can inc, dec, and set g = Gauge('my_inprogress_requests', 'Description of gauge') g.inc() # Increment by 1 g.dec(10) # Decrement by given value g.set(4.2) # Set to a given value g.set_to_current_time() # Set to current unixtime # Another use case: Increment when entered, decrement when exited. @g.track_inprogress() def f(): pass with g.track_inprogress(): pass # A gauge can also take its value from a callback d = Gauge('data_objects', 'Number of objects') my_dict = {} d.set_function(lambda: len(my_dict))
from prometheus_client import Counter from prometheus_client import Gauge c = Counter('my_failures', 'Description of counter') print(c) c.inc() # Increment by 1 print(c) c.inc(1.6) # Increment by given value print(c) print(c.collect()) g = Gauge("my_gauge", "my description of gauge") g.set(1) g.inc(1) g.dec(2) g.track_inprogress() # 在进入时加1,在退出时减一 @g.track_inprogress() def f(): pass