Revert "remove custom logging, added hoptoad backend directly"

This reverts commit ea72b1ae57.
This commit is contained in:
Ilya Zhitomirskiy 2011-10-31 15:12:08 -07:00
parent 41ccc6b28e
commit d6824dcc49
3 changed files with 85 additions and 12 deletions

View file

@ -33,15 +33,3 @@ if AppConfig[:mount_resque_web]
require File.join(Rails.root, 'lib/admin_rack')
Resque::Server.use AdminRack
end
if AppConfig[:hoptoad_api_key].present?
require 'resque/failure/multiple'
require 'resque/failure/hoptoad'
require 'resque/failure/redis'
Resque::Failure::Hoptoad.configure do |config|
config.api_key = AppConfig[:hoptoad_api_key]
config.secure = true
end
Resque::Failure::Multiple.classes = [Resque::Failure::Redis, Resque::Failure::Hoptoad]
Resque::Failure.backend = Resque::Failure::Multiple
end

View file

@ -1,2 +1,52 @@
module ResqueJobLogging
def around_perform_log_job(*args)
Rails.logger.auto_flushing=1
log_string = "event=resque_job job=#{self} "
error = nil
time = Benchmark.realtime{
begin
yield
rescue Exception => e
error = e
end
}*1000
log_string += "ms=#{time} "
args.each_with_index{|arg,idx| log_string += "arg#{idx.succ}=\"#{arg.to_s[0..30]}\" "}
if error
log_string += "status=error "
log_string << "error_class=#{error.class} error_message='#{error.message}' "
log_string << "orig_error_message='#{error.original_error.message}'" if error.respond_to?(:original_error)
log_string << "annotated_source='#{error.annoted_source_code.to_s}' " if error.respond_to?(:annoted_source_code)
backtrace = application_trace(error)
log_string << "app_backtrace='#{backtrace.join(";")}' "
notify_hoptoad(error, args) if AppConfig[:hoptoad_api_key].present?
else
log_string += "status=complete "
end
Rails.logger.info(log_string)
raise error if error
end
def notify_hoptoad(error, job_arguments)
HoptoadNotifier.notify(
:error_class => error.class,
:error_message => error.message,
:backtrace => error.backtrace,
:parameters => {
:job_class => self.name,
:arguments => job_arguments.map!{|a| a.to_s[0..30]}.join(', '),
:controller => "Resque",
:action => self.name
}
) if Rails.env.production?
end
def application_trace(error) #copied from ActionDispatch::ShowExceptions
defined?(Rails) && Rails.respond_to?(:backtrace_cleaner) ?
Rails.backtrace_cleaner.clean(error.backtrace, :silent) :
error.backtrace
end
end

View file

@ -5,4 +5,39 @@
require 'spec_helper'
describe ResqueJobLogging do
before do
Rails.stub!(:logger).and_return(mock())
Rails.logger.should_receive(:auto_flushing=).with(1)
silence_warnings { Object.const_set("ResqueJobLoggingDummy", Class.new(Object)) }
ResqueJobLoggingDummy.extend(ResqueJobLogging)
end
after do
Rails.unstub!(:logger)
end
# http://bugs.joindiaspora.com/issues/741
it "should enumerate arguments" do
Rails.logger.should_receive(:info).with(/arg1="foo" arg2="bar" arg3="baz"/)
## pass a nil block, so we can test the .info() output
ResqueJobLoggingDummy.around_perform_log_job("foo", "bar", "baz") {}
end
it 'logs stack traces on failure' do
Rails.logger.should_receive(:info).with(/app_backtrace=/)
error = RuntimeError.new("GRAAAAAAAAAGH")
proc {
ResqueJobLoggingDummy.around_perform_log_job("stuff"){raise error}
}.should raise_error(Regexp.new(error.message))
end
it 'notifies hoptoad if the hoptoad api key is set' do
Rails.logger.should_receive(:info)
AppConfig.should_receive(:[]).with(:hoptoad_api_key).and_return("what")
error = RuntimeError.new("GRAAAAAAAAAGH")
ResqueJobLoggingDummy.should_receive(:notify_hoptoad).with(error, ["stuff"])
proc {
ResqueJobLoggingDummy.around_perform_log_job("stuff"){raise error }
}.should raise_error(Regexp.new(error.message))
end
end