perfetto 0.1.7 → 0.1.9

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: 7384eed21d076be3de57b5afa9fc886e979ccc4d89e167afc61e2800314d61f4
4
- data.tar.gz: f6c71a99835e93c07734bfd790aba1d80fa86879327f2357007c184edbd0a619
3
+ metadata.gz: 39a086e467a4a552a3cc5f297463efd645b6b9f84f2aa12a3cefac8220cf8bc5
4
+ data.tar.gz: fb857cf75960f71c666f5559e57a500f5c077e155d154de291f74390f362ac17
5
5
  SHA512:
6
- metadata.gz: c77bd5af96cb578659982e03d292893426a64d7d8ef7618ea5ab782005c519c6e2244b4d6cd7885fc2b9f2e76f6551e1fb3bd67b803552df3c8b8e861f671c38
7
- data.tar.gz: e33c6fe69f65d1dcd2ed3a81ba6e2e699b85b89932511233638900514921d310dbf305f17bb0bb899fe39ac2593bac48667fcca452fa53f9fdf0467cf7a90923
6
+ metadata.gz: d0c4891e4896d3b8e35039d7bc91911ecf839c2f76434bdde2385b1b38c97a6a94b5620a8c6c8ab571178cabd99b65ed0b34e3b24c826125105cb334d3f4b85a
7
+ data.tar.gz: b4a5c367b82bf931813c762b0f83e156c2a1985a03d5f03ec2cd72ae395eeb2f11f347a9d3345d89f0b3c5d9e8b143dffe295f2bbd08406823c5b5d29f3d7861
data/README.md CHANGED
@@ -94,16 +94,15 @@ Perfetto.stop_tracing "example.pftrace"
94
94
  require "sinatra/base"
95
95
  require "perfetto"
96
96
 
97
- Perfetto.setup enable_tracing: true
98
-
99
97
  class Server < Sinatra::Base
100
- use Perfetto::Middleware
98
+ use Perfetto::Middleware, env_proc: ->(env) { env.to_json }
101
99
 
102
100
  get "/" do
103
101
  "Hello World"
104
102
  end
105
103
  end
106
104
 
105
+ Perfetto.setup enable_tracing: true
107
106
  Perfetto.start_tracing
108
107
  Server.run!
109
108
  Perfetto.stop_tracing "middleware.pftrace"
data/example/example.rb CHANGED
@@ -59,9 +59,16 @@ class Foo
59
59
  end
60
60
 
61
61
  class Bar < Foo
62
+ def self.buf2
63
+ puts "buf2"
64
+ sleep 0.1
65
+ end
66
+
62
67
  def say
63
68
  puts "hello"
64
69
  sleep 0.1
70
+ Bar.buf2
71
+ Foo.buf
65
72
  end
66
73
  end
67
74
 
@@ -62,27 +62,31 @@ module Perfetto
62
62
 
63
63
  perfetto_traced_class_methods << method_name
64
64
 
65
- original_method = method(method_name)
65
+ original_method = singleton_class.instance_method(method_name)
66
66
  singleton_class.send(:alias_method, "_pfc_#{method_name}", method_name)
67
67
 
68
68
  define_singleton_method(method_name) do |*args, **kwargs, &block|
69
69
  category = name
70
70
  task_name = "#{name}.#{method_name}"
71
71
  Perfetto.trace_event_begin category, task_name
72
- original_method.call(*args, **kwargs, &block)
72
+ original_method.bind(self).call(*args, **kwargs, &block)
73
73
  ensure
74
74
  Perfetto.trace_event_end name
75
75
  end
76
76
  end
77
77
 
78
78
  def perfetto_trace_all
79
+ original_method_added = singleton_class.instance_method(:method_added)
79
80
  define_singleton_method(:method_added) do |method_name|
81
+ original_method_added.bind(self).call(method_name)
80
82
  return if perfetto_traced_instance_method?(method_name)
81
83
 
82
84
  perfetto_trace_instance_method method_name
83
85
  end
84
86
 
87
+ original_singleton_method_added = singleton_class.instance_method(:singleton_method_added)
85
88
  define_singleton_method(:singleton_method_added) do |method_name|
89
+ original_singleton_method_added.bind(self).call(method_name)
86
90
  return if perfetto_traced_class_method?(method_name)
87
91
 
88
92
  perfetto_trace_class_method method_name
@@ -1,32 +1,35 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "json"
4
-
5
3
  module Perfetto
6
4
  # Rack middleware
7
5
  class Middleware
8
6
  def initialize(app, options = {})
9
7
  @app = app
10
8
  @options = options
9
+ @env_proc = options[:env_proc]
11
10
  end
12
11
 
13
- if Perfetto::Configure.enable_tracing
14
- def call(env)
15
- category = "RackMiddleware"
16
- method = env["REQUEST_METHOD"] || "UNKNOWN"
17
- path = env["PATH_INFO"] || "UNKNOWN PATH"
18
- task_name = "#{method} #{path}"
19
- Perfetto.trace_event_begin_with_debug_info category, task_name, "env", env.to_json
20
- begin
21
- @app.call(env)
22
- ensure
23
- Perfetto.trace_event_end category
24
- end
25
- end
26
- else # Stub methods
27
- def call(env)
12
+ # rubocop:disable Metrics/MethodLength
13
+ def perfetto_traced_call(env)
14
+ category = "RackMiddleware"
15
+ method = env["REQUEST_METHOD"] || "UNKNOWN"
16
+ path = env["PATH_INFO"] || "UNKNOWN PATH"
17
+ task_name = "#{method} #{path}"
18
+ env_str = @env_proc&.call(env) || { env: "unknown" }.to_json
19
+
20
+ Perfetto.trace_event_begin_with_debug_info category, task_name, "env", env_str
21
+ begin
28
22
  @app.call(env)
23
+ ensure
24
+ Perfetto.trace_event_end category
29
25
  end
30
26
  end
27
+ # rubocop:enable Metrics/MethodLength
28
+
29
+ def call(env)
30
+ @app.call(env) unless Perfetto::Configure.enable_tracing
31
+
32
+ perfetto_traced_call(env)
33
+ end
31
34
  end
32
35
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Perfetto
4
- VERSION = "0.1.7"
4
+ VERSION = "0.1.9"
5
5
  end
data/lib/perfetto.rb CHANGED
@@ -1,10 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "json"
4
+
3
5
  require_relative "perfetto/version"
4
6
 
5
7
  require_relative "perfetto/core_ext/configurable"
6
8
  require_relative "perfetto/configure"
7
9
 
10
+ # Rack middleware
11
+ require_relative "perfetto/middleware"
12
+
8
13
  # To minimize the overhead of tracing at runtime
9
14
  # we determine whether to enable instrumentations
10
15
  # at the first call to 'setup' method instead of
@@ -20,7 +25,5 @@ module Perfetto
20
25
  require_relative "perfetto/perfetto"
21
26
  # Instrumentation Helper
22
27
  require_relative "perfetto/interceptor"
23
- # Rack middleware
24
- require_relative "perfetto/middleware"
25
28
  end
26
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: perfetto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kowalski Dark
@@ -38,7 +38,6 @@ files:
38
38
  - lib/perfetto/middleware.rb
39
39
  - lib/perfetto/perfetto.rb
40
40
  - lib/perfetto/version.rb
41
- - perfetto.gemspec
42
41
  - sig/perfetto.rbs
43
42
  homepage: https://github.com/yet-another-ai/perfetto.rb
44
43
  licenses: []
data/perfetto.gemspec DELETED
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "lib/perfetto/version"
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "perfetto"
7
- spec.version = Perfetto::VERSION
8
- spec.authors = ["Kowalski Dark"]
9
- spec.email = ["github@akenonet.com"]
10
-
11
- spec.summary = "Yet another event tracing library for Ruby."
12
- spec.description = "Yet another event tracing library for Ruby."
13
- spec.homepage = "https://github.com/yet-another-ai/perfetto.rb"
14
- spec.required_ruby_version = ">= 3.3.0"
15
-
16
- spec.metadata["homepage_uri"] = spec.homepage
17
-
18
- # Specify which files should be added to the gem when it is released.
19
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
20
- spec.files = Dir.chdir(__dir__) do
21
- `git ls-files -z`.split("\x0").reject do |f|
22
- (File.expand_path(f) == __FILE__) ||
23
- f.start_with?(*%w[bin/ test/ spec/ features/ .git .github appveyor Gemfile])
24
- end
25
- end
26
- spec.bindir = "exe"
27
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
28
- spec.require_paths = %w[lib ext]
29
- spec.extensions = ["ext/perfetto/extconf.rb"]
30
-
31
- # For more information and examples about making a new gem, check out our
32
- # guide at: https://bundler.io/guides/creating_gem.html
33
- spec.metadata["rubygems_mfa_required"] = "true"
34
- end