prometheus-client-mmap 0.7.0.beta10 → 0.7.0.beta11
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 +4 -4
- data/lib/prometheus/client/mmaped_dict.rb +5 -1
- data/lib/prometheus/client/mmaped_value.rb +61 -20
- data/lib/prometheus/client/version.rb +1 -1
- data/lib/prometheus/client.rb +5 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20a1732cd0b1d06b876c82eac1ee2e2b43f461d0
|
4
|
+
data.tar.gz: 1720a2b8f8b5d81dc817876f6cbce85a0f76f838
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa2cacd9b3b5f63fe7022a9d848c7e02f2a76959787ae4be62ead6031a1bc05060aeb0169e58b3a8bc9aa1e4afce8e59181ed4bf41e8350b05ff417c8cbea6e3
|
7
|
+
data.tar.gz: 2573ac9665891684612a9768bbb9b8c7f1c2e6c05d15c573c4f5377da1482a3a678953e9d3e1dc47d015b75cdbd3ef7a9eb144989287ca5e38fad3ef2dddfa1d
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'prometheus/client'
|
2
|
+
require 'mmap'
|
2
3
|
|
3
4
|
module Prometheus
|
4
5
|
module Client
|
@@ -48,8 +49,11 @@ module Prometheus
|
|
48
49
|
@m[pos..pos+7] = [value].pack('d')
|
49
50
|
end
|
50
51
|
|
51
|
-
def close
|
52
|
+
def close
|
52
53
|
@m.munmap
|
54
|
+
rescue TypeError => e
|
55
|
+
Prometheus::Client.logger.warn("munmap raised error #{e}")
|
56
|
+
ensure
|
53
57
|
@f.close
|
54
58
|
end
|
55
59
|
|
@@ -9,30 +9,20 @@ module Prometheus
|
|
9
9
|
@@files_lock = Mutex.new
|
10
10
|
@@pid = Process.pid
|
11
11
|
|
12
|
-
def initialize(type, metric_name, name, labels, multiprocess_mode='')
|
13
|
-
|
12
|
+
def initialize(type, metric_name, name, labels, multiprocess_mode = '')
|
13
|
+
@pid = Process.pid
|
14
|
+
@file_prefix = type.to_s
|
15
|
+
@metric_name = metric_name
|
16
|
+
@name = name
|
17
|
+
@labels = labels
|
14
18
|
if type == :gauge
|
15
|
-
file_prefix += '_' + multiprocess_mode.to_s
|
19
|
+
@file_prefix += '_' + multiprocess_mode.to_s
|
16
20
|
end
|
17
21
|
|
18
|
-
|
19
|
-
unless @@files.has_key?(file_prefix)
|
20
|
-
filename = File.join(Prometheus::Client.configuration.multiprocess_files_dir, "#{file_prefix}_#{@@pid}.db")
|
21
|
-
@@files[file_prefix] = MmapedDict.new(filename)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
@file = @@files[file_prefix]
|
26
|
-
labelnames = []
|
27
|
-
labelvalues = []
|
28
|
-
labels.each do |k, v|
|
29
|
-
labelnames << k
|
30
|
-
labelvalues << v
|
31
|
-
end
|
22
|
+
self.class.reset_on_pid_change if self.class.pid_changed?
|
32
23
|
|
33
|
-
@key = [metric_name, name, labelnames, labelvalues].to_json
|
34
|
-
@value = read_value(@key)
|
35
24
|
@mutex = Mutex.new
|
25
|
+
initialize_file
|
36
26
|
end
|
37
27
|
|
38
28
|
def increment(amount=1)
|
@@ -57,10 +47,62 @@ module Prometheus
|
|
57
47
|
end
|
58
48
|
end
|
59
49
|
|
50
|
+
def self.reset_on_pid_change
|
51
|
+
@@files_lock.synchronize do
|
52
|
+
if pid_changed?
|
53
|
+
@@pid = Process.pid
|
54
|
+
@@files = {}
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.reinitialize_on_pid_change
|
60
|
+
reset_on_pid_change
|
61
|
+
ObjectSpace.each_object(MmapedValue, &:reinitialize)
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.pid_changed?
|
65
|
+
@@pid != Process.pid
|
66
|
+
end
|
67
|
+
|
60
68
|
def self.multiprocess
|
61
69
|
true
|
62
70
|
end
|
63
71
|
|
72
|
+
def reinitialize
|
73
|
+
if @pid != Process.pid
|
74
|
+
@pid = Process.pid
|
75
|
+
initialize_file
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def initialize_file
|
80
|
+
@@files_lock.synchronize do
|
81
|
+
unless @@files.has_key?(@file_prefix)
|
82
|
+
unless @file.nil?
|
83
|
+
puts @file
|
84
|
+
@file.close
|
85
|
+
end
|
86
|
+
|
87
|
+
filename = File.join(Prometheus::Client.configuration.multiprocess_files_dir, "#{@file_prefix}_#{@@pid}.db")
|
88
|
+
@@files[@file_prefix] = MmapedDict.new(filename)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
@mutex.synchronize do
|
93
|
+
@file = @@files[@file_prefix]
|
94
|
+
labelnames = []
|
95
|
+
labelvalues = []
|
96
|
+
@labels.each do |k, v|
|
97
|
+
labelnames << k
|
98
|
+
labelvalues << v
|
99
|
+
end
|
100
|
+
|
101
|
+
@key = [@metric_name, @name, labelnames, labelvalues].to_json
|
102
|
+
@value = read_value(@key)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
64
106
|
private
|
65
107
|
|
66
108
|
def write_value(key, val)
|
@@ -77,4 +119,3 @@ module Prometheus
|
|
77
119
|
end
|
78
120
|
end
|
79
121
|
end
|
80
|
-
|
data/lib/prometheus/client.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'prometheus/client/registry'
|
2
2
|
require 'prometheus/client/configuration'
|
3
|
+
require 'prometheus/client/mmaped_value'
|
3
4
|
|
4
5
|
module Prometheus
|
5
6
|
# Client is a ruby implementation for a Prometheus compatible client.
|
@@ -23,6 +24,10 @@ module Prometheus
|
|
23
24
|
def logger
|
24
25
|
configuration.logger
|
25
26
|
end
|
27
|
+
|
28
|
+
def reinitialize_on_pid_change
|
29
|
+
::Prometheus::Client::MmapedValue.reinitialize_on_pid_change
|
30
|
+
end
|
26
31
|
end
|
27
32
|
end
|
28
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.beta11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tobias Schmidt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
11
|
+
date: 2017-07-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mmap2
|