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 +4 -4
- data/README.md +2 -3
- data/example/example.rb +7 -0
- data/lib/perfetto/interceptor.rb +6 -2
- data/lib/perfetto/middleware.rb +20 -17
- data/lib/perfetto/version.rb +1 -1
- data/lib/perfetto.rb +5 -2
- metadata +1 -2
- data/perfetto.gemspec +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 39a086e467a4a552a3cc5f297463efd645b6b9f84f2aa12a3cefac8220cf8bc5
|
4
|
+
data.tar.gz: fb857cf75960f71c666f5559e57a500f5c077e155d154de291f74390f362ac17
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
data/lib/perfetto/interceptor.rb
CHANGED
@@ -62,27 +62,31 @@ module Perfetto
|
|
62
62
|
|
63
63
|
perfetto_traced_class_methods << method_name
|
64
64
|
|
65
|
-
original_method =
|
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
|
data/lib/perfetto/middleware.rb
CHANGED
@@ -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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
data/lib/perfetto/version.rb
CHANGED
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.
|
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
|