perfetto 0.1.6 → 0.1.7
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/README.md +26 -1
- data/lib/perfetto/interceptor.rb +8 -5
- data/lib/perfetto/middleware.rb +32 -0
- data/lib/perfetto/perfetto.rb +1 -1
- data/lib/perfetto/version.rb +1 -1
- data/lib/perfetto.rb +2 -0
- data/perfetto.gemspec +34 -0
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7384eed21d076be3de57b5afa9fc886e979ccc4d89e167afc61e2800314d61f4
|
4
|
+
data.tar.gz: f6c71a99835e93c07734bfd790aba1d80fa86879327f2357007c184edbd0a619
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c77bd5af96cb578659982e03d292893426a64d7d8ef7618ea5ab782005c519c6e2244b4d6cd7885fc2b9f2e76f6551e1fb3bd67b803552df3c8b8e861f671c38
|
7
|
+
data.tar.gz: e33c6fe69f65d1dcd2ed3a81ba6e2e699b85b89932511233638900514921d310dbf305f17bb0bb899fe39ac2593bac48667fcca452fa53f9fdf0467cf7a90923
|
data/README.md
CHANGED
@@ -4,7 +4,9 @@
|
|
4
4
|
|
5
5
|
https://ui.perfetto.dev/
|
6
6
|
|
7
|
-
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
### Basic
|
8
10
|
|
9
11
|
```ruby
|
10
12
|
require "perfetto"
|
@@ -83,3 +85,26 @@ Perfetto.stop_tracing "example.pftrace"
|
|
83
85
|
```
|
84
86
|
|
85
87
|

|
88
|
+
|
89
|
+
### Rack Middleware
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
# frozen_string_literal: true
|
93
|
+
|
94
|
+
require "sinatra/base"
|
95
|
+
require "perfetto"
|
96
|
+
|
97
|
+
Perfetto.setup enable_tracing: true
|
98
|
+
|
99
|
+
class Server < Sinatra::Base
|
100
|
+
use Perfetto::Middleware
|
101
|
+
|
102
|
+
get "/" do
|
103
|
+
"Hello World"
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
Perfetto.start_tracing
|
108
|
+
Server.run!
|
109
|
+
Perfetto.stop_tracing "middleware.pftrace"
|
110
|
+
```
|
data/lib/perfetto/interceptor.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# rubocop:disable Metrics/AbcSize
|
4
|
+
# rubocop:disable Metrics/MethodLength
|
5
|
+
|
3
6
|
module Perfetto
|
4
7
|
# To intercept method calls in other classes
|
5
8
|
module Interceptor
|
@@ -39,7 +42,6 @@ module Perfetto
|
|
39
42
|
def perfetto_trace_instance_method(method_name)
|
40
43
|
return if method_name.to_s.start_with? "_pfi_"
|
41
44
|
|
42
|
-
# warn "Perfetto[InstanceMethod]: #{name}##{method_name}"
|
43
45
|
perfetto_traced_instance_methods << method_name
|
44
46
|
|
45
47
|
original_method = instance_method(method_name)
|
@@ -56,17 +58,16 @@ module Perfetto
|
|
56
58
|
end
|
57
59
|
|
58
60
|
def perfetto_trace_class_method(method_name)
|
59
|
-
return if method_name.to_s
|
61
|
+
return if method_name.to_s.start_with? "_pfc_"
|
60
62
|
|
61
|
-
# warn "Perfetto[ClassMethod]: #{name}.#{method_name}"
|
62
63
|
perfetto_traced_class_methods << method_name
|
63
64
|
|
64
65
|
original_method = method(method_name)
|
65
66
|
singleton_class.send(:alias_method, "_pfc_#{method_name}", method_name)
|
66
67
|
|
67
68
|
define_singleton_method(method_name) do |*args, **kwargs, &block|
|
68
|
-
category =
|
69
|
-
task_name = "#{
|
69
|
+
category = name
|
70
|
+
task_name = "#{name}.#{method_name}"
|
70
71
|
Perfetto.trace_event_begin category, task_name
|
71
72
|
original_method.call(*args, **kwargs, &block)
|
72
73
|
ensure
|
@@ -106,3 +107,5 @@ module Perfetto
|
|
106
107
|
end
|
107
108
|
end
|
108
109
|
end
|
110
|
+
# rubocop:enable Metrics/AbcSize
|
111
|
+
# rubocop:enable Metrics/MethodLength
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
module Perfetto
|
6
|
+
# Rack middleware
|
7
|
+
class Middleware
|
8
|
+
def initialize(app, options = {})
|
9
|
+
@app = app
|
10
|
+
@options = options
|
11
|
+
end
|
12
|
+
|
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)
|
28
|
+
@app.call(env)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/perfetto/perfetto.rb
CHANGED
@@ -13,7 +13,7 @@ module Perfetto
|
|
13
13
|
start_tracing_native Configure.buffer_size_kb
|
14
14
|
end
|
15
15
|
|
16
|
-
def self.stop_tracing(trace_file_name = "#{Time.now.strftime("%Y%m%d
|
16
|
+
def self.stop_tracing(trace_file_name = "#{Time.now.strftime("%Y%m%d-%H-%M-%S")}.pftrace")
|
17
17
|
stop_tracing_native trace_file_name
|
18
18
|
end
|
19
19
|
|
data/lib/perfetto/version.rb
CHANGED
data/lib/perfetto.rb
CHANGED
data/perfetto.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
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
|
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.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kowalski Dark
|
@@ -35,8 +35,10 @@ files:
|
|
35
35
|
- lib/perfetto/configure.rb
|
36
36
|
- lib/perfetto/core_ext/configurable.rb
|
37
37
|
- lib/perfetto/interceptor.rb
|
38
|
+
- lib/perfetto/middleware.rb
|
38
39
|
- lib/perfetto/perfetto.rb
|
39
40
|
- lib/perfetto/version.rb
|
41
|
+
- perfetto.gemspec
|
40
42
|
- sig/perfetto.rbs
|
41
43
|
homepage: https://github.com/yet-another-ai/perfetto.rb
|
42
44
|
licenses: []
|