ruby-static-tracing 0.0.15 → 0.0.16

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: 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