vinted-prometheus-client-mmap 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c9c2172a64911eb3a109b866611b4167e9dafacedf7bdb4ee45da71340d0314e
4
- data.tar.gz: '018047827caaea20f96e7ca8b62a717c1c17b0aab14ad1a0bf7ea2735f8ee18a'
3
+ metadata.gz: 86a6083d5e7a88ac1e5e96a6660ebbd70fa31cecb1b1e6e324e26c4e91279713
4
+ data.tar.gz: a14011ec2a97f717bf0a18913fdde846b29ad742acb69b846b9f77c93ee7004f
5
5
  SHA512:
6
- metadata.gz: 1f09730605d1c7904ec72b3ac0afc0fd61a79da99e78f93da27551ec2340dbde87b47c72d3b59e934df72e5af92139f488364d1ea161bf2ab1052f118aed1e57
7
- data.tar.gz: 6bf4a9f9aeac52d16f15f3d8b3cc44306b009487891b22d431cc2a96aa46a0bba70b9364845e9f382d35729172ce4171ce980c5907c3c4aac47501d3b9710be5
6
+ metadata.gz: e735c20e4bca0539a7e1219a1c9a0f7d3c61f838af04928e3d75d293bbf090be50ca9708aa0819234dc60025baa578795c65c8100da0550022cf4c0867186a65
7
+ data.tar.gz: bad6fe000c9a94c57797f3337fa961759a25660a337794d644b1edad8402b3a95314e51add28d6c9d3f4749ee09af3112658f13db8e95b2bb18fade77c580d6e
@@ -1,5 +1,5 @@
1
1
  use core::panic;
2
- use magnus::{eval, Symbol, Value};
2
+ use magnus::Symbol;
3
3
  use serde::Deserialize;
4
4
  use serde_json::value::RawValue;
5
5
  use smallvec::SmallVec;
@@ -362,6 +362,11 @@ impl FileEntry {
362
362
  curf += gr.0.meta.value.unwrap();
363
363
 
364
364
  bucket.cumulative_count_float = Some(curf);
365
+
366
+ if gr.0.meta.ex.is_some() {
367
+ bucket.exemplar =
368
+ Some(exemplar_to_proto(gr.0.meta.ex.as_ref().unwrap()));
369
+ }
365
370
  }
366
371
  }
367
372
  None => {
@@ -380,7 +385,7 @@ impl FileEntry {
380
385
  final_metric_name = stripped;
381
386
  }
382
387
 
383
- let buckets = vec![io::prometheus::client::Bucket {
388
+ let mut buckets = vec![io::prometheus::client::Bucket {
384
389
  cumulative_count: None,
385
390
  cumulative_count_float: gr.0.meta.value,
386
391
  upper_bound: Some(
@@ -391,6 +396,11 @@ impl FileEntry {
391
396
  ),
392
397
  exemplar: None,
393
398
  }];
399
+
400
+ if gr.0.meta.ex.is_some() {
401
+ buckets[0].exemplar =
402
+ Some(exemplar_to_proto(gr.0.meta.ex.as_ref().unwrap()));
403
+ }
394
404
  m.label = m
395
405
  .label
396
406
  .into_iter()
@@ -1,7 +1,6 @@
1
1
  use hashbrown::hash_map::RawEntryMut;
2
2
  use hashbrown::HashMap;
3
- use magnus::class::file;
4
- use magnus::{eval, exception::*, Error, RArray, Value};
3
+ use magnus::{exception::*, Error, RArray};
5
4
  use std::hash::{BuildHasher, Hash, Hasher};
6
5
  use std::mem::size_of;
7
6
 
@@ -15,6 +15,7 @@ use crate::util::{read_exemplar, CheckedOps};
15
15
  use crate::util::{self, errno, read_f64, read_u32};
16
16
  use crate::Result;
17
17
  use crate::HEADER_SIZE;
18
+ use std::iter;
18
19
 
19
20
  /// A mmapped file and its metadata. Ruby never directly interfaces
20
21
  /// with this struct.
@@ -186,7 +187,11 @@ impl InnerMmap {
186
187
  let val = serde_json::to_string(&exemplar).unwrap();
187
188
 
188
189
  let value_bytes = val.as_bytes();
189
- let value_range = self.item_range(offset, value_bytes.len())?;
190
+
191
+ let mut value_bytes = value_bytes.to_vec();
192
+ value_bytes.extend(iter::repeat(0).take(EXEMPLAR_ENTRY_MAX_SIZE_BYTES - value_bytes.len()));
193
+
194
+ let value_range = self.item_range(offset, EXEMPLAR_ENTRY_MAX_SIZE_BYTES)?;
190
195
 
191
196
  let bytes = self.map.as_mut();
192
197
  bytes[value_range].copy_from_slice(&value_bytes);
@@ -338,7 +338,7 @@ impl MmapedFile {
338
338
  let since_the_epoch = start
339
339
  .duration_since(UNIX_EPOCH)
340
340
  .expect("Time went backwards");
341
-
341
+
342
342
  let ex: Exemplar = Exemplar {
343
343
  label_name: unsafe { exemplar_name.as_str().unwrap().into() },
344
344
  label_value: unsafe { exemplar_value.as_str().unwrap().into() },
@@ -1,6 +1,5 @@
1
1
  use nix::errno::Errno;
2
2
  use nix::libc::c_long;
3
- use std::borrow::Cow;
4
3
  use std::fmt::Display;
5
4
  use std::io;
6
5
  use std::mem::size_of;
@@ -29,7 +29,8 @@ module Prometheus
29
29
  end
30
30
 
31
31
  def marshal_multiprocess(path = Prometheus::Client.configuration.multiprocess_files_dir, use_rust: true)
32
- file_list = Dir.glob(File.join(path, '*.db')).sort
32
+ # NOTE(GiedriusS): need to ensure exemplar files go at the end because they add extra data.
33
+ file_list = Dir.glob(File.join(path, '*.db')).sort_by { |f| [f.include?('exemplar') ? 1 : 0, f] }
33
34
  .map {|f| Helper::PlainFile.new(f) }
34
35
  .map {|f| [f.filepath, f.multiprocess_mode.to_sym, f.type.to_sym, f.pid] }
35
36
 
@@ -60,9 +60,9 @@ module Prometheus
60
60
  :histogram
61
61
  end
62
62
 
63
- def observe(labels, value)
63
+ def observe(labels, value, exemplar_name = '', exemplar_value = '')
64
64
  label_set = label_set_for(labels)
65
- synchronize { @values[label_set].observe(value) }
65
+ synchronize { @values[label_set].observe(value, exemplar_name, exemplar_value) }
66
66
  end
67
67
 
68
68
  private
@@ -1,5 +1,5 @@
1
1
  module Prometheus
2
2
  module Client
3
- VERSION = '1.3.0'.freeze
3
+ VERSION = '1.4.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vinted-prometheus-client-mmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
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: 2024-03-26 00:00:00.000000000 Z
14
+ date: 2024-03-27 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rb_sys