@@ -13,7 +13,7 @@ class TestMultiProcess(unittest.TestCase):
1313 def setUp (self ):
1414 self .tempdir = tempfile .mkdtemp ()
1515 os .environ ['prometheus_multiproc_dir' ] = self .tempdir
16- prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (123 )
16+ prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (lambda : 123 )
1717 self .registry = CollectorRegistry ()
1818 MultiProcessCollector (self .registry , self .tempdir )
1919
@@ -24,7 +24,7 @@ def tearDown(self):
2424
2525 def test_counter_adds (self ):
2626 c1 = Counter ('c' , 'help' , registry = None )
27- prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (456 )
27+ prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (lambda : 456 )
2828 c2 = Counter ('c' , 'help' , registry = None )
2929 self .assertEqual (0 , self .registry .get_sample_value ('c' ))
3030 c1 .inc (1 )
@@ -33,7 +33,7 @@ def test_counter_adds(self):
3333
3434 def test_summary_adds (self ):
3535 s1 = Summary ('s' , 'help' , registry = None )
36- prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (456 )
36+ prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (lambda : 456 )
3737 s2 = Summary ('s' , 'help' , registry = None )
3838 self .assertEqual (0 , self .registry .get_sample_value ('s_count' ))
3939 self .assertEqual (0 , self .registry .get_sample_value ('s_sum' ))
@@ -44,7 +44,7 @@ def test_summary_adds(self):
4444
4545 def test_histogram_adds (self ):
4646 h1 = Histogram ('h' , 'help' , registry = None )
47- prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (456 )
47+ prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (lambda : 456 )
4848 h2 = Histogram ('h' , 'help' , registry = None )
4949 self .assertEqual (0 , self .registry .get_sample_value ('h_count' ))
5050 self .assertEqual (0 , self .registry .get_sample_value ('h_sum' ))
@@ -57,7 +57,7 @@ def test_histogram_adds(self):
5757
5858 def test_gauge_all (self ):
5959 g1 = Gauge ('g' , 'help' , registry = None )
60- prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (456 )
60+ prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (lambda : 456 )
6161 g2 = Gauge ('g' , 'help' , registry = None )
6262 self .assertEqual (0 , self .registry .get_sample_value ('g' , {'pid' : '123' }))
6363 self .assertEqual (0 , self .registry .get_sample_value ('g' , {'pid' : '456' }))
@@ -69,7 +69,7 @@ def test_gauge_all(self):
6969
7070 def test_gauge_liveall (self ):
7171 g1 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'liveall' )
72- prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (456 )
72+ prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (lambda : 456 )
7373 g2 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'liveall' )
7474 self .assertEqual (0 , self .registry .get_sample_value ('g' , {'pid' : '123' }))
7575 self .assertEqual (0 , self .registry .get_sample_value ('g' , {'pid' : '456' }))
@@ -83,7 +83,7 @@ def test_gauge_liveall(self):
8383
8484 def test_gauge_min (self ):
8585 g1 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'min' )
86- prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (456 )
86+ prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (lambda : 456 )
8787 g2 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'min' )
8888 self .assertEqual (0 , self .registry .get_sample_value ('g' ))
8989 g1 .set (1 )
@@ -92,7 +92,7 @@ def test_gauge_min(self):
9292
9393 def test_gauge_max (self ):
9494 g1 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'max' )
95- prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (456 )
95+ prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (lambda : 456 )
9696 g2 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'max' )
9797 self .assertEqual (0 , self .registry .get_sample_value ('g' ))
9898 g1 .set (1 )
@@ -101,7 +101,7 @@ def test_gauge_max(self):
101101
102102 def test_gauge_livesum (self ):
103103 g1 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'livesum' )
104- prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (456 )
104+ prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (lambda : 456 )
105105 g2 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'livesum' )
106106 self .assertEqual (0 , self .registry .get_sample_value ('g' ))
107107 g1 .set (1 )
@@ -115,6 +115,20 @@ def test_namespace_subsystem(self):
115115 c1 .inc (1 )
116116 self .assertEqual (1 , self .registry .get_sample_value ('ns_ss_c' ))
117117
118+ def test_counter_across_forks (self ):
119+ pid = 0
120+ def get_pid ():
121+ return pid
122+ prometheus_client .core ._ValueClass = prometheus_client .core ._MultiProcessValue (get_pid )
123+ c1 = Counter ('c' , 'help' , registry = None )
124+ self .assertEqual (0 , self .registry .get_sample_value ('c' ))
125+ c1 .inc (1 )
126+ c1 .inc (1 )
127+ pid = 1
128+ c1 .inc (1 )
129+ self .assertEqual (3 , self .registry .get_sample_value ('c' ))
130+ self .assertEqual (1 , c1 ._value .get ())
131+
118132
119133class TestMmapedDict (unittest .TestCase ):
120134 def setUp (self ):
0 commit comments