perfetto 0.1.6 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +25 -1
- data/lib/perfetto/interceptor.rb +8 -5
- data/lib/perfetto/middleware.rb +35 -0
- data/lib/perfetto/perfetto.rb +1 -1
- data/lib/perfetto/version.rb +1 -1
- data/lib/perfetto.rb +5 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd838b9d196922765c51a65336d1304c6d9ac9aca456fce60d42b8c72b8b62d4
|
4
|
+
data.tar.gz: 9c1972ee1b588bd0dacaaca9cd81c39d90fd892ff0c57b0286157cf8944c6ae8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92e2da1eceb1263f9d9590fed6130623deee27ab0caa9e4faaf701e3ad340456a6c3730abba3b84da93df94f732a9136ddc8fa9eb7558344701fc132a7f6b69e
|
7
|
+
data.tar.gz: f2f6ba2c22ca06fdaea0e09c6ad5e555d7b580a6630a77ff0132c0de1ee188fd33c6ab76b35fc5819a8ea1f5aed5863323207b232c0dfabbb633b6b524136247
|
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,25 @@ Perfetto.stop_tracing "example.pftrace"
|
|
83
85
|
```
|
84
86
|
|
85
87
|
![example](./example/example.png)
|
88
|
+
|
89
|
+
### Rack Middleware
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
# frozen_string_literal: true
|
93
|
+
|
94
|
+
require "sinatra/base"
|
95
|
+
require "perfetto"
|
96
|
+
|
97
|
+
class Server < Sinatra::Base
|
98
|
+
use Perfetto::Middleware, env_proc: ->(env) { env.to_json }
|
99
|
+
|
100
|
+
get "/" do
|
101
|
+
"Hello World"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
Perfetto.setup enable_tracing: true
|
106
|
+
Perfetto.start_tracing
|
107
|
+
Server.run!
|
108
|
+
Perfetto.stop_tracing "middleware.pftrace"
|
109
|
+
```
|
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,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Perfetto
|
4
|
+
# Rack middleware
|
5
|
+
class Middleware
|
6
|
+
def initialize(app, options = {})
|
7
|
+
@app = app
|
8
|
+
@options = options
|
9
|
+
@env_proc = options[:env_proc]
|
10
|
+
end
|
11
|
+
|
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
|
22
|
+
@app.call(env)
|
23
|
+
ensure
|
24
|
+
Perfetto.trace_event_end category
|
25
|
+
end
|
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
|
34
|
+
end
|
35
|
+
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
@@ -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
|
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.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kowalski Dark
|
@@ -35,6 +35,7 @@ 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
|
40
41
|
- sig/perfetto.rbs
|