prometheus-client-mmap 0.27.0-x86_64-linux → 0.28.1-x86_64-linux
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/README.md +10 -4
- data/ext/fast_mmaped_file/mmap.c +0 -10
- data/ext/fast_mmaped_file_rs/src/mmap/inner.rs +0 -10
- data/ext/fast_mmaped_file_rs/src/mmap.rs +0 -3
- data/lib/2.7/fast_mmaped_file.so +0 -0
- data/lib/2.7/fast_mmaped_file_rs.so +0 -0
- data/lib/3.0/fast_mmaped_file.so +0 -0
- data/lib/3.0/fast_mmaped_file_rs.so +0 -0
- data/lib/3.1/fast_mmaped_file.so +0 -0
- data/lib/3.1/fast_mmaped_file_rs.so +0 -0
- data/lib/3.2/fast_mmaped_file.so +0 -0
- data/lib/3.2/fast_mmaped_file_rs.so +0 -0
- data/lib/prometheus/client/support/puma.rb +44 -0
- data/lib/prometheus/client/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '014973ac0ab1c0e391251b9a9731687a5f178e91a738901d47331434fc4340fb'
|
4
|
+
data.tar.gz: 2b5c20d70ce59bef31e29bb1779c9c43c0a6428ecbe0099d22e187b27bf0cbf3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2e5478ac79c584831f078d33fbc3a6bac17602ec54a1fdd64d52b2f6edc05b29fa98916d96a8716c6bcfc8b69975b400c6713ec7fed32a7fff5e0ec2106e22c
|
7
|
+
data.tar.gz: 9295e5754f4eb3c8ce0ff8828142cde72483b89b8751adabcdd6aaaaafa5fc23c19eddc4344a4f10b25320be06004d34a8989b6b51b3e37e19fe052597d73732
|
data/README.md
CHANGED
@@ -241,8 +241,8 @@ To use the C extension, set the environment variable
|
|
241
241
|
|
242
242
|
### PID cardinality
|
243
243
|
|
244
|
-
In multiprocess setup e.g. running under Unicorn, having worker process restart often
|
245
|
-
lead to performance problems when proccesing metric files. By default each process using
|
244
|
+
In multiprocess setup e.g. running under Unicorn or Puma, having worker process restart often
|
245
|
+
can lead to performance problems when proccesing metric files. By default each process using
|
246
246
|
Prometheus metrics will create a set of files based on that process PID. With high worker
|
247
247
|
churn this will lead to creation of thousands of files and in turn will cause very noticable
|
248
248
|
slowdown when displaying metrics
|
@@ -250,14 +250,20 @@ slowdown when displaying metrics
|
|
250
250
|
To reduce this problem, a surrogate process id can be used. Set of all such IDs needs
|
251
251
|
have low cardinality, and each process id must be unique among all running process.
|
252
252
|
|
253
|
-
For Unicorn a worker id/number can be used to greatly speedup the metrics rendering.
|
253
|
+
For Unicorn and Puma a worker id/number can be used to greatly speedup the metrics rendering.
|
254
254
|
|
255
|
-
|
255
|
+
If you are using Unicorn, add this line to your `configure` block:
|
256
256
|
|
257
257
|
```ruby
|
258
258
|
config.pid_provider = Prometheus::Client::Support::Unicorn.method(:worker_pid_provider)
|
259
259
|
```
|
260
260
|
|
261
|
+
If you are using Puma, add this line to your `configure` block:
|
262
|
+
|
263
|
+
```ruby
|
264
|
+
config.pid_provider = Prometheus::Client::Support::Puma.method(:worker_pid_provider)
|
265
|
+
```
|
266
|
+
|
261
267
|
## Tools
|
262
268
|
|
263
269
|
### `bin/parse`
|
data/ext/fast_mmaped_file/mmap.c
CHANGED
@@ -189,12 +189,6 @@ static void mm_free(mm_ipc *i_mm) {
|
|
189
189
|
}
|
190
190
|
|
191
191
|
if (i_mm->t->path != (char *)-1) {
|
192
|
-
if (i_mm->t->real < i_mm->t->len && i_mm->t->vscope != MAP_PRIVATE &&
|
193
|
-
truncate(i_mm->t->path, i_mm->t->real) == -1) {
|
194
|
-
free(i_mm->t->path);
|
195
|
-
free(i_mm);
|
196
|
-
rb_raise(rb_eTypeError, "truncate");
|
197
|
-
}
|
198
192
|
free(i_mm->t->path);
|
199
193
|
}
|
200
194
|
}
|
@@ -414,10 +408,6 @@ VALUE mm_unmap(VALUE obj) {
|
|
414
408
|
}
|
415
409
|
|
416
410
|
if (i_mm->t->path != (char *)-1) {
|
417
|
-
if (i_mm->t->real < i_mm->t->len && i_mm->t->vscope != MAP_PRIVATE &&
|
418
|
-
truncate(i_mm->t->path, i_mm->t->real) == -1) {
|
419
|
-
rb_raise(rb_eTypeError, "truncate");
|
420
|
-
}
|
421
411
|
free(i_mm->t->path);
|
422
412
|
}
|
423
413
|
|
@@ -224,16 +224,6 @@ impl InnerMmap {
|
|
224
224
|
}
|
225
225
|
}
|
226
226
|
|
227
|
-
/// Truncate the mmapped file to the end of the metrics data.
|
228
|
-
pub fn truncate_file(&mut self) -> Result<()> {
|
229
|
-
// CAST: no-op on 64-bit, widening on 32-bit.
|
230
|
-
let trunc_len = self.len as u64;
|
231
|
-
|
232
|
-
self.file
|
233
|
-
.set_len(trunc_len)
|
234
|
-
.map_err(|e| MmapError::legacy(format!("truncate: {e}"), RubyError::Type))
|
235
|
-
}
|
236
|
-
|
237
227
|
/// Load the `used` header containing the size of the metrics data written.
|
238
228
|
pub fn load_used(&self) -> Result<u32> {
|
239
229
|
match read_u32(self.map.as_ref(), 0) {
|
@@ -225,9 +225,6 @@ impl MmapedFile {
|
|
225
225
|
let rs_self = &*rb_self;
|
226
226
|
|
227
227
|
rs_self.inner_mut(|inner| {
|
228
|
-
// truncate file to actual used size
|
229
|
-
inner.truncate_file()?;
|
230
|
-
|
231
228
|
// We are about to release the backing mmap for Ruby's String
|
232
229
|
// objects. If Ruby attempts to read from them the program will
|
233
230
|
// segfault. We update the length of all Strings to zero so Ruby
|
data/lib/2.7/fast_mmaped_file.so
CHANGED
Binary file
|
Binary file
|
data/lib/3.0/fast_mmaped_file.so
CHANGED
Binary file
|
Binary file
|
data/lib/3.1/fast_mmaped_file.so
CHANGED
Binary file
|
Binary file
|
data/lib/3.2/fast_mmaped_file.so
CHANGED
Binary file
|
Binary file
|
@@ -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
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prometheus-client-mmap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.28.1
|
5
5
|
platform: x86_64-linux
|
6
6
|
authors:
|
7
7
|
- Tobias Schmidt
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2023-
|
14
|
+
date: 2023-10-05 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rb_sys
|
@@ -197,6 +197,7 @@ files:
|
|
197
197
|
- lib/prometheus/client/registry.rb
|
198
198
|
- lib/prometheus/client/simple_value.rb
|
199
199
|
- lib/prometheus/client/summary.rb
|
200
|
+
- lib/prometheus/client/support/puma.rb
|
200
201
|
- lib/prometheus/client/support/unicorn.rb
|
201
202
|
- lib/prometheus/client/uses_value_type.rb
|
202
203
|
- lib/prometheus/client/version.rb
|