remnant 0.3.3 → 0.4.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.
- data/lib/remnant.rb +6 -0
- data/lib/remnant/base.rb +20 -12
- data/lib/remnant/filters.rb +28 -0
- data/lib/remnant/gc.rb +38 -0
- data/lib/remnant/gc/base.rb +28 -0
- data/lib/remnant/gc/ree.rb +29 -0
- data/lib/remnant/rails.rb +24 -2
- data/lib/remnant/version.rb +1 -1
- metadata +7 -3
data/lib/remnant.rb
CHANGED
@@ -4,6 +4,12 @@ require 'remnant/base'
|
|
4
4
|
require 'remnant/configuration'
|
5
5
|
require 'remnant/discover'
|
6
6
|
|
7
|
+
require 'remnant/gc'
|
8
|
+
require 'remnant/gc/base'
|
9
|
+
require 'remnant/gc/ree'
|
10
|
+
|
11
|
+
require 'remnant/filters'
|
12
|
+
|
7
13
|
require 'remnant/template'
|
8
14
|
require 'remnant/template/trace'
|
9
15
|
require 'remnant/template/rendering'
|
data/lib/remnant/base.rb
CHANGED
@@ -41,9 +41,8 @@ class Remnant
|
|
41
41
|
Remnant.handler.timing("#{key_prefix}.#{remnant_key}", ms.to_i)
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
end
|
44
|
+
Remnant.handler.timing("#{key_prefix}.gc", Remnant::GC.ms.to_i)
|
45
|
+
Remnant.handler.timing("#{key_prefix}.db", Remnant::Database.total_time.to_i)
|
47
46
|
|
48
47
|
@sample_counter = 0
|
49
48
|
else
|
@@ -61,7 +60,16 @@ class Remnant
|
|
61
60
|
|
62
61
|
Rails.logger.info "#{Remnant.color}#{ms.to_i}ms#{Remnant.color(true)}\t#{key}"
|
63
62
|
end
|
63
|
+
Rails.logger.info "#{Remnant.color}#{Remnant::GC.time.to_i}ms (#{Remnant::GC.collections} collections)#{Remnant.color(true)}\tGC"
|
64
|
+
|
65
|
+
# filters
|
66
|
+
Rails.logger.info ""
|
67
|
+
Rails.logger.info("#{color(false, true)}----- Filters (%.2fms) -----#{color(true)}" % Remnant::Filters.total_time)
|
68
|
+
Remnant::Filters.filters.map do |filter|
|
69
|
+
Rails.logger.info("#{color}%.2fms#{color(true)}\t#{filter[:name]} (#{filter[:type]})" % filter[:ms])
|
70
|
+
end
|
64
71
|
|
72
|
+
# template captures
|
65
73
|
if Remnant::Template.enabled?
|
66
74
|
Rails.logger.info ""
|
67
75
|
Rails.logger.info "#{color(false, true)}----- Templates -----#{color(true)}"
|
@@ -70,15 +78,14 @@ class Remnant
|
|
70
78
|
end
|
71
79
|
end
|
72
80
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
end
|
81
|
+
# sql captures
|
82
|
+
Rails.logger.info ""
|
83
|
+
Rails.logger.info("#{color(false, true)}---- Database (%.2fms) -----#{color(true)}" % Remnant::Database.total_time)
|
84
|
+
if Remnant::Database.suppress?
|
85
|
+
Rails.logger.info "queries suppressed in development mode"
|
86
|
+
else
|
87
|
+
Remnant::Database.queries.map do |query|
|
88
|
+
Rails.logger.info("#{color}%.2fms#{color(true)}\t#{query.sql}" % (query.time * 1000))
|
82
89
|
end
|
83
90
|
end
|
84
91
|
|
@@ -92,6 +99,7 @@ class Remnant
|
|
92
99
|
|
93
100
|
Remnant::Database.reset
|
94
101
|
Remnant::Template.reset
|
102
|
+
Remnant::Filters.reset
|
95
103
|
Remnant::Discover.results.clear
|
96
104
|
end
|
97
105
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Remnant
|
2
|
+
class Filters
|
3
|
+
module ClassMethods
|
4
|
+
def record(filter_type, filter_name, &block)
|
5
|
+
start_time = Time.now
|
6
|
+
result = block.call
|
7
|
+
time = Time.now - start_time
|
8
|
+
filters << {:type => filter_type, :name => filter_name, :time => time, :ms => time * 1000}
|
9
|
+
|
10
|
+
return result
|
11
|
+
end
|
12
|
+
|
13
|
+
def reset
|
14
|
+
@total_time = nil
|
15
|
+
Thread.current['remnant.filters.set'] = []
|
16
|
+
end
|
17
|
+
|
18
|
+
def filters
|
19
|
+
Thread.current['remnant.filters.set'] ||= []
|
20
|
+
end
|
21
|
+
|
22
|
+
def total_time
|
23
|
+
@total_time ||= filters.map {|filter| filter[:ms]}.sum
|
24
|
+
end
|
25
|
+
end
|
26
|
+
extend ClassMethods
|
27
|
+
end
|
28
|
+
end
|
data/lib/remnant/gc.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
class Remnant
|
2
|
+
class GC
|
3
|
+
module ClassMethods
|
4
|
+
def enable_stats
|
5
|
+
_gc.enable_stats
|
6
|
+
end
|
7
|
+
|
8
|
+
def disable_stats
|
9
|
+
_gc.disable_stats
|
10
|
+
end
|
11
|
+
|
12
|
+
def clear_stats
|
13
|
+
_gc.clear_stats
|
14
|
+
end
|
15
|
+
|
16
|
+
def time
|
17
|
+
_gc.time
|
18
|
+
end
|
19
|
+
|
20
|
+
def collections
|
21
|
+
_gc.collections
|
22
|
+
end
|
23
|
+
|
24
|
+
def _gc
|
25
|
+
Thread.current['remnant.gc'] ||= _gc_implementation
|
26
|
+
end
|
27
|
+
|
28
|
+
def _gc_implementation
|
29
|
+
if ::GC.respond_to?(:time) && ::GC.respond_to?(:collections)
|
30
|
+
Remnant::GC::Ree
|
31
|
+
else
|
32
|
+
Remnant::GC::Base
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
extend ClassMethods
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Remnant
|
2
|
+
class GC
|
3
|
+
class Base
|
4
|
+
module ClassMethods
|
5
|
+
def time
|
6
|
+
0
|
7
|
+
end
|
8
|
+
|
9
|
+
def collections
|
10
|
+
0
|
11
|
+
end
|
12
|
+
|
13
|
+
def enable_stats
|
14
|
+
true
|
15
|
+
end
|
16
|
+
|
17
|
+
def disable_stats
|
18
|
+
true
|
19
|
+
end
|
20
|
+
|
21
|
+
def clear_stats
|
22
|
+
true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
extend ClassMethods
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class Remnant
|
2
|
+
class GC
|
3
|
+
class Ree
|
4
|
+
module ClassMethods
|
5
|
+
def time
|
6
|
+
# returns time in microseconds so convert to ms
|
7
|
+
::GC.time / 1000
|
8
|
+
end
|
9
|
+
|
10
|
+
def collections
|
11
|
+
::GC.collections
|
12
|
+
end
|
13
|
+
|
14
|
+
def enable_stats
|
15
|
+
::GC.enable_stats
|
16
|
+
end
|
17
|
+
|
18
|
+
def disable_stats
|
19
|
+
::GC.disable_stats
|
20
|
+
end
|
21
|
+
|
22
|
+
def clear_stats
|
23
|
+
::GC.clear_stats
|
24
|
+
end
|
25
|
+
end
|
26
|
+
extend ClassMethods
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/remnant/rails.rb
CHANGED
@@ -33,10 +33,29 @@ class Remnant
|
|
33
33
|
|
34
34
|
# hook remnants
|
35
35
|
Remnant::Discover.find('request', ActionController::Dispatcher, :call)
|
36
|
-
Remnant::Discover.find('filters', ActionController::Filters::BeforeFilter, :call)
|
37
36
|
Remnant::Discover.find('action', ActionController::Base, :perform_action)
|
38
37
|
Remnant::Discover.find('view', ActionController::Base, :render)
|
39
|
-
|
38
|
+
|
39
|
+
#
|
40
|
+
# Filter capturing
|
41
|
+
#
|
42
|
+
[
|
43
|
+
ActionController::Filters::BeforeFilter,
|
44
|
+
ActionController::Filters::AfterFilter,
|
45
|
+
ActionController::Filters::AroundFilter
|
46
|
+
].map do |remnant_constant|
|
47
|
+
Remnant::Discover.find_with(remnant_constant) do
|
48
|
+
remnant_constant.class_eval do
|
49
|
+
def call_with_remnant(*args, &block)
|
50
|
+
::Remnant::Filters.record(self.class.to_s, method.to_s) do
|
51
|
+
call_without_remnant(*args, &block)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
alias_method_chain :call, :remnant
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
40
59
|
|
41
60
|
#
|
42
61
|
# Template rendering
|
@@ -75,9 +94,12 @@ class Remnant
|
|
75
94
|
# last hook into request cycle for sending results
|
76
95
|
::ActionController::Dispatcher.class_eval do
|
77
96
|
def call_with_remnant_discovery(*args, &block) #:nodoc:
|
97
|
+
::Remnant::GC.enable_stats
|
78
98
|
call_without_remnant_discovery(*args, &block).tap do |status, headers, response|
|
99
|
+
::Remnant::GC.disable_stats
|
79
100
|
begin
|
80
101
|
::Remnant.collect
|
102
|
+
::Remnant::GC.clear_stats
|
81
103
|
::Rails.logger.flush if ::Rails.logger.respond_to? :flush
|
82
104
|
rescue Exception => e
|
83
105
|
if defined?(::Flail)
|
data/lib/remnant/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: remnant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: statsd-ruby
|
@@ -143,6 +143,10 @@ files:
|
|
143
143
|
- lib/remnant/database.rb
|
144
144
|
- lib/remnant/database/query.rb
|
145
145
|
- lib/remnant/discover.rb
|
146
|
+
- lib/remnant/filters.rb
|
147
|
+
- lib/remnant/gc.rb
|
148
|
+
- lib/remnant/gc/base.rb
|
149
|
+
- lib/remnant/gc/ree.rb
|
146
150
|
- lib/remnant/rails.rb
|
147
151
|
- lib/remnant/railtie.rb
|
148
152
|
- lib/remnant/template.rb
|
@@ -176,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
180
|
version: '0'
|
177
181
|
requirements: []
|
178
182
|
rubyforge_project: remnant
|
179
|
-
rubygems_version: 1.8.
|
183
|
+
rubygems_version: 1.8.23
|
180
184
|
signing_key:
|
181
185
|
specification_version: 3
|
182
186
|
summary: Rails statistical discoverer
|