babeltrace2 0.1.0 → 0.1.3

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: b661027d46180b1a162ce91aad9ad783e5700abc1182199408d19c61410f2df6
4
- data.tar.gz: 9f207749e36ecf12c8e0aae0b54749f967e1aa9830b4bf38b72eac47d1443017
3
+ metadata.gz: '0239b5e18b776cf7b8d6907e35c6a71aa22f9c6164a38269a629c4a2a1867687'
4
+ data.tar.gz: 0fa88f1bf9c68147a24c401cb447a21e16d6c6c89262125cb7796aa41087f51b
5
5
  SHA512:
6
- metadata.gz: b5b73639f60a15169307c2c52708478211e445298a294d98bc745ee364c2a009e4a320008c58fac46b3408483ef487869b8a77d88f45e91f8d77d3cd140c960e
7
- data.tar.gz: feb554583fb6ad8e3ac8c80f148a44fe497295167891f0bac620933848b4f8b36c5d57d5751dca613fcabc427c012913c7699f856d3f46c0467a9eaac2ad4bde
6
+ metadata.gz: b9d1a6d4f31fb45027d3f1cca7ffc3f1e994178c9781f1dfa9cedc0687e2186cce4b882629e1d635394e07f371c7d4e89d354e762b3e3185f1380d2ab2104155
7
+ data.tar.gz: 8a12153ae9b69012021889f462d7d233728b43c9aca6bc586f2cfe0d9625770fed24ab967af1591cb396d5dc64f3704d5f1f9cd6b56c5af3dec0cc1ea1db3215
data/babeltrace2.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'babeltrace2'
3
- s.version = "0.1.0"
3
+ s.version = "0.1.3"
4
4
  s.author = "Brice Videau"
5
5
  s.email = "bvideau@anl.gov"
6
6
  s.homepage = "https://github.com/alcf-perfengr/babeltrace2-ruby"
@@ -6,6 +6,16 @@ module Babeltrace2
6
6
  :BT_ERROR_CAUSE_ACTOR_TYPE_COMPONENT_CLASS, 1 << 2,
7
7
  :BT_ERROR_CAUSE_ACTOR_TYPE_MESSAGE_ITERATOR, 1 << 3]
8
8
 
9
+ def self.verbose?
10
+ !!@verbose
11
+ end
12
+
13
+ def self.verbose=(val)
14
+ @verbose = !!val
15
+ end
16
+
17
+ @verbose = ENV["VERBOSE"]
18
+
9
19
  class BTError < BTObject
10
20
  end
11
21
 
@@ -347,14 +357,14 @@ module Babeltrace2
347
357
  item = ""
348
358
  item << c.file_name << ":"
349
359
  item << c.line_number.to_s
350
- item << (mess.match(/:in /) ? mess : ".")
360
+ item << (mess.match(/:in /) ? mess : Babeltrace2.verbose? ? " :: " << mess : ".")
351
361
  backtrace.push(item)
352
362
  cs[1..-1].each { |c|
353
363
  item = ""
354
364
  item << c.file_name << ":"
355
365
  item << c.line_number.to_s
356
366
  mess = c.message
357
- item << (mess.match(/:in /) ? mess : ".")
367
+ item << (mess.match(/:in /) ? mess : Babeltrace2.verbose? ? " :: " << mess : ".")
358
368
  backtrace.push(item)
359
369
  }
360
370
  [klass, message, backtrace]
@@ -424,7 +434,7 @@ module Babeltrace2
424
434
  e = klass.new(message)
425
435
  else
426
436
  message = "#{code}" unless message
427
- e = Error.new
437
+ e = Error.new(message)
428
438
  end
429
439
  e.set_backtrace(backtrace+caller_locations.collect(&:to_s))
430
440
  e
@@ -347,13 +347,14 @@ module Babeltrace2
347
347
  logging_level: BTLogging.default_level,
348
348
  initialize_method_data: nil)
349
349
  ptr = FFI::MemoryPointer.new(:pointer)
350
+ bt_params = BTValue.from_value(params)
350
351
  res = if initialize_method_data
351
352
  Babeltrace2.bt_graph_add_source_component_with_initialize_method_data(
352
- @handle, component_class, name, BTValue.from_value(params),
353
+ @handle, component_class, name, bt_params,
353
354
  initialize_method_data, logging_level, ptr)
354
355
  else
355
356
  Babeltrace2.bt_graph_add_source_component(
356
- @handle, component_class, name, BTValue.from_value(params),
357
+ @handle, component_class, name, bt_params,
357
358
  logging_level, ptr)
358
359
  end
359
360
  raise Babeltrace2.process_error(res) if res != :BT_GRAPH_ADD_COMPONENT_STATUS_OK
@@ -365,13 +366,14 @@ module Babeltrace2
365
366
  logging_level: BTLogging.default_level,
366
367
  initialize_method_data: nil)
367
368
  ptr = FFI::MemoryPointer.new(:pointer)
369
+ bt_params = BTValue.from_value(params)
368
370
  res = if initialize_method_data
369
371
  Babeltrace2.bt_graph_add_filter_component_with_initialize_method_data(
370
- @handle, component_class, name, BTValue.from_value(params),
372
+ @handle, component_class, name, bt_params,
371
373
  initialize_method_data, logging_level, ptr)
372
374
  else
373
375
  Babeltrace2.bt_graph_add_filter_component(
374
- @handle, component_class, name, BTValue.from_value(params),
376
+ @handle, component_class, name, bt_params,
375
377
  logging_level, ptr)
376
378
  end
377
379
  raise Babeltrace2.process_error(res) if res != :BT_GRAPH_ADD_COMPONENT_STATUS_OK
@@ -383,13 +385,14 @@ module Babeltrace2
383
385
  logging_level: BTLogging.default_level,
384
386
  initialize_method_data: nil)
385
387
  ptr = FFI::MemoryPointer.new(:pointer)
388
+ bt_params = BTValue.from_value(params)
386
389
  res = if initialize_method_data
387
390
  Babeltrace2.bt_graph_add_sink_component_with_initialize_method_data(
388
- @handle, component_class, name, BTValue.from_value(params),
391
+ @handle, component_class, name, bt_params,
389
392
  initialize_method_data, logging_level, ptr)
390
393
  else
391
394
  Babeltrace2.bt_graph_add_sink_component(
392
- @handle, component_class, name, BTValue.from_value(params),
395
+ @handle, component_class, name, bt_params,
393
396
  logging_level, ptr)
394
397
  end
395
398
  raise Babeltrace2.process_error(res) if res != :BT_GRAPH_ADD_COMPONENT_STATUS_OK
@@ -159,7 +159,7 @@ module Babeltrace2
159
159
  mess = method.call(BTSelfMessageIterator.new(self_message_iterator,
160
160
  retain: false, auto_release: false),
161
161
  capacity)
162
- if mess.size < capacity
162
+ if mess.size <= capacity
163
163
  mess.each { |m| bt_message_get_ref(m.handle) }
164
164
  messages.write_array_of_pointer(mess.collect(&:handle))
165
165
  count.write_uint64(mess.size)
@@ -190,7 +190,6 @@ module Babeltrace2
190
190
  ptr_messages = FFI::MemoryPointer.new(:pointer)
191
191
  ptr_count = FFI::MemoryPointer.new(:uint64)
192
192
  while ((res = Babeltrace2.bt_message_iterator_next(@handle, ptr_messages, ptr_count)) == :BT_MESSAGE_ITERATOR_NEXT_STATUS_AGAIN)
193
- puts "waiting"
194
193
  sleep BT_SLEEP_TIME
195
194
  end
196
195
  case res
@@ -87,8 +87,9 @@ module Babeltrace2
87
87
  if handle
88
88
  super(handle, retain: retain, auto_release: auto_release)
89
89
  else
90
+ bt_params = BTValue.from_value(params)
90
91
  handle = Babeltrace2.bt_query_executor_create_with_method_data(
91
- component_class, object_name, BTValue.from_value(params), method_data)
92
+ component_class, object_name, bt_params, method_data)
92
93
  raise Babeltrace2.process_error if handle.null?
93
94
  super(handle)
94
95
  end
@@ -233,7 +233,8 @@ module Babeltrace2
233
233
  alias uuid get_uuid
234
234
 
235
235
  def set_user_attributes(user_attributes)
236
- Babeltrace2.bt_clock_class_set_user_attributes(@handle, BTValue.from_value(user_attributes))
236
+ bt_user_attributes = BTValue.from_value(user_attributes)
237
+ Babeltrace2.bt_clock_class_set_user_attributes(@handle, bt_user_attributes)
237
238
  self
238
239
  end
239
240
 
@@ -254,5 +255,33 @@ module Babeltrace2
254
255
  raise Babeltrace2.process_error(res) if res != :BT_CLOCK_CLASS_CYCLES_TO_NS_FROM_ORIGIN_STATUS_OK
255
256
  ptr.read_int64
256
257
  end
258
+
259
+ def to_h
260
+ res = {}
261
+ res[:name] = name if name
262
+ res[:description] = description if description
263
+ res[:frequency] = frequency
264
+ res[:precision] = precision
265
+ res[:offset] = offset
266
+ res[:origin_is_unix_epoch] = origin_is_unix_epoch?
267
+ res[:uuid] = uuid.to_s if uuid
268
+ user_attributes_value = user_attributes.value
269
+ res[:user_attributes] = user_attributes_value if !user_attributes_value.empty?
270
+ res
271
+ end
272
+
273
+ def self.from_h(self_component, h)
274
+ o = self_component.create_clock_class
275
+ o.name = h[:name] if h[:name]
276
+ o.description = h[:description] if h[:description]
277
+ o.frequency = h[:frequency] if h[:frequency]
278
+ o.precision = h[:precision] if h[:precision]
279
+ o.set_offset(*h[:offset]) if h[:offset]
280
+ o.origin_is_unix_epoch = h[:origin_is_unix_epoch]
281
+ o.uuid = BTUUID.from_string(h[:uuid]) if h[:uuid]
282
+ o.user_attributes = h[:user_attributes] if h[:user_attributes]
283
+ h[:bt_clock_class] = o
284
+ o
285
+ end
257
286
  end
258
287
  end
@@ -275,7 +275,8 @@ module Babeltrace2
275
275
  alias specific_context_field_class get_specific_context_field_class
276
276
 
277
277
  def set_user_attributes(user_attributes)
278
- Babeltrace2.bt_event_class_set_user_attributes(@handle, BTValue.from_value(user_attributes))
278
+ bt_user_attributes = BTValue.from_value(user_attributes)
279
+ Babeltrace2.bt_event_class_set_user_attributes(@handle, bt_user_attributes)
279
280
  self
280
281
  end
281
282
 
@@ -288,5 +289,32 @@ module Babeltrace2
288
289
  BTValueMap.new(Babeltrace2.bt_event_class_borrow_user_attributes(@handle), retain: true)
289
290
  end
290
291
  alias user_attributes get_user_attributes
292
+
293
+ def to_h
294
+ res = { id: id }
295
+ res[:name] = name if name
296
+ res[:log_level] = log_level if log_level
297
+ res[:emf_uri] = emf_uri if emf_uri
298
+ res[:specific_context_field_class] = specific_context_field_class.to_h if specific_context_field_class
299
+ res[:payload_field_class] = payload_field_class.to_h if payload_field_class
300
+ user_attributes_value = user_attributes.value
301
+ res[:user_attributes] = user_attributes_value if !user_attributes_value.empty?
302
+ res
303
+ end
304
+
305
+ def self.from_h(trace_class, stream_class, h, stream_class_h)
306
+ id = stream_class.assigns_automatic_event_class_id? ? nil : h[:id]
307
+ o = self.new(stream_class: stream_class, id: id)
308
+ o.name = h[:name] if h[:name]
309
+ o.log_level = h[:log_level] if h[:log_level]
310
+ o.emf_uri = h[:emf_uri] if h[:emf_uri]
311
+ o.specific_context_field_class = BTFieldClass.from_h(trace_class,
312
+ h[:specific_context_field_class], stream_class_h) if h[:specific_context_field_class]
313
+ o.payload_field_class = BTFieldClass.from_h(trace_class,
314
+ h[:payload_field_class], stream_class_h) if h[:payload_field_class]
315
+ o.user_attributes = h[:user_attributes] if h[:user_attributes]
316
+ h[:bt_event_class] = o
317
+ o
318
+ end
291
319
  end
292
320
  end
@@ -86,6 +86,10 @@ module Babeltrace2
86
86
  BTField.from_handle(handle)
87
87
  end
88
88
  alias common_context_field get_common_context_field
89
+
90
+ def name
91
+ get_class.name
92
+ end
89
93
  end
90
94
 
91
95
  end
@@ -159,7 +159,8 @@ module Babeltrace2
159
159
  alias type? type_is
160
160
 
161
161
  def set_user_attributes(user_attributes)
162
- Babeltrace2.bt_field_class_set_user_attributes(@handle, BTValue.from_value(user_attributes))
162
+ bt_user_attributes = BTValue.from_value(user_attributes)
163
+ Babeltrace2.bt_field_class_set_user_attributes(@handle, bt_user_attributes)
163
164
  self
164
165
  end
165
166
 
@@ -172,6 +173,36 @@ module Babeltrace2
172
173
  BTValueMap.new(Babeltrace2.bt_field_class_borrow_user_attributes(@handle), retain: true)
173
174
  end
174
175
  alias user_attributes get_user_attributes
176
+
177
+ def to_h
178
+ res = { type: class_snake_case_name }
179
+ user_attributes_value = user_attributes.value
180
+ res[:user_attributes] = user_attributes_value if !user_attributes_value.empty?
181
+ res
182
+ end
183
+
184
+ def self.from_h(trace_class, h, stream_class_h = nil)
185
+ Babeltrace2.const_get(snake_case_to_class(h[:type])).from_h(
186
+ trace_class, h, stream_class_h)
187
+ end
188
+
189
+ def from_h(h)
190
+ self.user_attributes = h[:user_attributes] if h[:user_attributes]
191
+ self
192
+ end
193
+
194
+ private
195
+
196
+ def class_snake_case_name
197
+ str = self.class.name.gsub(/::/, '')
198
+ str.match(/BTFieldClass(.*)/)[1].
199
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
200
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').downcase
201
+ end
202
+
203
+ def self.snake_case_to_class(str)
204
+ "BTFieldClass" << str.split("_").collect(&:capitalize).join
205
+ end
175
206
  end
176
207
 
177
208
  attach_function :bt_field_class_bool_create,
@@ -189,6 +220,12 @@ module Babeltrace2
189
220
  super(handle, retain: false)
190
221
  end
191
222
  end
223
+
224
+ def self.from_h(trace_class, h, stream_class_h = nil)
225
+ o = self.new(trace_class: trace_class).from_h(h)
226
+ h[:bt_field_class] = o
227
+ o
228
+ end
192
229
  end
193
230
  BTFieldClassBool = BTFieldClass::Bool
194
231
  BTFieldClass::TYPE_MAP[:BT_FIELD_CLASS_TYPE_BOOL] = [
@@ -219,6 +256,18 @@ module Babeltrace2
219
256
  Babeltrace2.bt_field_class_bit_array_get_length(@handle)
220
257
  end
221
258
  alias length get_length
259
+
260
+ def to_h
261
+ res = super
262
+ res[:length] = length
263
+ res
264
+ end
265
+
266
+ def self.from_h(trace_class, h, stream_class_h = nil)
267
+ o = self.new(trace_class: trace_class, length: h[:length]).from_h(h)
268
+ h[:bt_field_class] = o
269
+ o
270
+ end
222
271
  end
223
272
  BTFieldClassBitArray = BTFieldClass::BitArray
224
273
  BTFieldClass::TYPE_MAP[:BT_FIELD_CLASS_TYPE_BIT_ARRAY] = [
@@ -260,7 +309,7 @@ module Babeltrace2
260
309
  class BTFieldClass::Integer < BTFieldClass
261
310
 
262
311
  def set_field_value_range(n)
263
- raise "invalid range" if n < 0 || n > 63
312
+ raise "invalid range" if n < 0 || n > 64
264
313
  Babeltrace2.bt_field_class_integer_set_field_value_range(@handle, n)
265
314
  self
266
315
  end
@@ -305,6 +354,20 @@ module Babeltrace2
305
354
  preferred_display_base
306
355
  end
307
356
  end
357
+
358
+ def to_h
359
+ res = super
360
+ res[:field_value_range] = field_value_range
361
+ res[:preferred_display_base] = preferred_display_base_integer
362
+ res
363
+ end
364
+
365
+ def from_h(h)
366
+ super
367
+ self.field_value_range = h[:field_value_range] if h[:field_value_range]
368
+ self.preferred_display_base = h[:preferred_display_base] if h[:preferred_display_base]
369
+ self
370
+ end
308
371
  end
309
372
  BTFieldClassInteger = BTFieldClass::Integer
310
373
 
@@ -323,6 +386,12 @@ module Babeltrace2
323
386
  super(handle, retain: false)
324
387
  end
325
388
  end
389
+
390
+ def self.from_h(trace_class, h, stream_class_h = nil)
391
+ o = self.new(trace_class: trace_class).from_h(h)
392
+ h[:bt_field_class] = o
393
+ o
394
+ end
326
395
  end
327
396
  BTFieldClass::IntegerUnsigned = BTFieldClass::Integer::Unsigned
328
397
  BTFieldClassIntegerUnsigned = BTFieldClass::Integer::Unsigned
@@ -345,6 +414,12 @@ module Babeltrace2
345
414
  super(handle, retain: false)
346
415
  end
347
416
  end
417
+
418
+ def self.from_h(trace_class, h, stream_class_h = nil)
419
+ o = self.new(trace_class: trace_class).from_h(h)
420
+ h[:bt_field_class] = o
421
+ o
422
+ end
348
423
  end
349
424
  BTFieldClass::IntegerSigned = BTFieldClass::Integer::Signed
350
425
  BTFieldClassIntegerSigned = BTFieldClass::Integer::Signed
@@ -371,6 +446,12 @@ module Babeltrace2
371
446
  super(handle, retain: false)
372
447
  end
373
448
  end
449
+
450
+ def self.from_h(trace_class, h, stream_class_h = nil)
451
+ o = self.new(trace_class: trace_class).from_h(h)
452
+ h[:bt_field_class] = o
453
+ o
454
+ end
374
455
  end
375
456
  BTFieldClass::RealSinglePrecision = BTFieldClass::Real::SinglePrecision
376
457
  BTFieldClassRealSinglePrecision = BTFieldClass::Real::SinglePrecision
@@ -393,6 +474,12 @@ module Babeltrace2
393
474
  super(handle, retain: false)
394
475
  end
395
476
  end
477
+
478
+ def self.from_h(trace_class, h, stream_class_h = nil)
479
+ o = self.new(trace_class: trace_class).from_h(h)
480
+ h[:bt_field_class] = o
481
+ o
482
+ end
396
483
  end
397
484
  BTFieldClass::RealDoublePrecision = BTFieldClass::Real::DoublePrecision
398
485
  BTFieldClassRealDoublePrecision = BTFieldClass::Real::DoublePrecision
@@ -448,6 +535,25 @@ module Babeltrace2
448
535
  end
449
536
  alias mapping get_mapping
450
537
 
538
+ def to_h
539
+ res = super
540
+ res[:mappings] = get_mapping_count.times.collect { |i|
541
+ mapping = get_mapping_by_index(i)
542
+ [mapping.label, mapping.ranges.each.collect { |r| [r.lower, r.upper] }]
543
+ }.to_h
544
+ res
545
+ end
546
+
547
+ def from_h(h)
548
+ super
549
+ if h[:mappings]
550
+ h[:mappings].each { |name, ranges|
551
+ add_mapping(name, ranges)
552
+ }
553
+ end
554
+ self
555
+ end
556
+
451
557
  class Mapping < BTObject
452
558
  def get_label
453
559
  label = Babeltrace2.bt_field_class_enumeration_mapping_get_label(@handle)
@@ -511,6 +617,12 @@ module Babeltrace2
511
617
  end
512
618
  end
513
619
 
620
+ def self.from_h(trace_class, h, stream_class_h = nil)
621
+ o = self.new(trace_class: trace_class).from_h(h)
622
+ h[:bt_field_class] = o
623
+ o
624
+ end
625
+
514
626
  def add_mapping(label, ranges)
515
627
  label = label.inspect if label.kind_of?(Symbol)
516
628
  ranges = BTIntegerRangeSetUnsigned.from_value(ranges)
@@ -608,6 +720,12 @@ module Babeltrace2
608
720
  end
609
721
  end
610
722
 
723
+ def self.from_h(trace_class, h, stream_class_h = nil)
724
+ o = self.new(trace_class: trace_class).from_h(h)
725
+ h[:bt_field_class] = o
726
+ o
727
+ end
728
+
611
729
  def add_mapping(label, ranges)
612
730
  label = label.inspect if label.kind_of?(Symbol)
613
731
  ranges = BTIntegerRangeSetSigned.from_value(ranges)
@@ -672,6 +790,12 @@ module Babeltrace2
672
790
  super(handle, retain: false)
673
791
  end
674
792
  end
793
+
794
+ def self.from_h(trace_class, h, stream_class_h = nil)
795
+ o = self.new(trace_class: trace_class).from_h(h)
796
+ h[:bt_field_class] = o
797
+ o
798
+ end
675
799
  end
676
800
  BTFieldClassString = BTFieldClass::String
677
801
  BTFieldClass::TYPE_MAP[:BT_FIELD_CLASS_TYPE_STRING] = [
@@ -692,6 +816,12 @@ module Babeltrace2
692
816
  Babeltrace2.bt_field_class_array_borrow_element_field_class(@handle))
693
817
  end
694
818
  alias element_field_class get_element_field_class
819
+
820
+ def to_h
821
+ res = super
822
+ res[:element_field_class] = element_field_class.to_h
823
+ res
824
+ end
695
825
  end
696
826
  BTFieldClassArray = BTFieldClass::Array
697
827
 
@@ -721,6 +851,22 @@ module Babeltrace2
721
851
  end
722
852
  alias length get_length
723
853
  alias size get_length
854
+
855
+ def to_h
856
+ res = super
857
+ res[:length] = length
858
+ res
859
+ end
860
+
861
+ def self.from_h(trace_class, h, stream_class_h = nil)
862
+ o = self.new(trace_class: trace_class,
863
+ element_field_class: BTFieldClass.from_h(trace_class,
864
+ h[:element_field_class],
865
+ stream_class_h),
866
+ length: h[:length]).from_h(h)
867
+ h[:bt_field_class] = o
868
+ o
869
+ end
724
870
  end
725
871
  BTFieldClassArrayStatic = BTFieldClass::Array::Static
726
872
  BTFieldClass::TYPE_MAP[:BT_FIELD_CLASS_TYPE_STATIC_ARRAY] = [
@@ -744,6 +890,12 @@ module Babeltrace2
744
890
  BTFieldPath.new(handle, retain: true)
745
891
  end
746
892
  alias length_field_path get_length_field_path
893
+
894
+ def to_h
895
+ res = super
896
+ res[:length_field_path] = length_field_path.to_s
897
+ res
898
+ end
747
899
  end
748
900
  def initialize(handle = nil, retain: true, auto_release: true,
749
901
  trace_class: nil, element_field_class: nil, length_field_class: nil)
@@ -759,6 +911,22 @@ module Babeltrace2
759
911
  super(handle, retain: false)
760
912
  end
761
913
  end
914
+
915
+ def self.from_h(trace_class, h, stream_class_h = nil)
916
+ if (stream_class_h && h[:length_field_path])
917
+ length_field_class = BTStreamClass.locate_field_class(
918
+ BTFieldPath.path_from_s_to_h(h[:length_field_path]), stream_class_h)
919
+ else
920
+ length_field_class = nil
921
+ end
922
+ o = self.new(trace_class: trace_class,
923
+ element_field_class: BTFieldClass.from_h(trace_class,
924
+ h[:element_field_class],
925
+ stream_class_h),
926
+ length_field_class: length_field_class).from_h(h)
927
+ h[:bt_field_class] = o
928
+ o
929
+ end
762
930
  end
763
931
  BTFieldClassArrayDynamic = BTFieldClass::Array::Dynamic
764
932
  BTFieldClassArrayDynamicWithLengthField = BTFieldClass::Array::Dynamic::WithLengthField
@@ -845,7 +1013,8 @@ module Babeltrace2
845
1013
  alias field_class get_field_class
846
1014
 
847
1015
  def set_user_attributes(user_attributes)
848
- Babeltrace2.bt_field_class_structure_member_set_user_attributes(@handle, BTValue.from_value(user_attributes))
1016
+ bt_user_attributes = BTValue.from_value(user_attributes)
1017
+ Babeltrace2.bt_field_class_structure_member_set_user_attributes(@handle, bt_user_attributes)
849
1018
  self
850
1019
  end
851
1020
 
@@ -858,6 +1027,18 @@ module Babeltrace2
858
1027
  BTValueMap.new(Babeltrace2.bt_field_class_structure_member_borrow_user_attributes(@handle), retain: true)
859
1028
  end
860
1029
  alias user_attributes get_user_attributes
1030
+
1031
+ def to_h
1032
+ res = { name: name, field_class: field_class.to_h }
1033
+ user_attributes_value = user_attributes.value
1034
+ res[:user_attributes] = user_attributes_value if !user_attributes_value.empty?
1035
+ res
1036
+ end
1037
+
1038
+ def from_h(h)
1039
+ self.user_attributes = h[:user_attributes] if h[:user_attributes]
1040
+ self
1041
+ end
861
1042
  end
862
1043
 
863
1044
  def initialize(handle = nil, retain: true, auto_release: true,
@@ -911,6 +1092,23 @@ module Babeltrace2
911
1092
  end
912
1093
  end
913
1094
  alias [] get_member
1095
+
1096
+ def to_h
1097
+ res = super
1098
+ res[:members] = member_count.times.collect { |i| get_member_by_index(i).to_h }
1099
+ res
1100
+ end
1101
+
1102
+ def self.from_h(trace_class, h, stream_class_h = nil)
1103
+ o = self.new(trace_class: trace_class).from_h(h)
1104
+ h[:members].each_with_index { |v, i|
1105
+ o.append_member(v[:name],
1106
+ BTFieldClass.from_h(trace_class, v[:field_class], stream_class_h))
1107
+ o.get_member_by_index(i).from_h(v)
1108
+ }
1109
+ h[:bt_field_class] = o
1110
+ o
1111
+ end
914
1112
  end
915
1113
  BTFieldClassStructure = BTFieldClass::Structure
916
1114
  BTFieldClassStructureMember = BTFieldClass::Structure::Member
@@ -932,6 +1130,12 @@ module Babeltrace2
932
1130
  Babeltrace2.bt_field_class_option_borrow_field_class(@handle))
933
1131
  end
934
1132
  alias field_class get_field_class
1133
+
1134
+ def to_h
1135
+ res = super
1136
+ res[:field_class] = field_class.to_h
1137
+ res
1138
+ end
935
1139
  end
936
1140
  BTFieldClassOption = BTFieldClass::Option
937
1141
 
@@ -951,6 +1155,15 @@ module Babeltrace2
951
1155
  super(handle, retain: false)
952
1156
  end
953
1157
  end
1158
+
1159
+ def self.from_h(trace_class, h, stream_class_h = nil)
1160
+ o = self.new(trace_class: trace_class,
1161
+ optional_field_class: BTFieldClass.from_h(trace_class,
1162
+ h[:field_class],
1163
+ stream_class_h)).from_h(h)
1164
+ h[:bt_field_class] = o
1165
+ o
1166
+ end
954
1167
  end
955
1168
  BTFieldClassOptionWithoutSelectorField = BTFieldClass::Option::WithoutSelectorField
956
1169
  BTFieldClass::TYPE_MAP[:BT_FIELD_CLASS_TYPE_OPTION_WITHOUT_SELECTOR_FIELD] = [
@@ -968,6 +1181,12 @@ module Babeltrace2
968
1181
  BTFieldPath.new(handle, retain: true)
969
1182
  end
970
1183
  alias selector_field_path get_selector_field_path
1184
+
1185
+ def to_h
1186
+ res = super
1187
+ res[:selector_field_path] = selector_field_path.to_s if selector_field_path
1188
+ res
1189
+ end
971
1190
  end
972
1191
  BTFieldClassOptionWithSelectorField = BTFieldClass::Option::WithSelectorField
973
1192
 
@@ -1014,6 +1233,29 @@ module Babeltrace2
1014
1233
  @handle) != BT_FALSE
1015
1234
  end
1016
1235
  alias selector_is_reversed? selector_is_reversed
1236
+
1237
+ def to_h
1238
+ res = super
1239
+ res[:selector_is_reversed] = selector_is_reversed?
1240
+ res
1241
+ end
1242
+
1243
+ def self.from_h(trace_class, h, stream_class_h = nil)
1244
+ if (stream_class_h && h[:selector_field_path])
1245
+ selector_field_class = BTStreamClass.locate_field_class(
1246
+ BTFieldPath.path_from_s_to_h(h[:selector_field_path]), stream_class_h)
1247
+ else
1248
+ selector_field_class = nil
1249
+ end
1250
+ o = self.new(trace_class: trace_class,
1251
+ optional_field_class: BTFieldClass.from_h(trace_class,
1252
+ h[:field_class],
1253
+ stream_class_h),
1254
+ selector_field_class: selector_field_class).from_h(h)
1255
+ o.selector_is_reversed = h[:selector_is_reversed] if h[:selector_is_reversed]
1256
+ h[:bt_field_class] = o
1257
+ o
1258
+ end
1017
1259
  end
1018
1260
  BTFieldClassOptionWithSelectorFieldBool = BTFieldClass::Option::WithSelectorField::Bool
1019
1261
  BTFieldClass::TYPE_MAP[:BT_FIELD_CLASS_TYPE_OPTION_WITH_BOOL_SELECTOR_FIELD] = [
@@ -1051,6 +1293,29 @@ module Babeltrace2
1051
1293
  @handle), retain: true)
1052
1294
  end
1053
1295
  alias selector_ranges get_selector_ranges
1296
+
1297
+ def to_h
1298
+ res = super
1299
+ res[:selector_ranges] = selector_ranges.each.collect { |r| [r.lower, r.upper] }
1300
+ res
1301
+ end
1302
+
1303
+ def self.from_h(trace_class, h, stream_class_h = nil)
1304
+ if (stream_class_h && h[:selector_field_path])
1305
+ selector_field_class = BTStreamClass.locate_field_class(
1306
+ BTFieldPath.path_from_s_to_h(h[:selector_field_path]), stream_class_h)
1307
+ else
1308
+ selector_field_class = nil
1309
+ end
1310
+ o = self.new(trace_class: trace_class,
1311
+ optional_field_class: BTFieldClass.from_h(trace_class,
1312
+ h[:field_class],
1313
+ stream_class_h),
1314
+ selector_field_class: selector_field_class,
1315
+ ranges: h[:selector_ranges]).from_h(h)
1316
+ h[:bt_field_class] = o
1317
+ o
1318
+ end
1054
1319
  end
1055
1320
  BTFieldClassOptionWithSelectorFieldIntegerUnsigned = BTFieldClass::Option::WithSelectorField::IntegerUnsigned
1056
1321
  BTFieldClass::TYPE_MAP[:BT_FIELD_CLASS_TYPE_OPTION_WITH_UNSIGNED_INTEGER_SELECTOR_FIELD] = [
@@ -1088,6 +1353,29 @@ module Babeltrace2
1088
1353
  @handle), retain: true)
1089
1354
  end
1090
1355
  alias selector_ranges get_selector_ranges
1356
+
1357
+ def to_h
1358
+ res = super
1359
+ res[:selector_ranges] = selector_ranges.each.collect { |r| [r.lower, r.upper] }
1360
+ res
1361
+ end
1362
+
1363
+ def self.from_h(trace_class, h, stream_class_h = nil)
1364
+ if (stream_class_h && h[:selector_field_path])
1365
+ selector_field_class = BTStreamClass.locate_field_class(
1366
+ BTFieldPath.path_from_s_to_h(h[:selector_field_path]), stream_class_h)
1367
+ else
1368
+ selector_field_class = nil
1369
+ end
1370
+ o = self.new(trace_class: trace_class,
1371
+ optional_field_class: BTFieldClass.from_h(trace_class,
1372
+ h[:field_class],
1373
+ stream_class_h),
1374
+ selector_field_class: selector_field_class,
1375
+ ranges: h[:selector_ranges]).from_h(h)
1376
+ h[:bt_field_class] = o
1377
+ o
1378
+ end
1091
1379
  end
1092
1380
  BTFieldClassOptionWithSelectorFieldIntegerSigned = BTFieldClass::Option::WithSelectorField::IntegerSigned
1093
1381
  BTFieldClass::TYPE_MAP[:BT_FIELD_CLASS_TYPE_OPTION_WITH_SIGNED_INTEGER_SELECTOR_FIELD] = [
@@ -1158,8 +1446,8 @@ module Babeltrace2
1158
1446
  alias field_class get_field_class
1159
1447
 
1160
1448
  def set_user_attributes(user_attributes)
1161
- Babeltrace2.bt_field_class_variant_option_set_user_attributes(@handle,
1162
- BTValue.from_value(user_attributes))
1449
+ bt_user_attributes = BTValue.from_value(user_attributes)
1450
+ Babeltrace2.bt_field_class_variant_option_set_user_attributes(@handle, bt_user_attributes)
1163
1451
  self
1164
1452
  end
1165
1453
 
@@ -1174,6 +1462,13 @@ module Babeltrace2
1174
1462
  @handle), retain: true)
1175
1463
  end
1176
1464
  alias user_attributes get_user_attributes
1465
+
1466
+ def to_h
1467
+ res = { name: name, field_class: field_class.to_h }
1468
+ user_attributes_value = user_attributes.value
1469
+ res[:user_attributes] = user_attributes_value if !user_attributes_value.empty?
1470
+ res
1471
+ end
1177
1472
  end
1178
1473
  end
1179
1474
  BTFieldClassVariantOption = BTFieldClass::Variant::Option
@@ -1259,6 +1554,13 @@ module Babeltrace2
1259
1554
  BTFieldPath.new(handle, retain: true)
1260
1555
  end
1261
1556
  alias selector_field_path get_selector_field_path
1557
+
1558
+ def to_h
1559
+ res = super
1560
+ res[:selector_field_path] = selector_field_path.to_s
1561
+ res
1562
+ end
1563
+
1262
1564
  module IntegerUnsigned
1263
1565
  class Option < BTFieldClassVariantOption
1264
1566
  def get_ranges
@@ -1267,6 +1569,12 @@ module Babeltrace2
1267
1569
  @handle), retain: true)
1268
1570
  end
1269
1571
  alias ranges get_ranges
1572
+
1573
+ def to_h
1574
+ res = super
1575
+ res[:ranges] = ranges.each.collect { |r| [r.lower, r.upper] }
1576
+ res
1577
+ end
1270
1578
  end
1271
1579
  include WithSelectorField
1272
1580
  def append_option(name, option_field_class, ranges)
@@ -1303,6 +1611,12 @@ module Babeltrace2
1303
1611
  @handle), retain: true)
1304
1612
  end
1305
1613
  alias ranges get_ranges
1614
+
1615
+ def to_h
1616
+ res = super
1617
+ res[:ranges] = ranges.each.collect { |r| [r.lower, r.upper] }
1618
+ res
1619
+ end
1306
1620
  end
1307
1621
  include WithSelectorField
1308
1622
  def append_option(name, option_field_class, ranges)
@@ -1395,6 +1709,36 @@ module Babeltrace2
1395
1709
  end
1396
1710
  alias [] get_option
1397
1711
 
1712
+ def to_h
1713
+ res = super
1714
+ res[:options] = option_count.times.collect { |i|
1715
+ get_option_by_index(i).to_h
1716
+ }
1717
+ res
1718
+ end
1719
+
1720
+ def self.from_h(trace_class, h, stream_class_h = nil)
1721
+ if (stream_class_h && h[:selector_field_path])
1722
+ selector_field_class = BTStreamClass.locate_field_class(
1723
+ BTFieldPath.path_from_s_to_h(h[:selector_field_path]), stream_class_h)
1724
+ else
1725
+ selector_field_class = nil
1726
+ end
1727
+ o = self.new(trace_class: trace_class,
1728
+ selector_field_class: selector_field_class).from_h(h)
1729
+ if selector_field_class
1730
+ h[:options].each { |v|
1731
+ o.append_option(v[:name],
1732
+ BTFieldClass.from_h(trace_class, v[:field_class], stream_class_h),
1733
+ v[:ranges]) }
1734
+ else
1735
+ h[:options].each { |v|
1736
+ o.append_option(v[:name],
1737
+ BTFieldClass.from_h(trace_class, v[:field_class], stream_class_h)) }
1738
+ end
1739
+ h[:bt_field_class] = o
1740
+ o
1741
+ end
1398
1742
  end
1399
1743
  BTFieldClassVariantWithoutSelectorField =
1400
1744
  BTFieldClass::Variant::WithoutSelectorField
@@ -85,6 +85,30 @@ module Babeltrace2
85
85
  }
86
86
  path
87
87
  end
88
+
89
+ def self.path_from_s_to_h(str)
90
+ str_orig = str
91
+ m = str.match(/\A(PACKET_CONTEXT|EVENT_COMMON_CONTEXT|EVENT_SPECIFIC_CONTEXT|EVENT_PAYLOAD)/)
92
+ raise "invalid path #{str}" if !m
93
+ path = [(m[1].downcase << "_field_class").to_sym]
94
+ str = str.sub(m[1], "")
95
+ while !str.empty?
96
+ case str
97
+ when /\A\[(\d+)\]/
98
+ path.push :members, $1.to_i, :field_class
99
+ str = str.sub("[#{$1}]", "")
100
+ when /\A->/
101
+ path.push :element_field_class
102
+ str = str.sub("->", "")
103
+ when /\A=>/
104
+ path.push :field_class
105
+ str = str.sub("=>", "")
106
+ else
107
+ raise "invalid path #{str_orig}"
108
+ end
109
+ end
110
+ path
111
+ end
88
112
  end
89
113
 
90
114
  BT_FIELD_PATH_ITEM_TYPE_INDEX = 1 << 0
@@ -421,7 +421,7 @@ module Babeltrace2
421
421
  :bt_field_string_append_status
422
422
 
423
423
  attach_function :bt_field_string_append_with_length,
424
- [ :bt_field_string_handle, :string, :uint64 ],
424
+ [ :bt_field_string_handle, :pointer, :uint64 ],
425
425
  :bt_field_string_append_status
426
426
 
427
427
  attach_function :bt_field_string_clear,
@@ -460,7 +460,9 @@ module Babeltrace2
460
460
 
461
461
  def append(value, length: nil)
462
462
  res = if length
463
- Babeltrace2.bt_field_string_append_with_length(@handle, value, length)
463
+ ptr = FFI::MemoryPointer.new(length)
464
+ ptr.write_bytes(value, 0, length)
465
+ Babeltrace2.bt_field_string_append_with_length(@handle, ptr, length)
464
466
  else
465
467
  Babeltrace2.bt_field_string_append(@handle, value)
466
468
  end
@@ -521,12 +523,25 @@ module Babeltrace2
521
523
  end
522
524
 
523
525
  def value
524
- each.collect { |e| e.value }
526
+ each.collect(&:value)
527
+ end
528
+
529
+ def set_value(values)
530
+ raise "invalid value size" if values.size != length
531
+ values.each_with_index { |e, i|
532
+ get_element_field_by_index(i).set_value(e)
533
+ }
534
+ self
535
+ end
536
+
537
+ def value=(values)
538
+ set_value(values)
539
+ values
525
540
  end
526
541
 
527
542
  def to_s
528
543
  s = "["
529
- s << each.collect { |e| e.to_s }.join(", ")
544
+ s << each.collect(&:to_s).join(", ")
530
545
  s << "]"
531
546
  end
532
547
  end
@@ -634,6 +649,11 @@ module Babeltrace2
634
649
  end
635
650
  alias [] get_member_field
636
651
 
652
+ def []=(member_field, value)
653
+ get_member_field(member_field).set_value(value)
654
+ value
655
+ end
656
+
637
657
  def each
638
658
  if block_given?
639
659
  get_member_count.times { |i|
@@ -653,6 +673,11 @@ module Babeltrace2
653
673
  v
654
674
  end
655
675
 
676
+ def field_names
677
+ klass = get_class
678
+ get_member_count.times.collect { |i| klass.get_member_by_index(i).name }
679
+ end
680
+
656
681
  def to_s
657
682
  s = "{"
658
683
  klass = get_class
@@ -400,7 +400,8 @@ module Babeltrace2
400
400
  alias discarded_packets_have_default_clock_snapshots? discarded_packets_have_default_clock_snapshots
401
401
 
402
402
  def set_user_attributes(user_attributes)
403
- Babeltrace2.bt_stream_class_set_user_attributes(@handle, BTValue.from_value(user_attributes))
403
+ bt_user_attributes = BTValue.from_value(user_attributes)
404
+ Babeltrace2.bt_stream_class_set_user_attributes(@handle, bt_user_attributes)
404
405
  self
405
406
  end
406
407
 
@@ -414,6 +415,87 @@ module Babeltrace2
414
415
  end
415
416
  alias user_attributes get_user_attributes
416
417
 
418
+ def to_h
419
+ res = {
420
+ id: id,
421
+ supports_packets: supports_packets? }
422
+ if supports_packets?
423
+ res[:packets_have_beginning_default_clock_snapshot] =
424
+ packets_have_beginning_default_clock_snapshot?
425
+ res[:packets_have_end_default_clock_snapshot] =
426
+ packets_have_end_default_clock_snapshot?
427
+ end
428
+ res[:supports_discarded_events] = supports_discarded_events?
429
+ res[:discarded_events_have_default_clock_snapshots] =
430
+ discarded_events_have_default_clock_snapshots? if supports_discarded_events?
431
+ if supports_packets?
432
+ res[:supports_discarded_packets] = supports_discarded_packets?
433
+ if supports_discarded_packets?
434
+ res[:discarded_packets_have_default_clock_snapshots] = discarded_packets_have_default_clock_snapshots?
435
+ end
436
+ end
437
+ if default_clock_class
438
+ res[:default_clock_class] = default_clock_class.to_h
439
+ end
440
+ if supports_packets? && packet_context_field_class
441
+ res[:packet_context_field_class] = packet_context_field_class.to_h
442
+ end
443
+ if event_common_context_field_class
444
+ res[:event_common_context_field_class] = event_common_context_field_class.to_h
445
+ end
446
+ res[:assigns_automatic_event_class_id] = assigns_automatic_event_class_id?
447
+ res[:assigns_automatic_stream_id] = assigns_automatic_stream_id?
448
+ res[:event_classes] = event_class_count.times.collect { |i|
449
+ get_event_class_by_index(i).to_h
450
+ }
451
+ user_attributes_value = user_attributes.value
452
+ res[:user_attributes] = user_attributes_value if !user_attributes_value.empty?
453
+ res
454
+ end
455
+
456
+ def self.from_h(self_component, trace_class, h)
457
+ id = trace_class.assigns_automatic_stream_class_id? ? nil : h[:id]
458
+ o = trace_class.create_stream_class(id: id)
459
+ o.default_clock_class = BTClockClass.from_h(self_component,
460
+ h[:default_clock_class]) if h[:default_clock_class]
461
+ o.set_supports_packets( h[:supports_packets],
462
+ with_beginning_default_clock_snapshot:
463
+ h[:packets_have_beginning_default_clock_snapshot],
464
+ with_end_default_clock_snapshot:
465
+ h[:packets_have_end_default_clock_snapshot])
466
+ o.set_supports_discarded_events(h[:supports_discarded_events],
467
+ with_default_clock_snapshots:
468
+ h[:discarded_events_have_default_clock_snapshots])
469
+ o.set_supports_discarded_packets(h[:supports_discarded_packets],
470
+ with_default_clock_snapshots:
471
+ h[:discarded_packets_have_default_clock_snapshots]) if h[:supports_packets]
472
+ o.packet_context_field_class = BTFieldClass.from_h(trace_class,
473
+ h[:packet_context_field_class], h) if h[:packet_context_field_class]
474
+ o.event_common_context_field_class = BTFieldClass.from_h(trace_class,
475
+ h[:event_common_context_field_class], h) if h[:event_common_context_field_class]
476
+ o.assigns_automatic_event_class_id = h[:assigns_automatic_event_class_id] unless h[:assigns_automatic_event_class_id].nil?
477
+ o.assigns_automatic_stream_id = h[:assigns_automatic_stream_id] unless h[:assigns_automatic_stream_id].nil?
478
+ h[:event_classes].each_with_index { |v, i|
479
+ h[:bt_current_event] = i;
480
+ BTEventClass.from_h(trace_class, o, v, h)
481
+ }
482
+ h.delete(:bt_current_event)
483
+ o.user_attributes = h[:user_attributes] if h[:user_attributes]
484
+ h[:bt_stream_class] = o
485
+ o
486
+ end
487
+
488
+ def self.locate_field_class(path, h)
489
+ case path[0]
490
+ when :event_payload_field_class
491
+ h[:event_classes][h[:bt_current_event]][:payload_field_class].dig(*path[1..-1])[:bt_field_class]
492
+ when :event_specific_context_field_class
493
+ h[:event_classes][h[:bt_current_event]][:specific_context_field_class].dig(*path[1..-1])[:bt_field_class]
494
+ else
495
+ h.dig(*path)[:bt_field_class]
496
+ end
497
+ end
498
+
417
499
  def create_stream(trace, id: nil)
418
500
  BTStream.new(stream_class: @handle, trace: trace, id: nil)
419
501
  end
@@ -116,7 +116,8 @@ module Babeltrace2
116
116
  alias name get_name
117
117
 
118
118
  def set_user_attributes(user_attributes)
119
- Babeltrace2.bt_stream_set_user_attributes(@handle, BTValue.from_value(user_attributes))
119
+ bt_user_attributes = BTValue.from_value(user_attributes)
120
+ Babeltrace2.bt_stream_set_user_attributes(@handle, bt_user_attributes)
120
121
  self
121
122
  end
122
123
 
@@ -146,7 +146,8 @@ module Babeltrace2
146
146
  alias assigns_automatic_stream_class_id? assigns_automatic_stream_class_id
147
147
 
148
148
  def set_user_attributes(user_attributes)
149
- Babeltrace2.bt_trace_class_set_user_attributes(@handle, BTValue.from_value(user_attributes))
149
+ bt_user_attributes = BTValue.from_value(user_attributes)
150
+ Babeltrace2.bt_trace_class_set_user_attributes(@handle, bt_user_attributes)
150
151
  self
151
152
  end
152
153
 
@@ -339,5 +340,24 @@ module Babeltrace2
339
340
  end
340
341
  alias create_variant_class create_field_class_variant
341
342
  alias create_variant create_field_class_variant
343
+
344
+ def to_h
345
+ res = {
346
+ assigns_automatic_stream_class_id: assigns_automatic_stream_class_id?,
347
+ stream_classes: stream_class_count.times.collect { |i| get_stream_class_by_index(i).to_h } }
348
+ user_attributes_value = user_attributes.value
349
+ res[:user_attributes] = user_attributes_value if !user_attributes_value.empty?
350
+ res
351
+ end
352
+
353
+ def self.from_h(self_component, h)
354
+ o = self_component.create_trace_class
355
+ o.assigns_automatic_stream_class_id = h[:assigns_automatic_stream_class_id] unless h[:assigns_automatic_stream_class_id].nil?
356
+ h[:stream_classes].each { |v| BTStreamClass.from_h(self_component, o, v) }
357
+ o.user_attributes = h[:user_attributes] if h[:user_attributes]
358
+ h[:bt_trace_class] = o
359
+ o
360
+ end
361
+
342
362
  end
343
363
  end
@@ -281,7 +281,8 @@ module Babeltrace2
281
281
  end
282
282
 
283
283
  def set_user_attributes(user_attributes)
284
- Babeltrace2.bt_trace_set_user_attributes(@handle, BTValue.from_value(user_attributes))
284
+ bt_user_attributes = BTValue.from_value(user_attributes)
285
+ Babeltrace2.bt_trace_set_user_attributes(@handle, bt_user_attributes)
285
286
  self
286
287
  end
287
288
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: babeltrace2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brice Videau
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-03 00:00:00.000000000 Z
11
+ date: 2022-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
@@ -98,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0'
100
100
  requirements: []
101
- rubygems_version: 3.1.2
101
+ rubygems_version: 3.3.5
102
102
  signing_key:
103
103
  specification_version: 4
104
104
  summary: Ruby Babeltrace 2 bindings