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 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