ruby-static-tracing 0.0.15 → 0.0.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a43ab444f18179cf5d5cdcd677d5a2043a0849adaa4df605920f9869ed0191e
4
- data.tar.gz: 49086fa125a903a9f48923ba22de6999fa01f87dde54e35dc5064941155135d1
3
+ metadata.gz: d539146e2e9ea21dc04efcdf30e79191e6baa8b26df3404dce11caecce1f41c5
4
+ data.tar.gz: a7fcc027f75a89674c33ae66b133c871d3d498de2730a512e62de1849ba81d6d
5
5
  SHA512:
6
- metadata.gz: 0d987dcb22dd0fbcf4294f6ba33792d383c289c52a241fd2579f36669330fc6935b928de947c9e51e48f9b22f751a79cb0a22be6ec7005605ebcb2e209f6c9f5
7
- data.tar.gz: f11c5777711c104064de7664ce784a7e84fb1924b539011cf4bde22572eb62d432f31c83b024d4fe7401753a0621ce03fcb29d1ed5e42955f00e31b5ff83c414
6
+ metadata.gz: e5c3b59f152a01cbf066828b248ab10c5ec7453b4457fdd90cc5bf776fa0fb164e48a5c284bf6922bc9deb59f66db537ad17e80547dd567879b516e2592760a8
7
+ data.tar.gz: 531f8f45254b8bab2171ebc40afee1395322ff64d7635094a52b25bb1e4dd6915768fbd4bc45ddc4003491cdce0659dfcb4700f398b6eb96f3d5f2069a9dd867
@@ -41,7 +41,13 @@ provider_enable(VALUE self) {
41
41
  static_tracing_provider_t *res = NULL;
42
42
  TypedData_Get_Struct(self, static_tracing_provider_t,
43
43
  &static_tracing_provider_type, res);
44
- return usdt_provider_enable(res->usdt_provider) == 0 ? Qtrue : Qfalse;
44
+ int rc = usdt_provider_enable(res->usdt_provider);
45
+
46
+ // FIXME how to better log this? raise an exception probabaly
47
+ //if (rc != 0)
48
+ // printf("Error: %s\n", res->usdt_provider->error);
49
+
50
+ return rc == 0 ? Qtrue : Qfalse;
45
51
  }
46
52
 
47
53
  /*
@@ -35,8 +35,8 @@ void Init_ruby_static_tracing() {
35
35
 
36
36
  rb_define_alloc_func(cProvider, static_tracing_provider_alloc);
37
37
  rb_define_method(cProvider, "provider_initialize", provider_initialize, 1);
38
- rb_define_method(cProvider, "enable", provider_enable, 0);
39
- rb_define_method(cProvider, "disable", provider_disable, 0);
38
+ rb_define_method(cProvider, "_enable_provider", provider_enable, 0);
39
+ rb_define_method(cProvider, "_disable_provider", provider_disable, 0);
40
40
  rb_define_method(cProvider, "destroy", provider_destroy, 0);
41
41
 
42
42
  rb_define_alloc_func(cTracepoint, static_tracing_tracepoint_alloc);
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  $LOAD_PATH.unshift File.expand_path('../../lib', __dir__).freeze
4
2
 
5
3
  require 'mkmf'
@@ -6,9 +6,6 @@ require 'ruby-static-tracing/version'
6
6
  require 'ruby-static-tracing/platform'
7
7
  require 'ruby-static-tracing/provider'
8
8
  require 'ruby-static-tracing/tracepoint'
9
- require 'ruby-static-tracing/configuration'
10
- require 'ruby-static-tracing/tracer'
11
- require 'ruby-static-tracing/tracers'
12
9
 
13
10
  # FIXME: Including StaticTracing should cause every method in a module or class to be registered
14
11
  # Implement this by introspecting all methods on the includor, and wrapping them.
@@ -47,7 +44,6 @@ module StaticTracing
47
44
  # Overwrite the definition of all functions that are enabled
48
45
  # with a wrapped version that has tracing enabled
49
46
  def enable!
50
- StaticTracing::Tracers.enable!
51
47
  StaticTracing::Provider.enable! # FIXME individually call enable
52
48
  @enabled = true
53
49
  end
@@ -55,7 +51,6 @@ module StaticTracing
55
51
  # Overwrite the definition of all functions to their original definition,
56
52
  # no longer wrapping them
57
53
  def disable!
58
- StaticTracing::Tracers.disable!
59
54
  StaticTracing::Provider.disable! # FIXME dangerous
60
55
  @enabled = false
61
56
  end
@@ -64,15 +59,6 @@ module StaticTracing
64
59
  def toggle_tracing!
65
60
  enabled? ? disable! : enable!
66
61
  end
67
-
68
- # Block to configure static tracing, eg:
69
- #
70
- # StaticTracing.configure do |config|
71
- # config.add_tracer(StaticTracing::Tracer::Latency)
72
- # end
73
- def configure
74
- yield Configuration.instance
75
- end
76
62
  end
77
63
 
78
64
  require 'ruby-static-tracing/ruby_static_tracing' if StaticTracing::Platform.supported_platform?
@@ -2,5 +2,5 @@
2
2
 
3
3
  module StaticTracing
4
4
  # The current version of this gem
5
- VERSION = '0.0.15'
5
+ VERSION = '0.0.16'
6
6
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-static-tracing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.15
4
+ version: 0.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dale Hamel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-07-18 00:00:00.000000000 Z
11
+ date: 2019-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: unmixer
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: minitest
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -188,13 +174,6 @@ files:
188
174
  - lib/ruby-static-tracing/platform.rb
189
175
  - lib/ruby-static-tracing/provider.rb
190
176
  - lib/ruby-static-tracing/tracepoint.rb
191
- - lib/ruby-static-tracing/tracer.rb
192
- - lib/ruby-static-tracing/tracer/base.rb
193
- - lib/ruby-static-tracing/tracer/concerns/latency_tracer.rb
194
- - lib/ruby-static-tracing/tracer/helpers.rb
195
- - lib/ruby-static-tracing/tracer/latency.rb
196
- - lib/ruby-static-tracing/tracer/stack.rb
197
- - lib/ruby-static-tracing/tracers.rb
198
177
  - lib/ruby-static-tracing/version.rb
199
178
  - lib/tasks/docker.rb
200
179
  - lib/tasks/vagrant.rb
@@ -218,8 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
218
197
  - !ruby/object:Gem::Version
219
198
  version: '0'
220
199
  requirements: []
221
- rubyforge_project:
222
- rubygems_version: 2.7.6.2
200
+ rubygems_version: 3.0.3
223
201
  signing_key:
224
202
  specification_version: 4
225
203
  summary: USDT tracing for Ruby
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'tracer/base'
4
- require_relative 'tracer/latency'
5
- require_relative 'tracer/stack'
@@ -1,73 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'unmixer'
4
- using Unmixer
5
-
6
- require 'ruby-static-tracing/tracer/helpers'
7
-
8
- module StaticTracing
9
- module Tracer
10
- class Base
11
- class << self
12
- include Tracer::Helpers
13
-
14
- def register(klass, *method_names, provider: nil)
15
- provider_name ||= underscore(klass.name)
16
- provider = Provider.register(provider_name)
17
- method_overrides = function_wrapper.new(provider, @wrapping_function, @data_types)
18
- modified_classes[klass] ||= method_overrides
19
- modified_classes[klass].add_override(method_names.flatten)
20
- end
21
-
22
- def enable!
23
- modified_classes.each do |klass, wrapped_methods|
24
- klass.prepend(wrapped_methods)
25
- end
26
- end
27
-
28
- def disable!
29
- modified_classes.each do |klass, wrapped_methods|
30
- klass.instance_eval { unprepend(wrapped_methods) }
31
- end
32
- end
33
-
34
- private
35
-
36
- def function_wrapper
37
- Class.new(Module) do
38
- def initialize(provider, wrapping_function, data_types)
39
- @provider = provider
40
- @wrapping_function = wrapping_function
41
- @data_types = data_types
42
- end
43
-
44
- def add_override(methods)
45
- methods.each do |method|
46
- Tracepoint.new(@provider.namespace, method.to_s, *@data_types)
47
- define_method(method.to_s, @wrapping_function)
48
- end
49
- end
50
-
51
- attr_reader :provider
52
- end
53
- end
54
-
55
- def modified_classes
56
- @modified_classes ||= {}
57
- end
58
-
59
- def set_tracepoint_data_types(*args)
60
- @data_types = *args
61
- end
62
-
63
- def tracepoint_data_types
64
- @data_types
65
- end
66
-
67
- def set_wrapping_function(callable)
68
- @wrapping_function = callable
69
- end
70
- end
71
- end
72
- end
73
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module StaticTracing
4
- module Tracer
5
- module Concerns
6
- # Including this module will cause the target
7
- # to have latency tracers added around every method
8
- module Latency
9
- def self.included(base)
10
- methods = base.public_instance_methods(false)
11
- StaticTracing::Tracer::Latency.register(base, methods)
12
- end
13
- end
14
- end
15
- end
16
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module StaticTracing
4
- module Tracer
5
- module Helpers
6
- module_function
7
-
8
- def underscore(class_name)
9
- class_name.gsub(/::/, '_')
10
- .gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
11
- .gsub(/([a-z\d])([A-Z])/, '\1_\2')
12
- .tr('-', '_')
13
- .downcase
14
- end
15
- end
16
- end
17
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module StaticTracing
4
- module Tracer
5
- class Latency < Base
6
- set_wrapping_function lambda { |*args, &block|
7
- start_time = StaticTracing.nsec
8
- result = super(*args, &block)
9
- duration = StaticTracing.nsec - start_time
10
- method_name = __method__.to_s
11
- provider = Tracer::Helpers.underscore(self.class.name)
12
- # FIXME: benchmark this, we may need to cache the provider instance on the object
13
- # This lookup is a bit of a hack
14
- Tracepoint.fetch(provider, method_name).fire(method_name, duration)
15
- result
16
- }
17
-
18
- set_tracepoint_data_types(String, Integer)
19
- end
20
- end
21
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module StaticTracing
4
- module Tracer
5
- # A stack tracer gets the stack trace at point when
6
- # the tracer is executed
7
- class Stack < Base
8
- set_wrapping_function lambda { |*args, &block|
9
- current_stack = send(:caller).join("\n")
10
- method_name = __method__.to_s
11
- provider = Tracer::Helpers.underscore(self.class.name)
12
- Tracepoint.fetch(provider, method_name).fire(method_name, current_stack)
13
-
14
- super(*args, &block)
15
- }
16
-
17
- set_tracepoint_data_types(String, String)
18
- end
19
- end
20
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module StaticTracing
4
- # Tracers are a layer of abstraction above tracepoints. They are opinionated
5
- # and contextual ways of applying tracepoints to an application.
6
- class Tracers
7
- # Error for an invalid tracer
8
- class InvalidTracerError < StandardError
9
- def initialize
10
- msg = <<~MSG
11
- You need to add a valid tracer.
12
-
13
- To create a valid tracer please inherit from StaticTracing::Tracer::Base
14
- and follow the guide on how to create tracers
15
- MSG
16
- super(msg)
17
- end
18
- end
19
-
20
- class << self
21
- def add(tracer)
22
- raise InvalidTracerError unless tracer < StaticTracing::Tracer::Base
23
-
24
- tracers << tracer
25
- end
26
-
27
- # Enables each tracer, overriding original
28
- # method definition with traced one
29
- def enable!
30
- tracers.each(&:enable!)
31
- end
32
-
33
- # Disables each tracer, replacing the method definition
34
- def disable!
35
- tracers.each(&:disable!)
36
- end
37
-
38
- # Clears all tracers
39
- def clean
40
- # FIXME: - actuallly ensure destroyed to avoid memory leaks
41
- @tracers = []
42
- end
43
-
44
- private
45
-
46
- def tracers
47
- @tracers ||= []
48
- end
49
- end
50
- end
51
- end