lib/rorvswild.rb in rorvswild-0.0.7 vs lib/rorvswild.rb in rorvswild-0.0.8
- old
+ new
@@ -16,10 +16,18 @@
def self.measure_job(code)
default_client ? default_client.measure_job(code) : eval(code)
end
+ def self.measure_code(code)
+ default_client ? default_client.measure_code(code) : eval(code)
+ end
+
+ def self.measure_block(name, &block)
+ default_client ? default_client.measure_block(name , &block) : block.call
+ end
+
class Client
def self.default_config
{
api_url: "http://www.rorvswild.com/api",
explain_sql_threshold: 500,
@@ -46,10 +54,12 @@
ActiveSupport::Notifications.subscribe("process_action.action_controller", &method(:after_http_request))
ActiveSupport::Notifications.subscribe("start_processing.action_controller", &method(:before_http_request))
client = self
ActionController::Base.rescue_from(StandardError) { |exception| client.after_exception(exception, self) }
+
+ Delayed::Worker.lifecycle.around(:invoke_job, &method(:around_delayed_job)) if defined?(Delayed::Worker)
end
def before_http_request(name, start, finish, id, payload)
@request = {controller: payload[:controller], action: payload[:action], path: payload[:path]}
@queries = []
@@ -105,15 +115,28 @@
}
end
raise exception
end
+ def around_delayed_job(job, &block)
+ measure_block(job.name) { block.call(job) }
+ end
+
def measure_job(code)
+ warn "WARNING: RorVsWild.measure_job is deprecated. Use RorVsWild.measure_code instead."
+ measure_block(code) { eval(code) }
+ end
+
+ def measure_code(code)
+ measure_block(code) { eval(code) }
+ end
+
+ def measure_block(name, &block)
@queries = []
- @job = {name: code}
+ @job = {name: name}
started_at = Time.now
cpu_time_offset = cpu_time
- eval(code)
+ block.call
rescue => exception
file, line = exception.backtrace.first.split(":")
job[:error] = {
line: line.to_i,
file: relative_path(file),