@@ -13,7 +13,7 @@ class TestMultiProcess(unittest.TestCase):
13
13
def setUp (self ):
14
14
self .tempdir = tempfile .mkdtemp ()
15
15
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 )
17
17
self .registry = CollectorRegistry ()
18
18
MultiProcessCollector (self .registry , self .tempdir )
19
19
@@ -24,7 +24,7 @@ def tearDown(self):
24
24
25
25
def test_counter_adds (self ):
26
26
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 )
28
28
c2 = Counter ('c' , 'help' , registry = None )
29
29
self .assertEqual (0 , self .registry .get_sample_value ('c' ))
30
30
c1 .inc (1 )
@@ -33,7 +33,7 @@ def test_counter_adds(self):
33
33
34
34
def test_summary_adds (self ):
35
35
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 )
37
37
s2 = Summary ('s' , 'help' , registry = None )
38
38
self .assertEqual (0 , self .registry .get_sample_value ('s_count' ))
39
39
self .assertEqual (0 , self .registry .get_sample_value ('s_sum' ))
@@ -44,7 +44,7 @@ def test_summary_adds(self):
44
44
45
45
def test_histogram_adds (self ):
46
46
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 )
48
48
h2 = Histogram ('h' , 'help' , registry = None )
49
49
self .assertEqual (0 , self .registry .get_sample_value ('h_count' ))
50
50
self .assertEqual (0 , self .registry .get_sample_value ('h_sum' ))
@@ -57,7 +57,7 @@ def test_histogram_adds(self):
57
57
58
58
def test_gauge_all (self ):
59
59
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 )
61
61
g2 = Gauge ('g' , 'help' , registry = None )
62
62
self .assertEqual (0 , self .registry .get_sample_value ('g' , {'pid' : '123' }))
63
63
self .assertEqual (0 , self .registry .get_sample_value ('g' , {'pid' : '456' }))
@@ -69,7 +69,7 @@ def test_gauge_all(self):
69
69
70
70
def test_gauge_liveall (self ):
71
71
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 )
73
73
g2 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'liveall' )
74
74
self .assertEqual (0 , self .registry .get_sample_value ('g' , {'pid' : '123' }))
75
75
self .assertEqual (0 , self .registry .get_sample_value ('g' , {'pid' : '456'}))
@@ -83,7 +83,7 @@ def test_gauge_liveall(self):
83
83
84
84
def test_gauge_min (self ):
85
85
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 )
87
87
g2 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'min' )
88
88
self .assertEqual (0 , self .registry .get_sample_value ('g' ))
89
89
g1 .set (1 )
@@ -92,7 +92,7 @@ def test_gauge_min(self):
92
92
93
93
def test_gauge_max (self ):
94
94
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 )
96
96
g2 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'max' )
97
97
self .assertEqual (0 , self .registry .get_sample_value ('g' ))
98
98
g1 .set (1 )
@@ -101,7 +101,7 @@ def test_gauge_max(self):
101
101
102
102
def test_gauge_livesum (self ):
103
103
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 )
105
105
g2 = Gauge ('g' , 'help' , registry = None , multiprocess_mode = 'livesum' )
106
106
self .assertEqual (0 , self .registry .get_sample_value ('g' ))
107
107
g1 .set (1 )
@@ -115,6 +115,20 @@ def test_namespace_subsystem(self):
115
115
c1 .inc (1 )
116
116
self .assertEqual (1 , self .registry .get_sample_value ('ns_ss_c' ))
117
117
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
+
118
132
119
133
class TestMmapedDict (unittest .TestCase ):
120
134
def setUp (self ):
0 commit comments