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 +4 -4
- data/lib/prometheus/client/helper/entry_parser.rb +10 -3
- data/lib/prometheus/client/helper/file_locker.rb +1 -1
- data/lib/prometheus/client/helper/mmaped_file.rb +22 -22
- data/lib/prometheus/client/helper/plain_file.rb +4 -0
- data/lib/prometheus/client/mmaped_dict.rb +0 -1
- data/lib/prometheus/client/simple_value.rb +2 -2
- data/lib/prometheus/client/uses_value_type.rb +1 -0
- data/lib/prometheus/client/version.rb +1 -1
- 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: 5f3038b491c8c0275542e65d54fdaed12db3d3d4
|
4
|
+
data.tar.gz: 42f7dc3bd93f479970f0c205c2ecb220c4ae8053
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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(
|
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
|
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 =
|
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')
|
@@ -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[
|
24
|
+
self[0..3] = [value].pack('l')
|
45
25
|
end
|
46
26
|
|
47
27
|
def add_entry(data, value)
|
48
|
-
self.used =
|
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
|
@@ -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)
|
@@ -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
|
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.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-
|
11
|
+
date: 2017-11-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mmap2
|