prometheus-client-mmap 0.7.0.beta29 → 0.7.0.beta30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: baae77f6d273813515be523af6a16e159006f636
|
4
|
+
data.tar.gz: 60a044917b7edb908639a22df60727d85136297f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 305cf2a73f788de59de593483847ecb105c8a79b6a98a9f308d1d02a3ac6263b141ae17a546756642cb8ab1e7f9dcaa94b6ae3a9edeeaffcd86628a9ffaf3106
|
7
|
+
data.tar.gz: d3df54b93d82293d7d4a66ca59811296e11b6543128fe7eb354248dd56fe977bfe071d11feb192dcc1247fc20e9dbbfbf2aa255602ff8afbf54233b6c4082684
|
@@ -26,22 +26,6 @@ module Prometheus
|
|
26
26
|
self[0..3] = [value].pack('l')
|
27
27
|
end
|
28
28
|
|
29
|
-
def try_add_entry(data, value)
|
30
|
-
self.used = START_POSITION if used.zero?
|
31
|
-
|
32
|
-
# Pad to be 8-byte aligned.
|
33
|
-
padded = data + (' ' * (8 - (data.length + 4) % 8))
|
34
|
-
entry = [data.length, padded, value].pack("lA#{padded.length}d")
|
35
|
-
used_ = used
|
36
|
-
|
37
|
-
return false if (used_ + entry.length) > @size
|
38
|
-
|
39
|
-
self[used_..used_ + entry.length] = entry
|
40
|
-
self.used = used_ + entry.length
|
41
|
-
|
42
|
-
true
|
43
|
-
end
|
44
|
-
|
45
29
|
def close
|
46
30
|
munmap
|
47
31
|
end
|
@@ -7,11 +7,10 @@ module Prometheus
|
|
7
7
|
# A float protected by a mutex backed by a per-process mmaped file.
|
8
8
|
class MmapedValue
|
9
9
|
@@files = {}
|
10
|
-
|
10
|
+
VALUE_LOCK = Mutex.new
|
11
11
|
@@pid = -1
|
12
12
|
|
13
13
|
def initialize(type, metric_name, name, labels, multiprocess_mode = '')
|
14
|
-
@pid = Prometheus::Client.pid
|
15
14
|
@file_prefix = type.to_s
|
16
15
|
@metric_name = metric_name
|
17
16
|
@name = name
|
@@ -20,7 +19,9 @@ module Prometheus
|
|
20
19
|
@file_prefix += '_' + multiprocess_mode.to_s
|
21
20
|
end
|
22
21
|
|
23
|
-
self.class.reset_on_pid_change
|
22
|
+
self.class.reset_on_pid_change
|
23
|
+
# initialize_file
|
24
|
+
@pid = -1
|
24
25
|
|
25
26
|
@mutex = Mutex.new
|
26
27
|
initialize_file
|
@@ -28,6 +29,8 @@ module Prometheus
|
|
28
29
|
|
29
30
|
def increment(amount=1)
|
30
31
|
@mutex.synchronize do
|
32
|
+
initialize_file if pid_changed?
|
33
|
+
|
31
34
|
@value += amount
|
32
35
|
write_value(@key, @value)
|
33
36
|
@value
|
@@ -36,6 +39,8 @@ module Prometheus
|
|
36
39
|
|
37
40
|
def set(value)
|
38
41
|
@mutex.synchronize do
|
42
|
+
initialize_file if pid_changed?
|
43
|
+
|
39
44
|
@value = value
|
40
45
|
write_value(@key, @value)
|
41
46
|
@value
|
@@ -44,41 +49,24 @@ module Prometheus
|
|
44
49
|
|
45
50
|
def get
|
46
51
|
@mutex.synchronize do
|
52
|
+
initialize_file if pid_changed?
|
47
53
|
return @value
|
48
54
|
end
|
49
55
|
end
|
50
56
|
|
51
|
-
def
|
52
|
-
|
53
|
-
if pid_changed?
|
54
|
-
@@pid = Prometheus::Client.pid
|
55
|
-
@@files = {}
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
def self.reinitialize_on_pid_change
|
61
|
-
reset_on_pid_change
|
62
|
-
ObjectSpace.each_object(MmapedValue, &:reinitialize)
|
63
|
-
end
|
64
|
-
|
65
|
-
def self.pid_changed?
|
66
|
-
@@pid != Prometheus::Client.pid
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.multiprocess
|
70
|
-
true
|
57
|
+
def pid_changed?
|
58
|
+
@pid != Process.pid
|
71
59
|
end
|
72
60
|
|
73
61
|
def reinitialize
|
74
|
-
if
|
75
|
-
@pid = Prometheus::Client.pid
|
76
|
-
initialize_file
|
77
|
-
end
|
62
|
+
initialize_file if pid_changed?
|
78
63
|
end
|
79
64
|
|
80
65
|
def initialize_file
|
81
|
-
|
66
|
+
VALUE_LOCK.synchronize do
|
67
|
+
return if @file && !pid_changed?
|
68
|
+
|
69
|
+
@pid = Process.pid
|
82
70
|
unless @@files.has_key?(@file_prefix)
|
83
71
|
unless @file.nil?
|
84
72
|
@file.close
|
@@ -87,9 +75,7 @@ module Prometheus
|
|
87
75
|
|
88
76
|
@@files[@file_prefix] = MmapedDict.new(mmaped_file)
|
89
77
|
end
|
90
|
-
end
|
91
78
|
|
92
|
-
@mutex.synchronize do
|
93
79
|
@file = @@files[@file_prefix]
|
94
80
|
labelnames = []
|
95
81
|
labelvalues = []
|
@@ -103,10 +89,33 @@ module Prometheus
|
|
103
89
|
end
|
104
90
|
end
|
105
91
|
|
92
|
+
def self.reset_on_pid_change
|
93
|
+
VALUE_LOCK.synchronize do
|
94
|
+
if pid_changed?
|
95
|
+
@@pid = Process.pid
|
96
|
+
@@files = {}
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.reinitialize_on_pid_change
|
102
|
+
reset_on_pid_change
|
103
|
+
ObjectSpace.each_object(MmapedValue, &:reinitialize)
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.pid_changed?
|
107
|
+
@@pid != Process.pid
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.multiprocess
|
111
|
+
true
|
112
|
+
end
|
113
|
+
|
106
114
|
private
|
107
115
|
|
108
116
|
def write_value(key, val)
|
109
117
|
@file.write_value(key, val)
|
118
|
+
|
110
119
|
rescue StandardError => e
|
111
120
|
Prometheus::Client.logger.warn("writing value to #{@file.path} failed with #{e}")
|
112
121
|
Prometheus::Client.logger.debug(e.backtrace.join("\n"))
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prometheus-client-mmap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.0.
|
4
|
+
version: 0.7.0.beta30
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Schmidt
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-11-
|
12
|
+
date: 2017-11-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mmap2
|