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