kantox-chronoscope 0.2.2 → 0.3.0
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 +60 -1
- data/config/chronoscope.yml +3 -0
- data/lib/kantox/chronoscope.rb +2 -1
- data/lib/kantox/chronoscope/version.rb +1 -1
- data/screenshot.jpg +0 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dff7a5c13087692f056fa3a698fdad64e0fdef46
|
4
|
+
data.tar.gz: 40805caadefc8ba3a6efc38757e57d5b26c1217c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58fc0f60e486c203d7a4d36b17353e3273488d1be0e662f263fc13bada67b42941d21bf8e817c19bfb1a571812635f151f9249ae0cf7437ffaedf510445695ac
|
7
|
+
data.tar.gz: 27f91cdf5ffae2b81f6699b0f5c560c85f414f98b11f4fed1c23938d2a74bec5db242106d7cba6ad56433631f2ec0a4658b07147a62e2a3c34b0e3d4c3de5f02
|
data/README.md
CHANGED
@@ -2,6 +2,16 @@
|
|
2
2
|
|
3
3
|
[](https://travis-ci.org/am-kantox/kantox-chronoscope)
|
4
4
|
|
5
|
+
`Chronoscope` is designed for those, who has not enough foresight and starts
|
6
|
+
benchmarking/profiling their applications when everything already is terrible.
|
7
|
+
|
8
|
+
On the other hand, `Chronoscope` is a lightweight solution, that permits
|
9
|
+
to plug in benchmarks for virtually everything in a matter of seconds.
|
10
|
+
|
11
|
+
It just works out of the box: no modifications of application code is required.
|
12
|
+
It permits benchmarking in production as well, though it is not recommended. The
|
13
|
+
total impact on productivity is proven to be less that 1%.
|
14
|
+
|
5
15
|
## Installation
|
6
16
|
|
7
17
|
Add this line to your application's Gemfile:
|
@@ -20,7 +30,56 @@ Or install it yourself as:
|
|
20
30
|
|
21
31
|
## Usage
|
22
32
|
|
23
|
-
|
33
|
+
1. Create the configuration file in `config/chronoscope.yml`:
|
34
|
+
|
35
|
+
```yaml
|
36
|
+
general:
|
37
|
+
handler: 'Kantox::Chronoscope::Generic'
|
38
|
+
enable: true
|
39
|
+
|
40
|
+
options:
|
41
|
+
silent: true
|
42
|
+
|
43
|
+
i18n:
|
44
|
+
name: метод
|
45
|
+
times: раз
|
46
|
+
average: среднее
|
47
|
+
total: всего
|
48
|
+
```
|
49
|
+
|
50
|
+
2. Attach `Chronoscope` to one or more targets:
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
Kantox::Chronoscope.attach(Order) # all methods of Order
|
54
|
+
Kantox::Chronoscope.attach(User, :login) # User#login
|
55
|
+
```
|
56
|
+
|
57
|
+
And somewhere in the execution end (e. g. when used with `Rails`, this goes into
|
58
|
+
`spec/spec_helper.rb`):
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
config.after(:suite) do
|
62
|
+
benchmarks = ⌛(cleanup: true)
|
63
|
+
end
|
64
|
+
```
|
65
|
+
|
66
|
+
3. Get the following output:
|
67
|
+
|
68
|
+

|
69
|
+
|
70
|
+
Here `silent` options is set to `false`, that’s why we see logs from each subsequent
|
71
|
+
call to monitored function.
|
72
|
+
|
73
|
+
4. After execution, the result tree (with call hierarchy) is returned as:
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
puts '—'*($stdin.winsize.last rescue 80)
|
77
|
+
puts benchmarks[:data].inspect
|
78
|
+
puts '—'*($stdin.winsize.last rescue 80)
|
79
|
+
#⇒ {"Hedge#send_email_on_create"=>{:count=>26, :total=>0.00013026800000000003, :stack=>[]},
|
80
|
+
# "Hedge#send_email_on_create="=>{:count=>11, :total=>4.066e-05, :stack=>[]},
|
81
|
+
# "Hedge#hedge_type"=>{:count=>188, :total=>0.0024204860000000003, :stack=>[]} ...
|
82
|
+
```
|
24
83
|
|
25
84
|
## Development
|
26
85
|
|
data/config/chronoscope.yml
CHANGED
data/lib/kantox/chronoscope.rb
CHANGED
@@ -56,11 +56,12 @@ module Kantox
|
|
56
56
|
next if (klazz.instance_method(m).parameters.to_h[:block] rescue false) # FIXME: report
|
57
57
|
|
58
58
|
receiver, arg_string = m.to_s.end_with?('=') ? ['self.', 'arg'] : [nil, '*args'] # to satisfy setter
|
59
|
+
do_log = !option(ENV, 'options.silent')
|
59
60
|
|
60
61
|
klazz.class_eval %Q|
|
61
62
|
alias_method :'#{CHAIN_PREFIX}#{m}', :'#{m}'
|
62
63
|
def #{m}(#{arg_string})
|
63
|
-
⌚('#{klazz}##{m}', #{
|
64
|
+
⌚('#{klazz}##{m}', #{do_log}) { #{receiver}#{CHAIN_PREFIX}#{m} #{arg_string} }
|
64
65
|
end
|
65
66
|
|
|
66
67
|
end
|
data/screenshot.jpg
ADDED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kantox-chronoscope
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kantox
|
@@ -121,6 +121,7 @@ files:
|
|
121
121
|
- lib/kantox/chronoscope/dummy.rb
|
122
122
|
- lib/kantox/chronoscope/generic.rb
|
123
123
|
- lib/kantox/chronoscope/version.rb
|
124
|
+
- screenshot.jpg
|
124
125
|
homepage: https://github.com/am-kantox/kantox-chronoscope
|
125
126
|
licenses:
|
126
127
|
- MIT
|