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