prometheus-client-mmap 0.7.0.beta19 → 0.7.0.beta20

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: 010d69c130f93c8618f5bd9daafc5f3df0ccb8fa
4
- data.tar.gz: ebea17e5c6d034dde9c0660237482ddae73415c7
3
+ metadata.gz: 5f3038b491c8c0275542e65d54fdaed12db3d3d4
4
+ data.tar.gz: 42f7dc3bd93f479970f0c205c2ecb220c4ae8053
5
5
  SHA512:
6
- metadata.gz: 641ca6e4fb6587f345a340ade98823dd339c2cfc5f2a057d53e8a9f9fdb0f64367c6c51a21b60837cea27bb5d5d8c8fb723c75fcafed9e67d2a22f622d10267a
7
- data.tar.gz: 447c4af8a99826c37e4c33059cb4753108ee79afe924e01c882c8c08bbef465b9ecf6c7772eaff63dc4dd48adeea50570cd8d7b14c3203453b4317e06d576765
6
+ metadata.gz: bbcafb4386700fed0d333cb5a1439e81ea565bd0f1b1ab621d796a696720a28cfef1cb7b5bdacef5d2bd600e68c7b8e2629bab2fa53d2eb7b9449b8df78d3355
7
+ data.tar.gz: edbd6726495c8e47196de765b297e1868099777bd7770cd440a49834f0084ab49cb996365a4170fcaaa7681a260619c36e1d5cf1550b54df7d28fc35c69becfc
@@ -2,17 +2,24 @@ module Prometheus
2
2
  module Client
3
3
  module Helper
4
4
  module EntryParser
5
+ MINIMUM_SIZE = 8
6
+ START_POSITION = 8
7
+
5
8
  def used
6
- slice(4..7).unpack('l')[0]
9
+ slice(0..3).unpack('l')[0]
10
+ end
11
+
12
+ def empty?
13
+ size < MINIMUM_SIZE || used.zero?
7
14
  end
8
15
 
9
16
  def entries
10
- return Enumerator.new {} if used.zero?
17
+ return Enumerator.new {} if empty?
11
18
 
12
19
  Enumerator.new do |yielder|
13
20
  used_ = used # cache used to avoid unnecessary unpack operations
14
21
 
15
- pos = 12 # pid + used + padding offset
22
+ pos = START_POSITION # pid + used + padding offset
16
23
  while pos < used_
17
24
  data = slice(pos..-1)
18
25
  encoded_len, = data.unpack('l')
@@ -10,7 +10,7 @@ module Prometheus
10
10
  @file_locks ||= {}
11
11
  return false if @file_locks[filepath]
12
12
 
13
- file = File.open(filepath, 'w+')
13
+ file = File.open(filepath, 'ab')
14
14
  if file.flock(File::LOCK_NB | File::LOCK_EX)
15
15
  @file_locks[filepath] = file
16
16
  return true
@@ -7,26 +7,6 @@ module Prometheus
7
7
  module Helper
8
8
  class MmapedFile < Mmap
9
9
  include EntryParser
10
-
11
- class << self
12
- def open(filepath)
13
- MmapedFile.new(filepath, 'rw', Mmap::MAP_SHARED)
14
- end
15
-
16
- def ensure_exclusive_file(file_prefix = 'mmaped_file')
17
- (0..Float::INFINITY).lazy
18
- .map { |f_num| "#{file_prefix}_#{Prometheus::Client.pid}-#{f_num}.db" }
19
- .map { |filename| File.join(Prometheus::Client.configuration.multiprocess_files_dir, filename) }
20
- .find { |path| Helper::FileLocker.lock_to_process(path) }
21
- end
22
-
23
- def open_exclusive_file(file_prefix = 'mmaped_file')
24
- filename = Helper::MmapedFile.ensure_exclusive_file(file_prefix)
25
- open(filename)
26
- end
27
- end
28
-
29
- MINIMUM_SIZE = 8
30
10
  attr_reader :filepath, :size
31
11
 
32
12
  def initialize(filepath, mode = 'r', protection = Mmap::MAP_SHARED, options = {})
@@ -41,11 +21,11 @@ module Prometheus
41
21
  end
42
22
 
43
23
  def used=(value)
44
- self[4..7] = [value].pack('l')
24
+ self[0..3] = [value].pack('l')
45
25
  end
46
26
 
47
27
  def add_entry(data, value)
48
- self.used = 12 if used.zero?
28
+ self.used = START_POSITION if used.zero?
49
29
 
50
30
  # Pad to be 8-byte aligned.
51
31
  padded = data + (' ' * (8 - (data.length + 4) % 8))
@@ -71,6 +51,26 @@ module Prometheus
71
51
  def initial_mmap_file_size
72
52
  Prometheus::Client.configuration.initial_mmap_file_size
73
53
  end
54
+
55
+ public
56
+
57
+ class << self
58
+ def open(filepath)
59
+ MmapedFile.new(filepath, 'rw', Mmap::MAP_SHARED)
60
+ end
61
+
62
+ def ensure_exclusive_file(file_prefix = 'mmaped_file')
63
+ (0..Float::INFINITY).lazy
64
+ .map { |f_num| "#{file_prefix}_#{Prometheus::Client.pid}-#{f_num}.db" }
65
+ .map { |filename| File.join(Prometheus::Client.configuration.multiprocess_files_dir, filename) }
66
+ .find { |path| Helper::FileLocker.lock_to_process(path) }
67
+ end
68
+
69
+ def open_exclusive_file(file_prefix = 'mmaped_file')
70
+ filename = Helper::MmapedFile.ensure_exclusive_file(file_prefix)
71
+ open(filename)
72
+ end
73
+ end
74
74
  end
75
75
  end
76
76
  end
@@ -13,6 +13,10 @@ module Prometheus
13
13
  def slice(*args)
14
14
  @data.slice(*args)
15
15
  end
16
+
17
+ def size
18
+ @data.length
19
+ end
16
20
  end
17
21
  end
18
22
  end
@@ -15,7 +15,6 @@ module Prometheus
15
15
  # size of the next field, a utf-8 encoded string key, padding to an 8 byte
16
16
  # alignment, and then a 8 byte float which is the value.
17
17
  class MmapedDict
18
- MINIMUM_SIZE = 8
19
18
  attr_reader :m, :used, :positions
20
19
 
21
20
  def self.read_all_values(f)
@@ -4,8 +4,8 @@ require 'mmap'
4
4
  module Prometheus
5
5
  module Client
6
6
  class SimpleValue
7
- def initialize(type, metric_name, name, labels, value = 0.0)
8
- @value = value
7
+ def initialize(type, metric_name, name, labels, *args)
8
+ @value = 0.0
9
9
  end
10
10
 
11
11
  def set(value)
@@ -12,6 +12,7 @@ module Prometheus
12
12
  value_class.new(type, metric_name, name, labels, *args)
13
13
  rescue StandardError => e
14
14
  Prometheus::Client.logger.info("error #{e} while creating instance of #{value_class} defaulting to SimpleValue")
15
+ Prometheus::Client.logger.debug("error #{e} backtrace #{e.backtrace.join("\n")}")
15
16
  Prometheus::Client::SimpleValue.new(type, metric_name, name, labels)
16
17
  end
17
18
  end
@@ -1,5 +1,5 @@
1
1
  module Prometheus
2
2
  module Client
3
- VERSION = '0.7.0.beta19'
3
+ VERSION = '0.7.0.beta20'
4
4
  end
5
5
  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.beta19
4
+ version: 0.7.0.beta20
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-11-13 00:00:00.000000000 Z
11
+ date: 2017-11-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mmap2