rorvswild 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d83c8de22b205606b6ca1d8a70edb9994361af2f
4
- data.tar.gz: e8de8fd1f28219a40a5e525dc1d77b9ba8865542
3
+ metadata.gz: c255c25e5829f312cb6e04c42eb8bb0c4d0b247b
4
+ data.tar.gz: 0581376548672b9c4e168bdf5b2bf0c02a1b044d
5
5
  SHA512:
6
- metadata.gz: c7c1f11d63d3ddfc0763ae333ba6978307bba99b0c8ea1774779ee822738334be82986684b3f7b043b5403db73441094e9f03c7555ec3e65c5ce3baedd7de63d
7
- data.tar.gz: c2fb3ad205b3e98fc72c2017987d91b94c14bb4ef0a259fdf957ffc07ff8f7a9ef3fc85bfe00c782a2f8624a0d74d861dd4f91c2735775092f7e4a44a74ecdc3
6
+ metadata.gz: f702cf9cb1ab6f629130bb5fcc543821181d8e8a4b7b45bf56a7c8277a19f4e6401cb7e3c29911e1f81dc9a9dc0fd6157e2db5f9a786a003887e75517722e7eb
7
+ data.tar.gz: 0851c9573066fe3ca8b9581d10cc09c61c6f3e4da1c44fbc1c358bbae1fba47b4fdf66c9c796e2b501870ada44977af4209de3bf3a79a200cb2f6d21ccf85940
@@ -1,3 +1,3 @@
1
1
  module RorVsWild
2
- VERSION = "0.2.0".freeze
2
+ VERSION = "0.2.1".freeze
3
3
  end
data/lib/rorvswild.rb CHANGED
@@ -43,7 +43,7 @@ module RorVsWild
43
43
  }
44
44
  end
45
45
 
46
- attr_reader :api_url, :api_key, :app_id, :error, :request, :explain_sql_threshold, :log_sql_threshold
46
+ attr_reader :api_url, :api_key, :app_id, :explain_sql_threshold, :log_sql_threshold
47
47
 
48
48
  def initialize(config)
49
49
  config = self.class.default_config.merge(config)
@@ -52,6 +52,7 @@ module RorVsWild
52
52
  @api_url = config[:api_url]
53
53
  @api_key = config[:api_key]
54
54
  @app_id = config[:app_id]
55
+ @data = {}
55
56
  setup_callbacks
56
57
  RorVsWild.register_default_client(self)
57
58
  end
@@ -70,19 +71,15 @@ module RorVsWild
70
71
  end
71
72
 
72
73
  def before_http_request(name, start, finish, id, payload)
73
- @request = {controller: payload[:controller], action: payload[:action], path: payload[:path]}
74
- @queries = []
75
- @views = {}
76
- @error = nil
74
+ request.merge!(controller: payload[:controller], action: payload[:action], path: payload[:path])
77
75
  end
78
76
 
79
77
  def after_http_request(name, start, finish, id, payload)
80
78
  request[:db_runtime] = (payload[:db_runtime] || 0).round
81
79
  request[:view_runtime] = (payload[:view_runtime] || 0).round
82
80
  request[:other_runtime] = compute_duration(start, finish) - request[:db_runtime] - request[:view_runtime]
83
- error[:parameters] = filter_sensitive_data(payload[:params]) if error
84
- attributes = request.merge(queries: slowest_queries, views: slowest_views, error: error)
85
- Thread.new { post_request(attributes) }
81
+ request[:error][:parameters] = filter_sensitive_data(payload[:params]) if request[:error]
82
+ post_request
86
83
  rescue => exception
87
84
  log_error(exception)
88
85
  end
@@ -114,7 +111,7 @@ module RorVsWild
114
111
  def after_exception(exception, controller)
115
112
  if !exception.is_a?(ActionController::RoutingError)
116
113
  file, line = exception.backtrace.first.split(":")
117
- @error = exception_to_hash(exception).merge(
114
+ request[:error] = exception_to_hash(exception).merge(
118
115
  session: controller.session.to_hash,
119
116
  environment_variables: filter_sensitive_data(filter_environment_variables(controller.request.env))
120
117
  )
@@ -136,8 +133,7 @@ module RorVsWild
136
133
  end
137
134
 
138
135
  def measure_block(name, &block)
139
- @queries = []
140
- @job = {name: name}
136
+ job[:name] = name
141
137
  started_at = Time.now
142
138
  cpu_time_offset = cpu_time
143
139
  block.call
@@ -175,15 +171,27 @@ module RorVsWild
175
171
  private
176
172
 
177
173
  def queries
178
- @queries
174
+ data[:queries] ||= []
179
175
  end
180
176
 
181
177
  def views
182
- @views
178
+ data[:views] ||= {}
183
179
  end
184
180
 
185
181
  def job
186
- @job
182
+ data
183
+ end
184
+
185
+ def request
186
+ data
187
+ end
188
+
189
+ def data
190
+ @data[Thread.current.object_id] ||= {}
191
+ end
192
+
193
+ def cleanup_data
194
+ @data.delete(Thread.current.object_id)
187
195
  end
188
196
 
189
197
  def push_query(query)
@@ -213,20 +221,23 @@ module RorVsWild
213
221
  ActiveRecord::Base.connection.explain(sql, binds) if (sql =~ SELECT_REGEX) == 0
214
222
  end
215
223
 
216
- def post_request(attributes)
217
- post("/requests", request: attributes)
218
- rescue => exception
219
- log_error(exception)
224
+ def post_request
225
+ attributes = request.merge(queries: slowest_queries, views: slowest_views)
226
+ Thread.new { post("/requests".freeze, request: attributes) }
227
+ ensure
228
+ cleanup_data
220
229
  end
221
230
 
222
231
  def post_job
223
- post("/jobs", job: job.merge(queries: slowest_queries))
232
+ post("/jobs".freeze, job: job.merge(queries: slowest_queries))
224
233
  rescue => exception
225
234
  log_error(exception)
235
+ ensure
236
+ cleanup_data
226
237
  end
227
238
 
228
239
  def post_error(hash)
229
- post("/errors", error: hash)
240
+ post("/errors".freeze, error: hash)
230
241
  end
231
242
 
232
243
  def extract_query_location(stack)
@@ -241,15 +252,15 @@ module RorVsWild
241
252
 
242
253
  def split_file_location(location)
243
254
  file, line, method = location.split(":")
244
- method = cleanup_method_name(method)
255
+ method = cleanup_method_name(method) if method
245
256
  [file, line, method]
246
257
  end
247
258
 
248
259
  def cleanup_method_name(method)
249
- method.sub!("block in ", "")
250
- method.sub!("in `", "")
251
- method.sub!("'", "")
252
- method.index("_app_views_") == 0 ? nil : method
260
+ method.sub!("block in ".freeze, "".freeze)
261
+ method.sub!("in `".freeze, "".freeze)
262
+ method.sub!("'".freeze, "".freeze)
263
+ method.index("_app_views_".freeze) == 0 ? nil : method
253
264
  end
254
265
 
255
266
  def compute_duration(start, finish)
@@ -257,7 +268,7 @@ module RorVsWild
257
268
  end
258
269
 
259
270
  def relative_path(path)
260
- path.sub(Rails.root.to_s, "")
271
+ path.sub(Rails.root.to_s, "".freeze)
261
272
  end
262
273
 
263
274
  def exception_to_hash(exception, extra_details = nil)
@@ -277,7 +288,7 @@ module RorVsWild
277
288
  uri = URI(api_url + path)
278
289
  Net::HTTP.start(uri.host, uri.port) do |http|
279
290
  post = Net::HTTP::Post.new(uri.path)
280
- post.content_type = "application/json"
291
+ post.content_type = "application/json".freeze
281
292
  post.basic_auth(app_id, api_key)
282
293
  post.body = data.to_json
283
294
  http.request(post)
@@ -303,15 +314,17 @@ module RorVsWild
303
314
  end
304
315
  end
305
316
 
317
+ DASH_PERFORM = "#perform".freeze
318
+
306
319
  module ResquePlugin
307
320
  def around_perform_rorvswild(*args, &block)
308
- RorVsWild.measure_block(to_s + "#perform", &block)
321
+ RorVsWild.measure_block(to_s + DASH_PERFORM, &block)
309
322
  end
310
323
  end
311
324
 
312
325
  class SidekiqPlugin
313
326
  def call(worker, item, queue, &block)
314
- RorVsWild.measure_block(item["class"] + "#perform", &block)
327
+ RorVsWild.measure_block(item["class".freeze] + DASH_PERFORM, &block)
315
328
  end
316
329
  end
317
330
  end
@@ -70,6 +70,10 @@ class RorVsWildTest < MiniTest::Unit::TestCase
70
70
  assert_equal(%w[/ruby/gems/lib/sql.rb 1 method1], client.send(:extract_error_location, callstack))
71
71
  end
72
72
 
73
+ def test_extract_error_location_when_there_is_no_method_name
74
+ assert_equal(["/foo/bar.rb", "123", nil], client.send(:extract_error_location, ["/foo/bar.rb:123"]))
75
+ end
76
+
73
77
  private
74
78
 
75
79
  def client
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rorvswild
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexis Bernard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-20 00:00:00.000000000 Z
11
+ date: 2015-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler