prometheus-client-mmap 0.21.0-x86_64-linux-musl → 1.2.1-x86_64-linux-musl

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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.tool-versions +1 -0
  3. data/README.md +32 -17
  4. data/ext/fast_mmaped_file_rs/Cargo.toml +14 -9
  5. data/ext/fast_mmaped_file_rs/build.rs +5 -0
  6. data/ext/fast_mmaped_file_rs/extconf.rb +1 -3
  7. data/ext/fast_mmaped_file_rs/src/error.rs +2 -2
  8. data/ext/fast_mmaped_file_rs/src/file_entry.rs +222 -17
  9. data/ext/fast_mmaped_file_rs/src/file_info.rs +56 -6
  10. data/ext/fast_mmaped_file_rs/src/lib.rs +0 -1
  11. data/ext/fast_mmaped_file_rs/src/map.rs +12 -12
  12. data/ext/fast_mmaped_file_rs/src/mmap/inner.rs +704 -0
  13. data/ext/fast_mmaped_file_rs/src/mmap.rs +765 -25
  14. data/ext/fast_mmaped_file_rs/src/raw_entry.rs +1 -1
  15. data/ext/fast_mmaped_file_rs/src/testhelper.rs +1 -1
  16. data/lib/3.1/fast_mmaped_file_rs.so +0 -0
  17. data/lib/3.2/fast_mmaped_file_rs.so +0 -0
  18. data/lib/3.3/fast_mmaped_file_rs.so +0 -0
  19. data/lib/3.4/fast_mmaped_file_rs.so +0 -0
  20. data/lib/prometheus/client/formats/text.rb +1 -34
  21. data/lib/prometheus/client/helper/mmaped_file.rb +3 -3
  22. data/lib/prometheus/client/label_set_validator.rb +1 -2
  23. data/lib/prometheus/client/support/puma.rb +44 -0
  24. data/lib/prometheus/client/version.rb +1 -1
  25. metadata +67 -61
  26. data/ext/fast_mmaped_file/extconf.rb +0 -30
  27. data/ext/fast_mmaped_file/fast_mmaped_file.c +0 -122
  28. data/ext/fast_mmaped_file/file_format.c +0 -5
  29. data/ext/fast_mmaped_file/file_format.h +0 -11
  30. data/ext/fast_mmaped_file/file_parsing.c +0 -195
  31. data/ext/fast_mmaped_file/file_parsing.h +0 -27
  32. data/ext/fast_mmaped_file/file_reading.c +0 -102
  33. data/ext/fast_mmaped_file/file_reading.h +0 -30
  34. data/ext/fast_mmaped_file/globals.h +0 -14
  35. data/ext/fast_mmaped_file/mmap.c +0 -427
  36. data/ext/fast_mmaped_file/mmap.h +0 -61
  37. data/ext/fast_mmaped_file/rendering.c +0 -199
  38. data/ext/fast_mmaped_file/rendering.h +0 -8
  39. data/ext/fast_mmaped_file/utils.c +0 -56
  40. data/ext/fast_mmaped_file/utils.h +0 -22
  41. data/ext/fast_mmaped_file/value_access.c +0 -242
  42. data/ext/fast_mmaped_file/value_access.h +0 -15
  43. data/ext/fast_mmaped_file_rs/.cargo/config.toml +0 -23
  44. data/ext/fast_mmaped_file_rs/Cargo.lock +0 -790
  45. data/ext/fast_mmaped_file_rs/src/parser.rs +0 -346
  46. data/lib/2.7/fast_mmaped_file.so +0 -0
  47. data/lib/2.7/fast_mmaped_file_rs.so +0 -0
  48. data/lib/3.0/fast_mmaped_file.so +0 -0
  49. data/lib/3.0/fast_mmaped_file_rs.so +0 -0
  50. data/lib/3.1/fast_mmaped_file.so +0 -0
  51. data/lib/3.2/fast_mmaped_file.so +0 -0
  52. data/vendor/c/hashmap/.gitignore +0 -52
  53. data/vendor/c/hashmap/LICENSE +0 -21
  54. data/vendor/c/hashmap/README.md +0 -90
  55. data/vendor/c/hashmap/_config.yml +0 -1
  56. data/vendor/c/hashmap/src/hashmap.c +0 -692
  57. data/vendor/c/hashmap/src/hashmap.h +0 -267
  58. data/vendor/c/hashmap/test/Makefile +0 -22
  59. data/vendor/c/hashmap/test/hashmap_test.c +0 -608
  60. data/vendor/c/jsmn/.travis.yml +0 -4
  61. data/vendor/c/jsmn/LICENSE +0 -20
  62. data/vendor/c/jsmn/Makefile +0 -41
  63. data/vendor/c/jsmn/README.md +0 -168
  64. data/vendor/c/jsmn/example/jsondump.c +0 -126
  65. data/vendor/c/jsmn/example/simple.c +0 -76
  66. data/vendor/c/jsmn/jsmn.c +0 -314
  67. data/vendor/c/jsmn/jsmn.h +0 -76
  68. data/vendor/c/jsmn/library.json +0 -16
  69. data/vendor/c/jsmn/test/test.h +0 -27
  70. data/vendor/c/jsmn/test/tests.c +0 -407
  71. data/vendor/c/jsmn/test/testutil.h +0 -94
@@ -6,7 +6,7 @@ use crate::util::CheckedOps;
6
6
  use crate::Result;
7
7
 
8
8
  /// The logic to save a `MetricsEntry`, or parse one from a byte slice.
9
- #[derive(PartialEq, Clone, Debug)]
9
+ #[derive(PartialEq, Eq, Clone, Debug)]
10
10
  pub struct RawEntry<'a> {
11
11
  bytes: &'a [u8],
12
12
  encoded_len: usize,
@@ -73,7 +73,7 @@ pub fn entries_to_db(entries: &[&'static str], values: &[f64], header: Option<u3
73
73
  };
74
74
 
75
75
  out.extend(used.to_ne_bytes());
76
- out.extend(&[0x0u8; 4]); // Padding.
76
+ out.extend([0x0u8; 4]); // Padding.
77
77
  out.extend(entry_bytes);
78
78
 
79
79
  out
Binary file
Binary file
Binary file
Binary file
@@ -26,49 +26,16 @@ module Prometheus
26
26
  Helper::MetricsRepresentation.to_text(metrics)
27
27
  end
28
28
 
29
- def marshal_multiprocess(path = Prometheus::Client.configuration.multiprocess_files_dir, use_rust: false)
29
+ def marshal_multiprocess(path = Prometheus::Client.configuration.multiprocess_files_dir)
30
30
  file_list = Dir.glob(File.join(path, '*.db')).sort
31
31
  .map {|f| Helper::PlainFile.new(f) }
32
32
  .map {|f| [f.filepath, f.multiprocess_mode.to_sym, f.type.to_sym, f.pid] }
33
33
 
34
- if use_rust && rust_impl_available?
35
34
  FastMmapedFileRs.to_metrics(file_list.to_a)
36
- else
37
- FastMmapedFile.to_metrics(file_list.to_a)
38
- end
39
- end
40
-
41
- def rust_impl_available?
42
- return @rust_available unless @rust_available.nil?
43
-
44
- check_for_rust
45
35
  end
46
36
 
47
37
  private
48
38
 
49
- def load_rust_extension
50
- begin
51
- ruby_version = /(\d+\.\d+)/.match(RUBY_VERSION)
52
- require_relative "../../../#{ruby_version}/fast_mmaped_file_rs"
53
- rescue LoadError
54
- require 'fast_mmaped_file_rs'
55
- end
56
- end
57
-
58
- def check_for_rust
59
- # This will be evaluated on each invocation even with `||=` if
60
- # `@rust_available` if false. Running a `require` statement is slow,
61
- # so the `rust_impl_available?` method memoizes the result, external
62
- # callers can only trigger this method a single time.
63
- @rust_available = begin
64
- load_rust_extension
65
- true
66
- rescue LoadError
67
- Prometheus::Client.logger.info('FastMmapedFileRs unavailable')
68
- false
69
- end
70
- end
71
-
72
39
  def load_metrics(path)
73
40
  metrics = {}
74
41
  Dir.glob(File.join(path, '*.db')).sort.each do |f|
@@ -4,15 +4,15 @@ require 'prometheus/client/helper/file_locker'
4
4
  # load precompiled extension if available
5
5
  begin
6
6
  ruby_version = /(\d+\.\d+)/.match(RUBY_VERSION)
7
- require_relative "../../../#{ruby_version}/fast_mmaped_file"
7
+ require_relative "../../../#{ruby_version}/fast_mmaped_file_rs"
8
8
  rescue LoadError
9
- require 'fast_mmaped_file'
9
+ require 'fast_mmaped_file_rs'
10
10
  end
11
11
 
12
12
  module Prometheus
13
13
  module Client
14
14
  module Helper
15
- class MmapedFile < FastMmapedFile
15
+ class MmapedFile < FastMmapedFileRs
16
16
  include EntryParser
17
17
 
18
18
  attr_reader :filepath, :size
@@ -5,8 +5,7 @@ module Prometheus
5
5
  # LabelSetValidator ensures that all used label sets comply with the
6
6
  # Prometheus specification.
7
7
  class LabelSetValidator
8
- # TODO: we might allow setting :instance in the future
9
- RESERVED_LABELS = [:job, :instance].freeze
8
+ RESERVED_LABELS = [].freeze
10
9
 
11
10
  class LabelSetError < StandardError; end
12
11
  class InvalidLabelSetError < LabelSetError; end
@@ -0,0 +1,44 @@
1
+ module Prometheus
2
+ module Client
3
+ module Support
4
+ module Puma
5
+ extend self
6
+
7
+ def worker_pid_provider
8
+ wid = worker_id
9
+ if wid = worker_id
10
+ wid
11
+ else
12
+ "process_id_#{Process.pid}"
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def object_based_worker_id
19
+ return unless defined?(::Puma::Cluster::Worker)
20
+
21
+ workers = ObjectSpace.each_object(::Puma::Cluster::Worker)
22
+ return if workers.nil?
23
+
24
+ workers_first = workers.first
25
+ workers_first.index unless workers_first.nil?
26
+ end
27
+
28
+ def program_name
29
+ $PROGRAM_NAME
30
+ end
31
+
32
+ def worker_id
33
+ if matchdata = program_name.match(/puma.*cluster worker ([0-9]+):/)
34
+ "puma_#{matchdata[1]}"
35
+ elsif object_worker_id = object_based_worker_id
36
+ "puma_#{object_worker_id}"
37
+ elsif program_name.include?('puma')
38
+ 'puma_master'
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,5 +1,5 @@
1
1
  module Prometheus
2
2
  module Client
3
- VERSION = '0.21.0'.freeze
3
+ VERSION = '1.2.1'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prometheus-client-mmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.21.0
4
+ version: 1.2.1
5
5
  platform: x86_64-linux-musl
6
6
  authors:
7
7
  - Tobias Schmidt
8
8
  - Paweł Chojnacki
9
+ - Stan Hu
10
+ - Will Chandler
9
11
  autorequire:
10
12
  bindir: bin
11
13
  cert_chain: []
12
- date: 2023-04-21 00:00:00.000000000 Z
14
+ date: 2024-12-29 00:00:00.000000000 Z
13
15
  dependencies:
14
16
  - !ruby/object:Gem::Dependency
15
17
  name: rb_sys
@@ -17,14 +19,42 @@ dependencies:
17
19
  requirements:
18
20
  - - "~>"
19
21
  - !ruby/object:Gem::Version
20
- version: '0.9'
22
+ version: 0.9.86
21
23
  type: :runtime
22
24
  prerelease: false
23
25
  version_requirements: !ruby/object:Gem::Requirement
24
26
  requirements:
25
27
  - - "~>"
26
28
  - !ruby/object:Gem::Version
27
- version: '0.9'
29
+ version: 0.9.86
30
+ - !ruby/object:Gem::Dependency
31
+ name: base64
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ - !ruby/object:Gem::Dependency
45
+ name: bigdecimal
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
28
58
  - !ruby/object:Gem::Dependency
29
59
  name: fuzzbert
30
60
  requirement: !ruby/object:Gem::Requirement
@@ -79,72 +109,71 @@ dependencies:
79
109
  requirements:
80
110
  - - "~>"
81
111
  - !ruby/object:Gem::Version
82
- version: 1.2.1
112
+ version: 1.2.7
83
113
  type: :development
84
114
  prerelease: false
85
115
  version_requirements: !ruby/object:Gem::Requirement
86
116
  requirements:
87
117
  - - "~>"
88
118
  - !ruby/object:Gem::Version
89
- version: 1.2.1
119
+ version: 1.2.7
90
120
  - !ruby/object:Gem::Dependency
91
121
  name: rake-compiler-dock
92
122
  requirement: !ruby/object:Gem::Requirement
93
123
  requirements:
94
124
  - - "~>"
95
125
  - !ruby/object:Gem::Version
96
- version: 1.3.0
126
+ version: 1.7.0
127
+ type: :development
128
+ prerelease: false
129
+ version_requirements: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: 1.7.0
134
+ - !ruby/object:Gem::Dependency
135
+ name: rspec
136
+ requirement: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '3.2'
97
141
  type: :development
98
142
  prerelease: false
99
143
  version_requirements: !ruby/object:Gem::Requirement
100
144
  requirements:
101
145
  - - "~>"
102
146
  - !ruby/object:Gem::Version
103
- version: 1.3.0
147
+ version: '3.2'
104
148
  - !ruby/object:Gem::Dependency
105
149
  name: ruby-prof
106
150
  requirement: !ruby/object:Gem::Requirement
107
151
  requirements:
108
152
  - - "~>"
109
153
  - !ruby/object:Gem::Version
110
- version: 0.16.2
154
+ version: '1.7'
111
155
  type: :development
112
156
  prerelease: false
113
157
  version_requirements: !ruby/object:Gem::Requirement
114
158
  requirements:
115
159
  - - "~>"
116
160
  - !ruby/object:Gem::Version
117
- version: 0.16.2
161
+ version: '1.7'
118
162
  description:
119
163
  email:
120
164
  - ts@soundcloud.com
121
165
  - pawel@gitlab.com
166
+ - stanhu@gmail.com
167
+ - wchandler@gitlab.com
122
168
  executables: []
123
169
  extensions: []
124
170
  extra_rdoc_files: []
125
171
  files:
172
+ - ".tool-versions"
126
173
  - README.md
127
- - ext/fast_mmaped_file/extconf.rb
128
- - ext/fast_mmaped_file/fast_mmaped_file.c
129
- - ext/fast_mmaped_file/file_format.c
130
- - ext/fast_mmaped_file/file_format.h
131
- - ext/fast_mmaped_file/file_parsing.c
132
- - ext/fast_mmaped_file/file_parsing.h
133
- - ext/fast_mmaped_file/file_reading.c
134
- - ext/fast_mmaped_file/file_reading.h
135
- - ext/fast_mmaped_file/globals.h
136
- - ext/fast_mmaped_file/mmap.c
137
- - ext/fast_mmaped_file/mmap.h
138
- - ext/fast_mmaped_file/rendering.c
139
- - ext/fast_mmaped_file/rendering.h
140
- - ext/fast_mmaped_file/utils.c
141
- - ext/fast_mmaped_file/utils.h
142
- - ext/fast_mmaped_file/value_access.c
143
- - ext/fast_mmaped_file/value_access.h
144
- - ext/fast_mmaped_file_rs/.cargo/config.toml
145
- - ext/fast_mmaped_file_rs/Cargo.lock
146
174
  - ext/fast_mmaped_file_rs/Cargo.toml
147
175
  - ext/fast_mmaped_file_rs/README.md
176
+ - ext/fast_mmaped_file_rs/build.rs
148
177
  - ext/fast_mmaped_file_rs/extconf.rb
149
178
  - ext/fast_mmaped_file_rs/src/error.rs
150
179
  - ext/fast_mmaped_file_rs/src/file_entry.rs
@@ -153,18 +182,14 @@ files:
153
182
  - ext/fast_mmaped_file_rs/src/macros.rs
154
183
  - ext/fast_mmaped_file_rs/src/map.rs
155
184
  - ext/fast_mmaped_file_rs/src/mmap.rs
156
- - ext/fast_mmaped_file_rs/src/parser.rs
185
+ - ext/fast_mmaped_file_rs/src/mmap/inner.rs
157
186
  - ext/fast_mmaped_file_rs/src/raw_entry.rs
158
187
  - ext/fast_mmaped_file_rs/src/testhelper.rs
159
188
  - ext/fast_mmaped_file_rs/src/util.rs
160
- - lib/2.7/fast_mmaped_file.so
161
- - lib/2.7/fast_mmaped_file_rs.so
162
- - lib/3.0/fast_mmaped_file.so
163
- - lib/3.0/fast_mmaped_file_rs.so
164
- - lib/3.1/fast_mmaped_file.so
165
189
  - lib/3.1/fast_mmaped_file_rs.so
166
- - lib/3.2/fast_mmaped_file.so
167
190
  - lib/3.2/fast_mmaped_file_rs.so
191
+ - lib/3.3/fast_mmaped_file_rs.so
192
+ - lib/3.4/fast_mmaped_file_rs.so
168
193
  - lib/prometheus.rb
169
194
  - lib/prometheus/client.rb
170
195
  - lib/prometheus/client/configuration.rb
@@ -190,29 +215,10 @@ files:
190
215
  - lib/prometheus/client/registry.rb
191
216
  - lib/prometheus/client/simple_value.rb
192
217
  - lib/prometheus/client/summary.rb
218
+ - lib/prometheus/client/support/puma.rb
193
219
  - lib/prometheus/client/support/unicorn.rb
194
220
  - lib/prometheus/client/uses_value_type.rb
195
221
  - lib/prometheus/client/version.rb
196
- - vendor/c/hashmap/.gitignore
197
- - vendor/c/hashmap/LICENSE
198
- - vendor/c/hashmap/README.md
199
- - vendor/c/hashmap/_config.yml
200
- - vendor/c/hashmap/src/hashmap.c
201
- - vendor/c/hashmap/src/hashmap.h
202
- - vendor/c/hashmap/test/Makefile
203
- - vendor/c/hashmap/test/hashmap_test.c
204
- - vendor/c/jsmn/.travis.yml
205
- - vendor/c/jsmn/LICENSE
206
- - vendor/c/jsmn/Makefile
207
- - vendor/c/jsmn/README.md
208
- - vendor/c/jsmn/example/jsondump.c
209
- - vendor/c/jsmn/example/simple.c
210
- - vendor/c/jsmn/jsmn.c
211
- - vendor/c/jsmn/jsmn.h
212
- - vendor/c/jsmn/library.json
213
- - vendor/c/jsmn/test/test.h
214
- - vendor/c/jsmn/test/tests.c
215
- - vendor/c/jsmn/test/testutil.h
216
222
  homepage: https://gitlab.com/gitlab-org/prometheus-client-mmap
217
223
  licenses:
218
224
  - Apache-2.0
@@ -225,19 +231,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
225
231
  requirements:
226
232
  - - ">="
227
233
  - !ruby/object:Gem::Version
228
- version: '2.7'
234
+ version: '3.1'
229
235
  - - "<"
230
236
  - !ruby/object:Gem::Version
231
- version: 3.3.dev
237
+ version: 3.5.dev
232
238
  required_rubygems_version: !ruby/object:Gem::Requirement
233
239
  requirements:
234
240
  - - ">="
235
241
  - !ruby/object:Gem::Version
236
242
  version: 3.3.22
237
243
  requirements: []
238
- rubygems_version: 3.4.4
244
+ rubygems_version: 3.5.23
239
245
  signing_key:
240
246
  specification_version: 4
241
- summary: A suite of instrumentation metric primitivesthat can be exposed through a
242
- web services interface.
247
+ summary: A suite of instrumentation metric primitives that can be exposed through
248
+ a web services interface.
243
249
  test_files: []
@@ -1,30 +0,0 @@
1
- require 'mkmf'
2
- require 'fileutils'
3
-
4
- $CFLAGS << ' -std=c99 -D_POSIX_C_SOURCE=200809L -Wall -Wextra'
5
-
6
- if enable_config('fail-on-warning')
7
- $CFLAGS << ' -Werror'
8
- end
9
-
10
- if enable_config('debug')
11
- $CFLAGS << ' -O0 -g'
12
- end
13
-
14
- if enable_config('address-sanitizer')
15
- $CFLAGS << ' -O -fsanitize=address -fno-omit-frame-pointer -g'
16
- end
17
-
18
- CONFIG['warnflags'].slice!(/ -Wdeclaration-after-statement/)
19
-
20
- cwd = File.expand_path(File.dirname(__FILE__))
21
- vendor_dir = File.join(cwd, '../../vendor/c')
22
- src_dir = File.join(cwd, '../../ext/fast_mmaped_file')
23
-
24
- src_files = %W[#{vendor_dir}/jsmn/jsmn.c #{vendor_dir}/hashmap/src/hashmap.c]
25
- FileUtils.cp(src_files, src_dir)
26
-
27
- $INCFLAGS << " -I#{vendor_dir}/jsmn -I#{vendor_dir}/hashmap/src"
28
-
29
- dir_config('fast_mmaped_file')
30
- create_makefile('fast_mmaped_file')
@@ -1,122 +0,0 @@
1
- #include <errno.h>
2
- #include <hashmap.h>
3
- #include <jsmn.h>
4
- #include <ruby.h>
5
- #include <ruby/intern.h>
6
- #include <sys/mman.h>
7
-
8
- #include "file_parsing.h"
9
- #include "file_reading.h"
10
- #include "globals.h"
11
- #include "mmap.h"
12
- #include "rendering.h"
13
- #include "utils.h"
14
- #include "value_access.h"
15
-
16
- VALUE MMAPED_FILE = Qnil;
17
-
18
- ID sym_min;
19
- ID sym_max;
20
- ID sym_livesum;
21
- ID sym_gauge;
22
- ID sym_pid;
23
- ID sym_samples;
24
-
25
- VALUE prom_eParsingError;
26
-
27
- int aggregate_files(struct hashmap *map, VALUE list_of_files) {
28
- buffer_t reading_buffer;
29
- memset(&reading_buffer, 0, sizeof(buffer_t));
30
-
31
- for (int i = 0; i < RARRAY_LEN(list_of_files); i++) {
32
- VALUE params = RARRAY_PTR(list_of_files)[i];
33
- file_t file;
34
-
35
- if (!file_open_from_params(&file, params)) {
36
- buffer_dispose(&reading_buffer);
37
- return 0;
38
- }
39
-
40
- if (!read_from_file(&file, &reading_buffer)) {
41
- buffer_dispose(&reading_buffer);
42
- file_close(&file);
43
- return 0;
44
- }
45
-
46
- if (!process_buffer(&file, &reading_buffer, map)) {
47
- buffer_dispose(&reading_buffer);
48
- file_close(&file);
49
- return 0;
50
- }
51
-
52
- if (!file_close(&file)) {
53
- buffer_dispose(&reading_buffer);
54
- return 0;
55
- }
56
- }
57
-
58
- buffer_dispose(&reading_buffer);
59
- return 1;
60
- }
61
-
62
- VALUE method_to_metrics(VALUE UNUSED(self), VALUE file_list) {
63
- struct hashmap map;
64
- hashmap_setup(&map);
65
-
66
- if (!aggregate_files(&map, file_list)) { // all entries in map are now copies that need to be disposed
67
- hashmap_destroy(&map);
68
- raise_last_exception();
69
- return Qnil;
70
- }
71
-
72
- entry_t **sorted_entries;
73
-
74
- if (!sort_map_entries(&map, &sorted_entries)) {
75
- hashmap_destroy(&map);
76
-
77
- raise_last_exception();
78
- return Qnil;
79
- }
80
-
81
- VALUE rv = rb_str_new("", 0);
82
- if (!entries_to_string(rv, sorted_entries, hashmap_size(&map))) {
83
- free(sorted_entries);
84
- hashmap_destroy(&map);
85
-
86
- raise_last_exception();
87
- return Qnil;
88
- }
89
-
90
- RB_GC_GUARD(file_list); // ensure file list is not GCed before this point
91
- free(sorted_entries);
92
- hashmap_destroy(&map);
93
- return rv;
94
- }
95
-
96
- void Init_fast_mmaped_file() {
97
- sym_gauge = rb_intern("gauge");
98
- sym_min = rb_intern("min");
99
- sym_max = rb_intern("max");
100
- sym_livesum = rb_intern("livesum");
101
- sym_pid = rb_intern("pid");
102
- sym_samples = rb_intern("samples");
103
-
104
- prom_eParsingError = rb_define_class("PrometheusParsingError", rb_eRuntimeError);
105
-
106
- MMAPED_FILE = rb_define_class("FastMmapedFile", rb_cObject);
107
- rb_define_const(MMAPED_FILE, "MAP_SHARED", INT2FIX(MAP_SHARED));
108
-
109
- rb_define_singleton_method(MMAPED_FILE, "to_metrics", method_to_metrics, 1);
110
-
111
- rb_define_alloc_func(MMAPED_FILE, mm_s_alloc);
112
- rb_define_singleton_method(MMAPED_FILE, "new", mm_s_new, -1);
113
- rb_define_method(MMAPED_FILE, "initialize", mm_init, 1);
114
- rb_define_method(MMAPED_FILE, "slice", mm_aref_m, -1);
115
- rb_define_method(MMAPED_FILE, "sync", mm_msync, -1);
116
- rb_define_method(MMAPED_FILE, "munmap", mm_unmap, 0);
117
-
118
- rb_define_method(MMAPED_FILE, "used", method_load_used, 0);
119
- rb_define_method(MMAPED_FILE, "used=", method_save_used, 1);
120
- rb_define_method(MMAPED_FILE, "fetch_entry", method_fetch_entry, 3);
121
- rb_define_method(MMAPED_FILE, "upsert_entry", method_upsert_entry, 3);
122
- }
@@ -1,5 +0,0 @@
1
- #include "file_format.h"
2
-
3
- inline uint32_t padding_length(uint32_t key_length) {
4
- return 8 - (sizeof(uint32_t) + key_length) % 8; // padding | 8 byte aligned
5
- }
@@ -1,11 +0,0 @@
1
- #ifndef FILE_FORMAT_H
2
- #define FILE_FORMAT_H
3
-
4
- #include <stdint.h>
5
-
6
- #define START_POSITION 8
7
- #define INITIAL_SIZE (2 * sizeof(int32_t))
8
-
9
- uint32_t padding_length(uint32_t key_length);
10
-
11
- #endif