prometheus-client-mmap 0.7.0.beta10 → 0.7.0.beta11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8458ed064082dd282bb57a7f449da9042d57ec7c
4
- data.tar.gz: 4fa6bab0e01f0bdac5260627afecf61a71bad2d7
3
+ metadata.gz: 20a1732cd0b1d06b876c82eac1ee2e2b43f461d0
4
+ data.tar.gz: 1720a2b8f8b5d81dc817876f6cbce85a0f76f838
5
5
  SHA512:
6
- metadata.gz: a5ad6aa9d4c5a9351ae91baa4be9c1cd8757587bfc32fcdfb64e12d1d9e30faee558ad87f0434ef702263721f939a61087283a5fad0d8b782e4019101e6263f4
7
- data.tar.gz: e7c731aad2ece103e9ea21d3f01221155435d3c85313fe85016b8d5390d8949d435247f957b4b93a55e780e20d83796381157bc02f9e4dfd8009d2093e915cf1
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
- file_prefix = type.to_s
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
- @@files_lock.synchronize do
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
-
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Prometheus
4
4
  module Client
5
- VERSION = '0.7.0.beta10'
5
+ VERSION = '0.7.0.beta11'
6
6
  end
7
7
  end
@@ -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.beta10
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-24 00:00:00.000000000 Z
11
+ date: 2017-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mmap2