perfetto 0.1.7 → 0.1.9

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