oboe 1.3.5 → 1.3.6
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/oboe/frameworks/rails/inst/action_controller.rb +20 -11
- data/lib/oboe/frameworks/rails/inst/action_view.rb +191 -0
- data/lib/oboe/frameworks/rails/inst/cassandra.rb +18 -9
- data/lib/oboe/frameworks/rails/inst/mongo.rb +4 -4
- data/lib/oboe/version.rb +1 -1
- data/lib/oboe_metal.rb +2 -2
- data/lib/rails/generators/oboe/install_generator.rb +68 -0
- data/lib/rails/generators/oboe/templates/oboe_initializer.rb +16 -0
- metadata +4 -1
@@ -13,7 +13,7 @@ module Oboe
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def process_action(*args)
|
16
|
-
|
16
|
+
report_kvs = {
|
17
17
|
'HTTP-Host' => @_request.headers['HTTP_HOST'],
|
18
18
|
:URL => @_request.headers['REQUEST_URI'],
|
19
19
|
:Method => @_request.headers['REQUEST_METHOD'],
|
@@ -22,12 +22,12 @@ module Oboe
|
|
22
22
|
}
|
23
23
|
super
|
24
24
|
|
25
|
-
|
26
|
-
Oboe::API.log('rails', 'info',
|
25
|
+
report_kvs[:Status] = @_response.status
|
26
|
+
Oboe::API.log('rails', 'info', report_kvs)
|
27
27
|
|
28
28
|
rescue Exception => exception
|
29
|
-
|
30
|
-
Oboe::API.log('rails', 'info',
|
29
|
+
report_kvs[:Status] = 500
|
30
|
+
Oboe::API.log('rails', 'info', report_kvs)
|
31
31
|
raise
|
32
32
|
end
|
33
33
|
|
@@ -54,6 +54,7 @@ if defined?(ActionController::Base)
|
|
54
54
|
alias :perform_action_without_oboe :perform_action
|
55
55
|
alias :rescue_action_without_oboe :rescue_action
|
56
56
|
alias :process_without_oboe :process
|
57
|
+
alias :render_without_oboe :render
|
57
58
|
|
58
59
|
def process(*args)
|
59
60
|
header = args[0].headers['X-Trace']
|
@@ -63,25 +64,33 @@ if defined?(ActionController::Base)
|
|
63
64
|
end
|
64
65
|
|
65
66
|
def perform_action(*arguments)
|
66
|
-
|
67
|
+
report_kvs = {
|
67
68
|
'HTTP-Host' => @_request.headers['HTTP_HOST'],
|
68
69
|
:URL => @_request.headers['REQUEST_URI'],
|
69
70
|
:Method => @_request.headers['REQUEST_METHOD'],
|
70
|
-
:
|
71
|
-
|
72
|
-
'Action' => @_request.path_parameters['action']
|
71
|
+
:Controller => @_request.path_parameters['controller'],
|
72
|
+
:Action => @_request.path_parameters['action']
|
73
73
|
}
|
74
74
|
|
75
|
-
Oboe::API.log('rails', 'info', opts)
|
76
75
|
perform_action_without_oboe(*arguments)
|
76
|
+
begin
|
77
|
+
report_kvs[:Status] = @_response.status.to_i
|
78
|
+
rescue
|
79
|
+
end
|
80
|
+
Oboe::API.log('rails', 'info', report_kvs)
|
77
81
|
end
|
78
82
|
|
79
83
|
def rescue_action(exn)
|
80
84
|
Oboe::API.log_exception('rails', exn)
|
81
85
|
rescue_action_without_oboe(exn)
|
82
86
|
end
|
87
|
+
|
88
|
+
def render(options = nil, extra_options = {}, &block)
|
89
|
+
Oboe::API.trace('render', {}) do
|
90
|
+
render_without_oboe(options, extra_options, &block)
|
91
|
+
end
|
92
|
+
end
|
83
93
|
end
|
84
94
|
end
|
85
95
|
puts "[oboe/loading] Instrumenting ActionControler" if Oboe::Config[:verbose]
|
86
96
|
end
|
87
|
-
# vim:set expandtab:tabstop=2
|
@@ -0,0 +1,191 @@
|
|
1
|
+
# Copyright (c) 2012 by Tracelytics, Inc.
|
2
|
+
# All rights reserved.
|
3
|
+
|
4
|
+
if defined?(ActionView::Base)
|
5
|
+
if Rails::VERSION::MAJOR == 3
|
6
|
+
puts "[oboe/loading] Instrumenting ActionView"
|
7
|
+
|
8
|
+
if Rails::VERSION::MINOR == 0
|
9
|
+
ActionView::Partials::PartialRenderer.class_eval do
|
10
|
+
alias :render_partial_without_oboe :render_partial
|
11
|
+
def render_partial(object = @object)
|
12
|
+
entry_kvs = {}
|
13
|
+
begin
|
14
|
+
entry_kvs[:Language] = :ruby
|
15
|
+
entry_kvs[:ProfileName] = @options[:partial] if @options.is_a?(Hash)
|
16
|
+
entry_kvs[:FunctionName] = :render_partial
|
17
|
+
entry_kvs[:Class] = :PartialRenderer
|
18
|
+
entry_kvs[:Module] = 'ActionView::Partials'
|
19
|
+
entry_kvs[:File] = __FILE__
|
20
|
+
entry_kvs[:LineNumber] = __LINE__
|
21
|
+
rescue
|
22
|
+
end
|
23
|
+
|
24
|
+
Oboe::Context.log(nil, 'profile_entry', entry_kvs)
|
25
|
+
ret = render_partial_without_oboe(object)
|
26
|
+
|
27
|
+
exit_kvs = {}
|
28
|
+
begin
|
29
|
+
exit_kvs[:Language] = :ruby
|
30
|
+
exit_kvs[:ProfileName] = @options[:partial] if @options.is_a?(Hash)
|
31
|
+
rescue
|
32
|
+
end
|
33
|
+
|
34
|
+
Oboe::Context.log(nil, 'profile_exit', exit_kvs, false)
|
35
|
+
ret
|
36
|
+
end
|
37
|
+
|
38
|
+
alias :render_collection_without_oboe :render_collection
|
39
|
+
def render_collection
|
40
|
+
entry_kvs = {}
|
41
|
+
begin
|
42
|
+
entry_kvs[:Language] = :ruby
|
43
|
+
entry_kvs[:ProfileName] = @path
|
44
|
+
entry_kvs[:FunctionName] = :render_collection
|
45
|
+
entry_kvs[:Class] = :PartialRenderer
|
46
|
+
entry_kvs[:Module] = 'ActionView::Partials'
|
47
|
+
entry_kvs[:File] = __FILE__
|
48
|
+
entry_kvs[:LineNumber] = __LINE__
|
49
|
+
rescue
|
50
|
+
end
|
51
|
+
|
52
|
+
Oboe::Context.log(nil, 'profile_entry', entry_kvs)
|
53
|
+
ret = render_collection_without_oboe
|
54
|
+
|
55
|
+
exit_kvs = {}
|
56
|
+
begin
|
57
|
+
exit_kvs[:Language] = :ruby
|
58
|
+
exit_kvs[:ProfileName] = @path
|
59
|
+
rescue
|
60
|
+
end
|
61
|
+
|
62
|
+
Oboe::Context.log(nil, 'profile_exit', exit_kvs, false)
|
63
|
+
ret
|
64
|
+
end
|
65
|
+
end
|
66
|
+
else
|
67
|
+
ActionView::PartialRenderer.class_eval do
|
68
|
+
alias :render_partial_without_oboe :render_partial
|
69
|
+
def render_partial
|
70
|
+
entry_kvs = {}
|
71
|
+
begin
|
72
|
+
entry_kvs[:Language] = :ruby
|
73
|
+
entry_kvs[:ProfileName] = @options[:partial] if @options.is_a?(Hash)
|
74
|
+
entry_kvs[:FunctionName] = :render_partial
|
75
|
+
entry_kvs[:Class] = :PartialRenderer
|
76
|
+
entry_kvs[:Module] = :ActionView
|
77
|
+
entry_kvs[:File] = __FILE__
|
78
|
+
entry_kvs[:LineNumber] = __LINE__
|
79
|
+
rescue
|
80
|
+
end
|
81
|
+
|
82
|
+
Oboe::Context.log(nil, 'profile_entry', entry_kvs)
|
83
|
+
ret = render_partial_without_oboe
|
84
|
+
|
85
|
+
exit_kvs = {}
|
86
|
+
begin
|
87
|
+
exit_kvs[:Language] = :ruby
|
88
|
+
exit_kvs[:ProfileName] = @options[:partial] if @options.is_a?(Hash)
|
89
|
+
rescue
|
90
|
+
end
|
91
|
+
|
92
|
+
Oboe::Context.log(nil, 'profile_exit', exit_kvs, false)
|
93
|
+
ret
|
94
|
+
end
|
95
|
+
|
96
|
+
alias :render_collection_without_oboe :render_collection
|
97
|
+
def render_collection
|
98
|
+
entry_kvs = {}
|
99
|
+
begin
|
100
|
+
entry_kvs[:Language] = :ruby
|
101
|
+
entry_kvs[:ProfileName] = @path
|
102
|
+
entry_kvs[:FunctionName] = :render_collection
|
103
|
+
entry_kvs[:Class] = :PartialRenderer
|
104
|
+
entry_kvs[:Module] = :ActionView
|
105
|
+
entry_kvs[:File] = __FILE__
|
106
|
+
entry_kvs[:LineNumber] = __LINE__
|
107
|
+
rescue
|
108
|
+
end
|
109
|
+
|
110
|
+
Oboe::Context.log(nil, 'profile_entry', entry_kvs)
|
111
|
+
ret = render_collection_without_oboe
|
112
|
+
|
113
|
+
exit_kvs = {}
|
114
|
+
begin
|
115
|
+
exit_kvs[:Language] = :ruby
|
116
|
+
exit_kvs[:ProfileName] = @path
|
117
|
+
rescue
|
118
|
+
end
|
119
|
+
|
120
|
+
Oboe::Context.log(nil, 'profile_exit', exit_kvs, false)
|
121
|
+
ret
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
elsif Rails::VERSION::MAJOR == 2
|
126
|
+
puts "[oboe/loading] Instrumenting ActionView"
|
127
|
+
|
128
|
+
ActionView::Partials.module_eval do
|
129
|
+
alias :render_partial_without_oboe :render_partial
|
130
|
+
def render_partial(options = {})
|
131
|
+
if options.has_key?(:partial) and options[:partial].is_a?(String)
|
132
|
+
entry_kvs = {}
|
133
|
+
begin
|
134
|
+
entry_kvs[:Language] = :ruby
|
135
|
+
entry_kvs[:ProfileName] = options[:partial]
|
136
|
+
entry_kvs[:FunctionName] = :render_partial
|
137
|
+
entry_kvs[:Class] = :Partials
|
138
|
+
entry_kvs[:Module] = :ActionView
|
139
|
+
entry_kvs[:File] = __FILE__
|
140
|
+
entry_kvs[:LineNumber] = __LINE__
|
141
|
+
rescue
|
142
|
+
end
|
143
|
+
|
144
|
+
Oboe::Context.log(nil, 'profile_entry', entry_kvs)
|
145
|
+
ret = render_partial_without_oboe(options)
|
146
|
+
|
147
|
+
exit_kvs = {}
|
148
|
+
begin
|
149
|
+
exit_kvs[:Language] = :ruby
|
150
|
+
exit_kvs[:ProfileName] = options[:partial]
|
151
|
+
rescue
|
152
|
+
end
|
153
|
+
|
154
|
+
Oboe::Context.log(nil, 'profile_exit', exit_kvs, false)
|
155
|
+
else
|
156
|
+
ret = render_partial_without_oboe(options)
|
157
|
+
end
|
158
|
+
ret
|
159
|
+
end
|
160
|
+
|
161
|
+
alias :render_partial_collection_without_oboe :render_partial_collection
|
162
|
+
def render_partial_collection(options = {})
|
163
|
+
entry_kvs = {}
|
164
|
+
begin
|
165
|
+
entry_kvs[:Language] = :ruby
|
166
|
+
entry_kvs[:ProfileName] = :collection
|
167
|
+
entry_kvs[:FunctionName] = :render_partial_collection
|
168
|
+
entry_kvs[:Class] = :Partials
|
169
|
+
entry_kvs[:Module] = :ActionView
|
170
|
+
entry_kvs[:File] = __FILE__
|
171
|
+
entry_kvs[:LineNumber] = __LINE__
|
172
|
+
rescue
|
173
|
+
end
|
174
|
+
|
175
|
+
Oboe::Context.log(nil, 'profile_entry', entry_kvs)
|
176
|
+
ret = render_partial_collection_without_oboe(options)
|
177
|
+
|
178
|
+
exit_kvs = {}
|
179
|
+
begin
|
180
|
+
exit_kvs[:Language] = :ruby
|
181
|
+
exit_kvs[:ProfileName] = :collection
|
182
|
+
rescue
|
183
|
+
end
|
184
|
+
|
185
|
+
Oboe::Context.log(nil, 'profile_exit', exit_kvs, false)
|
186
|
+
ret
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
# vim:set expandtab:tabstop=2
|
@@ -9,7 +9,7 @@ module Oboe
|
|
9
9
|
|
10
10
|
begin
|
11
11
|
report_kvs[:Op] = op.to_s
|
12
|
-
report_kvs[:Cf] = column_family.to_s
|
12
|
+
report_kvs[:Cf] = column_family.to_s if column_family
|
13
13
|
report_kvs[:Key] = keys.to_s if keys
|
14
14
|
|
15
15
|
# Open issue - how to handle multiple Cassandra servers
|
@@ -193,9 +193,12 @@ module Oboe
|
|
193
193
|
def create_index_with_oboe(keyspace, column_family, column_name, validation_class)
|
194
194
|
if Oboe::Config.tracing?
|
195
195
|
report_kvs = extract_trace_details(:create_index, column_family, nil, nil)
|
196
|
-
|
197
|
-
|
198
|
-
|
196
|
+
begin
|
197
|
+
report_kvs[:Keyspace] = keyspace.to_s
|
198
|
+
report_kvs[:Column_name] = column_name.to_s
|
199
|
+
report_kvs[:Validation_class] = validation_class.to_s
|
200
|
+
rescue
|
201
|
+
end
|
199
202
|
|
200
203
|
Oboe::API.trace('cassandra', report_kvs) do
|
201
204
|
create_index_without_oboe(keyspace, column_family, column_name, validation_class)
|
@@ -208,8 +211,11 @@ module Oboe
|
|
208
211
|
def drop_index_with_oboe(keyspace, column_family, column_name)
|
209
212
|
if Oboe::Config.tracing?
|
210
213
|
report_kvs = extract_trace_details(:drop_index, column_family, nil, nil)
|
211
|
-
|
212
|
-
|
214
|
+
begin
|
215
|
+
report_kvs[:Keyspace] = keyspace.to_s
|
216
|
+
report_kvs[:Column_name] = column_name.to_s
|
217
|
+
rescue
|
218
|
+
end
|
213
219
|
|
214
220
|
Oboe::API.trace('cassandra', report_kvs) do
|
215
221
|
drop_index_without_oboe(keyspace, column_family, column_name)
|
@@ -222,7 +228,10 @@ module Oboe
|
|
222
228
|
def add_column_family_with_oboe(cf_def)
|
223
229
|
if Oboe::Config.tracing?
|
224
230
|
report_kvs = extract_trace_details(:add_column_family, nil, nil, nil)
|
225
|
-
|
231
|
+
begin
|
232
|
+
report_kvs[:Cf] = cf_def[:name] if cf_def.is_a?(Hash) and cf_def.has_key?(:name)
|
233
|
+
rescue
|
234
|
+
end
|
226
235
|
|
227
236
|
Oboe::API.trace('cassandra', report_kvs) do
|
228
237
|
add_column_family_without_oboe(cf_def)
|
@@ -247,7 +256,7 @@ module Oboe
|
|
247
256
|
def add_keyspace_with_oboe(ks_def)
|
248
257
|
if Oboe::Config.tracing?
|
249
258
|
report_kvs = extract_trace_details(:add_keyspace, nil, nil, nil)
|
250
|
-
report_kvs[:Name] = ks_def
|
259
|
+
report_kvs[:Name] = ks_def.name rescue ""
|
251
260
|
|
252
261
|
Oboe::API.trace('cassandra', report_kvs) do
|
253
262
|
add_keyspace_without_oboe(ks_def)
|
@@ -260,7 +269,7 @@ module Oboe
|
|
260
269
|
def drop_keyspace_with_oboe(keyspace)
|
261
270
|
if Oboe::Config.tracing?
|
262
271
|
report_kvs = extract_trace_details(:drop_keyspace, nil, nil, nil)
|
263
|
-
report_kvs[:Name] = keyspace.to_s
|
272
|
+
report_kvs[:Name] = keyspace.to_s rescue ""
|
264
273
|
|
265
274
|
Oboe::API.trace('cassandra', report_kvs) do
|
266
275
|
drop_keyspace_without_oboe(keyspace)
|
@@ -81,7 +81,7 @@ if defined?(::Mongo::Cursor)
|
|
81
81
|
else
|
82
82
|
report_kvs[:Query] = 'all'
|
83
83
|
end
|
84
|
-
report_kvs[:
|
84
|
+
report_kvs[:Limit] = @limit if @limit != 0
|
85
85
|
end
|
86
86
|
|
87
87
|
rescue
|
@@ -133,7 +133,7 @@ if defined?(::Mongo::Collection)
|
|
133
133
|
if m == :map_reduce
|
134
134
|
report_kvs[:Map_Function] = args[0]
|
135
135
|
report_kvs[:Reduce_Function] = args[1]
|
136
|
-
report_kvs[:
|
136
|
+
report_kvs[:Limit] = args[2][:limit] if args[2] and args[2].has_key?(:limit)
|
137
137
|
end
|
138
138
|
|
139
139
|
report_kvs[:New_Collection_Name] = args[0] if m == :rename
|
@@ -165,12 +165,12 @@ if defined?(::Mongo::Collection)
|
|
165
165
|
args_length = args.length
|
166
166
|
|
167
167
|
if m == :distinct and args_length >= 2
|
168
|
-
report_kvs[:
|
168
|
+
report_kvs[:Key] = args[0]
|
169
169
|
report_kvs[:Query] = args[1].try(:to_json) if args[1] and args[1].class == Hash
|
170
170
|
end
|
171
171
|
|
172
172
|
if m == :find and args_length > 0
|
173
|
-
report_kvs[:
|
173
|
+
report_kvs[:Limit] = args[0][:limit] if !args[0].nil? and args[0].has_key?(:limit)
|
174
174
|
end
|
175
175
|
|
176
176
|
if m == :group
|
data/lib/oboe/version.rb
CHANGED
data/lib/oboe_metal.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
module Oboe_metal
|
5
5
|
class Context
|
6
|
-
def self.log(layer, label, options = {})
|
6
|
+
def self.log(layer, label, options = {}, with_backtrace = true)
|
7
7
|
evt = Oboe::Context.createEvent()
|
8
8
|
evt.addInfo("Layer", layer.to_s)
|
9
9
|
evt.addInfo("Label", label.to_s)
|
@@ -12,7 +12,7 @@ module Oboe_metal
|
|
12
12
|
evt.addInfo(k.to_s, v.to_s)
|
13
13
|
end
|
14
14
|
|
15
|
-
evt.addInfo("Backtrace", Kernel.caller.join("\r\n"))
|
15
|
+
evt.addInfo("Backtrace", Kernel.caller.join("\r\n")) if with_backtrace
|
16
16
|
|
17
17
|
Oboe.reporter.sendReport(evt)
|
18
18
|
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
|
2
|
+
module Oboe
|
3
|
+
class InstallGenerator < ::Rails::Generators::Base
|
4
|
+
source_root File.join(File.dirname(__FILE__), 'templates')
|
5
|
+
desc "Copies an oboe initializer files to your application."
|
6
|
+
|
7
|
+
def copy_initializer
|
8
|
+
# Set defaults
|
9
|
+
@tracing_mode = 'through'
|
10
|
+
@sampling_rate = '300000'
|
11
|
+
@verbose = 'false'
|
12
|
+
|
13
|
+
say ""
|
14
|
+
say set_color "Welcome to the Tracelytics Ruby instrumentation setup.", :green, :bold
|
15
|
+
say ""
|
16
|
+
say "To instrument your Rails application, you have the option to setup sampling strategies here."
|
17
|
+
say ""
|
18
|
+
say "More information on instrumenting Ruby applications can be found here:"
|
19
|
+
say "http://support.tracelytics.com/kb/ruby/instrumenting-ruby-apps"
|
20
|
+
while true do
|
21
|
+
say ""
|
22
|
+
say set_color "Tracing Mode", :green
|
23
|
+
say "------------"
|
24
|
+
say "When traces should be initiated for incoming requests. Valid options are 'always',"
|
25
|
+
say "'through' (when the request is initiated with a tracing header from upstream) and 'never'."
|
26
|
+
say "You must set this directive to 'always' in order to initiate tracing."
|
27
|
+
say ""
|
28
|
+
user_tracing_mode = ask set_color "* Tracing Mode? [through]:", :yellow
|
29
|
+
user_tracing_mode.downcase!
|
30
|
+
|
31
|
+
break if user_tracing_mode.blank?
|
32
|
+
valid = ['always', 'through', 'never'].include?(user_tracing_mode)
|
33
|
+
say set_color "Valid values are 'always', 'through' or 'never'", :red, :bold unless valid
|
34
|
+
if valid
|
35
|
+
@tracing_mode = user_tracing_mode
|
36
|
+
break
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
if @tracing_mode == "always"
|
41
|
+
while true do
|
42
|
+
say ""
|
43
|
+
say set_color "Sampling Rate", :green
|
44
|
+
say "-------------"
|
45
|
+
say "This value reflects the number of requests out of every million that will be traced, and must be an integer between 0 and 1000000. Default is 300000 (30%)."
|
46
|
+
say ""
|
47
|
+
user_sampling_rate = ask set_color "* Sampling Rate? [300000]:", :yellow
|
48
|
+
break if user_sampling_rate.blank?
|
49
|
+
|
50
|
+
valid = user_sampling_rate.to_i.between?(1, 1000000)
|
51
|
+
say set_color "Sampling Rate must be a number between 1 and 1000000", :red, :bold unless valid
|
52
|
+
if valid
|
53
|
+
@sampling_rate = user_sampling_rate.to_i
|
54
|
+
break
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
say ""
|
60
|
+
say "You can change these values in the future by modifying config/initializers/oboe.rb"
|
61
|
+
say ""
|
62
|
+
say "Thanks! Creating initialization file..."
|
63
|
+
say ""
|
64
|
+
|
65
|
+
template "oboe_initializer.rb", "config/initializers/oboe.rb"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
if defined?(::Oboe::Config)
|
2
|
+
# When traces should be initiated for incoming requests. Valid options are 'always',
|
3
|
+
# 'through' (when the request is initiated with a tracing header from upstream) and 'never'.
|
4
|
+
# You must set this directive to 'always' in order to initiate tracing when there
|
5
|
+
# is no front-end webserver initiating traces.
|
6
|
+
Oboe::Config[:tracing_mode] = '<%= @tracing_mode %>'
|
7
|
+
<% if ['through', 'never'].include?(@tracing_mode) %>
|
8
|
+
# sample_rate is a value from 0 - 1m indicating the fraction of requests per million to trace
|
9
|
+
# Oboe::Config[:sample_rate] = <%= @sampling_rate %>
|
10
|
+
<% else %>
|
11
|
+
# sample_rate is a value from 0 - 1m indicating the fraction of requests per million to trace
|
12
|
+
Oboe::Config[:sample_rate] = <%= @sampling_rate %>
|
13
|
+
<% end %>
|
14
|
+
# Verbose output of instrumentation initialization
|
15
|
+
# Oboe::Config[:verbose] = <%= @verbose %>
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oboe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -37,10 +37,13 @@ files:
|
|
37
37
|
- lib/oboe/frameworks/rails/inst/action_controller.rb
|
38
38
|
- lib/oboe/frameworks/rails/inst/dalli.rb
|
39
39
|
- lib/oboe/frameworks/rails/inst/active_record.rb
|
40
|
+
- lib/oboe/frameworks/rails/inst/action_view.rb
|
40
41
|
- lib/oboe/frameworks/rails/inst/cassandra.rb
|
41
42
|
- lib/oboe/frameworks/rails/inst/memcached.rb
|
42
43
|
- lib/oboe/frameworks/rails/rails.rb
|
43
44
|
- lib/oboe_fu.rb
|
45
|
+
- lib/rails/generators/oboe/install_generator.rb
|
46
|
+
- lib/rails/generators/oboe/templates/oboe_initializer.rb
|
44
47
|
- lib/oboe/frameworks/rails/helpers/rum/rum_footer.js.erb
|
45
48
|
- lib/oboe/frameworks/rails/helpers/rum/rum_ajax_header.js.erb
|
46
49
|
- lib/oboe/frameworks/rails/helpers/rum/rum_header.js.erb
|