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

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