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 +4 -4
- data/ext/ruby-static-tracing/darwin/provider.c +7 -1
- data/ext/ruby-static-tracing/darwin/ruby_static_tracing.c +2 -2
- data/ext/ruby-static-tracing/extconf.rb +0 -2
- data/lib/ruby-static-tracing.rb +0 -14
- data/lib/ruby-static-tracing/version.rb +1 -1
- metadata +3 -25
- data/lib/ruby-static-tracing/tracer.rb +0 -5
- data/lib/ruby-static-tracing/tracer/base.rb +0 -73
- data/lib/ruby-static-tracing/tracer/concerns/latency_tracer.rb +0 -16
- data/lib/ruby-static-tracing/tracer/helpers.rb +0 -17
- data/lib/ruby-static-tracing/tracer/latency.rb +0 -21
- data/lib/ruby-static-tracing/tracer/stack.rb +0 -20
- data/lib/ruby-static-tracing/tracers.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d539146e2e9ea21dc04efcdf30e79191e6baa8b26df3404dce11caecce1f41c5
|
4
|
+
data.tar.gz: a7fcc027f75a89674c33ae66b133c871d3d498de2730a512e62de1849ba81d6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
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, "
|
39
|
-
rb_define_method(cProvider, "
|
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);
|
data/lib/ruby-static-tracing.rb
CHANGED
@@ -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?
|
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.
|
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-
|
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
|
-
|
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,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
|