delayed_job_honeybadger 0.0.1 → 0.0.2

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: 85950afa4d916ad57b890095c9772367bbf7b4e7
4
- data.tar.gz: 7945f4814bb60cc55843a2a473a78c47d2b1d8f4
3
+ metadata.gz: 965afa1735cae2da416d846214a076921234a8a0
4
+ data.tar.gz: f27762eb4bc9a0b4f0047afe882aa877de55c23a
5
5
  SHA512:
6
- metadata.gz: f3f799c3b7eba4ddfda1cb58cb988895cb9c15dc93f51a5edf84b1d6e0f11ed12de69ece3518c3633dbe680654763900b76437852ef05980923fc8136dd63816
7
- data.tar.gz: d47c59534b1b2eebbc618026f236094048c7a8b81a743462685ed22800c5873dfe48717df97449b66768b04caf3c8455aa15c3a1d310d13e45c6d9a454b2e47b
6
+ metadata.gz: 6205291fa407d383f7c0835cc1273783396fe7f47593c3fa57e8f05599293c60e74591832ef0474f713de0967acdf76a8c3b46881f69f9cdf7d1ba244d01f74a
7
+ data.tar.gz: a8e5aabeae56fe4014d7559cadc5c141c1930cdfb5895cb8f6d3430e8614449127869f067b2c26362c906afcefe6e411813206f39d30f01fd59f891e81f2ec01
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+ gem 'rake'
data/Gemfile.lock ADDED
@@ -0,0 +1,84 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ delayed_job_honeybadger (0.0.2)
5
+ delayed_job
6
+ honeybadger
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activesupport (4.0.0)
12
+ i18n (~> 0.6, >= 0.6.4)
13
+ minitest (~> 4.2)
14
+ multi_json (~> 1.3)
15
+ thread_safe (~> 0.1)
16
+ tzinfo (~> 0.3.37)
17
+ atomic (1.1.14)
18
+ coderay (1.0.9)
19
+ delayed_job (4.0.0)
20
+ activesupport (>= 3.0, < 4.1)
21
+ diff-lcs (1.2.4)
22
+ ffi (1.9.0)
23
+ formatador (0.2.4)
24
+ fuubar (1.2.1)
25
+ rspec (~> 2.0)
26
+ rspec-instafail (~> 0.2.0)
27
+ ruby-progressbar (~> 1.0)
28
+ guard (1.8.2)
29
+ formatador (>= 0.2.4)
30
+ listen (>= 1.0.0)
31
+ lumberjack (>= 1.0.2)
32
+ pry (>= 0.9.10)
33
+ thor (>= 0.14.6)
34
+ guard-rspec (3.0.3)
35
+ guard (>= 1.8)
36
+ rspec (~> 2.13)
37
+ honeybadger (1.8.0)
38
+ json
39
+ i18n (0.6.5)
40
+ json (1.8.0)
41
+ listen (1.3.1)
42
+ rb-fsevent (>= 0.9.3)
43
+ rb-inotify (>= 0.9)
44
+ rb-kqueue (>= 0.2)
45
+ lumberjack (1.0.4)
46
+ method_source (0.8.2)
47
+ minitest (4.7.5)
48
+ multi_json (1.8.0)
49
+ pry (0.9.12.2)
50
+ coderay (~> 1.0.5)
51
+ method_source (~> 0.8)
52
+ slop (~> 3.4)
53
+ rake (10.1.0)
54
+ rb-fsevent (0.9.3)
55
+ rb-inotify (0.9.2)
56
+ ffi (>= 0.5.0)
57
+ rb-kqueue (0.2.0)
58
+ ffi (>= 0.5.0)
59
+ rspec (2.14.1)
60
+ rspec-core (~> 2.14.0)
61
+ rspec-expectations (~> 2.14.0)
62
+ rspec-mocks (~> 2.14.0)
63
+ rspec-core (2.14.5)
64
+ rspec-expectations (2.14.2)
65
+ diff-lcs (>= 1.1.3, < 2.0)
66
+ rspec-instafail (0.2.4)
67
+ rspec-mocks (2.14.3)
68
+ ruby-progressbar (1.2.0)
69
+ slop (3.4.6)
70
+ thor (0.18.1)
71
+ thread_safe (0.1.3)
72
+ atomic
73
+ tzinfo (0.3.37)
74
+
75
+ PLATFORMS
76
+ ruby
77
+
78
+ DEPENDENCIES
79
+ delayed_job_honeybadger!
80
+ fuubar
81
+ guard
82
+ guard-rspec
83
+ rake
84
+ rspec
data/Guardfile ADDED
@@ -0,0 +1,6 @@
1
+ guard :rspec, cli: '--format Fuubar --fail-fast', all_after_pass: false, all_on_start: false do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
4
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/delayed_job_honeybadger_spec.rb" }
5
+ watch('spec/spec_helper.rb') { "spec" }
6
+ end
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
- Delayed Job Honeyabdger
1
+ Delayed Job Honeybadger
2
2
  -----------------------
3
3
 
4
+ [![Build Status](https://secure.travis-ci.org/honeybadger-io/delayed_job_honeybadger.png?branch=master)](http://travis-ci.org/honeybadger-io/delayed_job_honeybadger)
5
+ [![Gem Version](https://badge.fury.io/rb/delayed_job_honeybadger.png)](http://badge.fury.io/rb/delayed_job_honeybadger)
6
+
4
7
  Notify Honeybadger of errors in Delayed Job workers.
5
8
 
6
9
  Adapted from [this](http://stackoverflow.com/a/14172132/1332687) and
data/Rakefile ADDED
@@ -0,0 +1,112 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rake'
4
+ require 'date'
5
+
6
+ #############################################################################
7
+ #
8
+ # Helper functions
9
+ #
10
+ #############################################################################
11
+
12
+ def name
13
+ @name ||= Dir['*.gemspec'].first.split('.').first
14
+ end
15
+
16
+ def version
17
+ line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
18
+ line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
19
+ end
20
+
21
+ def date
22
+ Date.today.to_s
23
+ end
24
+
25
+ def gemspec_file
26
+ "#{name}.gemspec"
27
+ end
28
+
29
+ def gem_file
30
+ "#{name}-#{version}.gem"
31
+ end
32
+
33
+ def replace_header(head, header_name)
34
+ head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
35
+ end
36
+
37
+ #############################################################################
38
+ #
39
+ # Standard tasks
40
+ #
41
+ #############################################################################
42
+
43
+ require 'rspec/core/rake_task'
44
+ RSpec::Core::RakeTask.new(:spec)
45
+ task :default => :spec
46
+ task :test => :spec
47
+
48
+ #############################################################################
49
+ #
50
+ # Packaging tasks
51
+ #
52
+ #############################################################################
53
+
54
+ desc "Create tag v#{version} and build and push #{gem_file} to Rubygems"
55
+ task :release => :build do
56
+ unless `git branch` =~ /^\* master$/
57
+ puts "You must be on the master branch to release!"
58
+ exit!
59
+ end
60
+ sh "git commit --allow-empty -a -m 'Release #{version}'"
61
+ sh "git tag v#{version}"
62
+ sh "git push origin master"
63
+ sh "git push origin v#{version}"
64
+ sh "gem push pkg/#{name}-#{version}.gem"
65
+ end
66
+
67
+ desc "Build #{gem_file} into the pkg directory"
68
+ task :build => :gemspec do
69
+ sh "mkdir -p pkg"
70
+ sh "gem build #{gemspec_file}"
71
+ sh "mv #{gem_file} pkg"
72
+ end
73
+
74
+ desc "Generate #{gemspec_file}"
75
+ task :gemspec => :validate do
76
+ # read spec file and split out manifest section
77
+ spec = File.read(gemspec_file)
78
+ head, manifest, tail = spec.split(" # = MANIFEST =\n")
79
+
80
+ # replace name version and date
81
+ replace_header(head, :name)
82
+ replace_header(head, :version)
83
+ replace_header(head, :date)
84
+
85
+ # determine file list from git ls-files
86
+ files = `git ls-files`.
87
+ split("\n").
88
+ sort.
89
+ reject { |file| file =~ /^\./ }.
90
+ reject { |file| file =~ /^(rdoc|pkg)/ }.
91
+ map { |file| " #{file}" }.
92
+ join("\n")
93
+
94
+ # piece file back together and write
95
+ manifest = " s.files = %w[\n#{files}\n ]\n"
96
+ spec = [head, manifest, tail].join(" # = MANIFEST =\n")
97
+ File.open(gemspec_file, 'w') { |io| io.write(spec) }
98
+ puts "Updated #{gemspec_file}"
99
+ end
100
+
101
+ desc "Validate #{gemspec_file}"
102
+ task :validate do
103
+ libfiles = Dir['lib/*'] - ["lib/#{name}.rb", "lib/#{name}", "lib/delayed"]
104
+ unless libfiles.empty?
105
+ puts "Directory `lib` should only contain a `#{name}.rb` file and `#{name}` dir."
106
+ exit!
107
+ end
108
+ unless Dir['VERSION*'].empty?
109
+ puts "A `VERSION` file at root level violates Gem best practices."
110
+ exit!
111
+ end
112
+ end
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'delayed_job_honeybadger'
3
- s.version = '0.0.1'
4
- s.date = '2013-07-22'
3
+ s.version = '0.0.2'
4
+ s.date = '2013-10-01'
5
5
 
6
6
  s.summary = "Honeybadger plugin for Delayed Job"
7
7
  s.description = "Notifies Honeybadger of errors in Delayed Job workers."
@@ -15,11 +15,30 @@ Gem::Specification.new do |s|
15
15
  s.add_dependency('honeybadger')
16
16
  s.add_dependency('delayed_job')
17
17
 
18
+ s.add_development_dependency('rspec')
19
+ s.add_development_dependency('guard')
20
+ s.add_development_dependency('guard-rspec')
21
+ s.add_development_dependency('fuubar')
22
+
23
+ ## Leave this section as-is. It will be automatically generated from the
24
+ ## contents of your Git repository via the gemspec task. DO NOT REMOVE
25
+ ## THE MANIFEST COMMENTS, they are used as delimiters by the task.
26
+ # = MANIFEST =
18
27
  s.files = %w[
19
- delayed_job_honeybadger.gemspec
28
+ Gemfile
29
+ Gemfile.lock
30
+ Guardfile
20
31
  LICENSE
21
32
  README.md
22
- lib/delayed_job_honeybadger.rb
33
+ Rakefile
34
+ delayed_job_honeybadger.gemspec
23
35
  lib/delayed/plugins/honeybadger.rb
36
+ lib/delayed_job_honeybadger.rb
37
+ spec/delayed/backend/test.rb
38
+ spec/delayed/serialization/test.rb
39
+ spec/lib/delayed_job_honeybadger_spec.rb
40
+ spec/spec_helper.rb
41
+ spec/support/cobra_job.rb
24
42
  ]
43
+ # = MANIFEST =
25
44
  end
@@ -1,8 +1,3 @@
1
- # Notify Honeybadger of errors in DelayedJob workers
2
- # in /config/initializers/
3
- #
4
- # modified
5
-
6
1
  module Delayed
7
2
  module Plugins
8
3
  class Honeybadger < Plugin
@@ -11,8 +6,13 @@ module Delayed
11
6
  ::Honeybadger.notify_or_ignore(
12
7
  :error_class => error.class.name,
13
8
  :error_message => "#{ error.class.name }: #{ error.message }",
9
+ :backtrace => error.backtrace,
14
10
  :context => {
15
- :failed_job => job.inspect,
11
+ :job_id => job.id,
12
+ :handler => job.handler,
13
+ :last_error => job.last_error,
14
+ :attempts => job.attempts,
15
+ :queue => job.queue
16
16
  }
17
17
  )
18
18
  super if defined?(super)
@@ -4,3 +4,6 @@ require 'honeybadger'
4
4
  require 'delayed/plugins/honeybadger'
5
5
 
6
6
  Delayed::Worker.plugins << Delayed::Plugins::Honeybadger
7
+ module DelayedJobHoneybadger
8
+ VERSION = '0.0.2'
9
+ end
@@ -0,0 +1,112 @@
1
+ require 'ostruct'
2
+
3
+ # An in-memory backend suitable only for testing. Tries to behave as if it were an ORM.
4
+ module Delayed
5
+ module Backend
6
+ module Test
7
+ class Job
8
+ attr_accessor :id
9
+ attr_accessor :priority
10
+ attr_accessor :attempts
11
+ attr_accessor :handler
12
+ attr_accessor :last_error
13
+ attr_accessor :run_at
14
+ attr_accessor :locked_at
15
+ attr_accessor :locked_by
16
+ attr_accessor :failed_at
17
+ attr_accessor :queue
18
+
19
+ include Delayed::Backend::Base
20
+
21
+ cattr_accessor :id
22
+ self.id = 0
23
+
24
+ def initialize(hash = {})
25
+ self.attempts = 0
26
+ self.priority = 0
27
+ self.id = (self.class.id += 1)
28
+ hash.each{|k,v| send(:"#{k}=", v)}
29
+ end
30
+
31
+ @jobs = []
32
+ def self.all
33
+ @jobs
34
+ end
35
+
36
+ def self.count
37
+ all.size
38
+ end
39
+
40
+ def self.delete_all
41
+ all.clear
42
+ end
43
+
44
+ def self.create(attrs = {})
45
+ new(attrs).tap do |o|
46
+ o.save
47
+ end
48
+ end
49
+
50
+ def self.create!(*args); create(*args); end
51
+
52
+ def self.clear_locks!(worker_name)
53
+ all.select{|j| j.locked_by == worker_name}.each {|j| j.locked_by = nil; j.locked_at = nil}
54
+ end
55
+
56
+ # Find a few candidate jobs to run (in case some immediately get locked by others).
57
+ def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time)
58
+ jobs = all.select do |j|
59
+ j.run_at <= db_time_now &&
60
+ (j.locked_at.nil? || j.locked_at < db_time_now - max_run_time || j.locked_by == worker_name) &&
61
+ !j.failed?
62
+ end
63
+
64
+ jobs = jobs.select{|j| Worker.queues.include?(j.queue)} if Worker.queues.any?
65
+ jobs = jobs.select{|j| j.priority >= Worker.min_priority} if Worker.min_priority
66
+ jobs = jobs.select{|j| j.priority <= Worker.max_priority} if Worker.max_priority
67
+ jobs.sort_by{|j| [j.priority, j.run_at]}[0..limit-1]
68
+ end
69
+
70
+ # Lock this job for this worker.
71
+ # Returns true if we have the lock, false otherwise.
72
+ def lock_exclusively!(max_run_time, worker)
73
+ now = self.class.db_time_now
74
+ if locked_by != worker
75
+ # We don't own this job so we will update the locked_by name and the locked_at
76
+ self.locked_at = now
77
+ self.locked_by = worker
78
+ end
79
+
80
+ return true
81
+ end
82
+
83
+ def self.db_time_now
84
+ Time.current
85
+ end
86
+
87
+ def update_attributes(attrs = {})
88
+ attrs.each{|k,v| send(:"#{k}=", v)}
89
+ save
90
+ end
91
+
92
+ def destroy
93
+ self.class.all.delete(self)
94
+ end
95
+
96
+ def save
97
+ self.run_at ||= Time.current
98
+
99
+ self.class.all << self unless self.class.all.include?(self)
100
+ true
101
+ end
102
+
103
+ def save!; save; end
104
+
105
+ def reload
106
+ reset
107
+ self
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
File without changes
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Delayed job integration' do
4
+ it 'sends notice to honeybadger' do
5
+ Delayed::Job.enqueue CobraJob.new
6
+ Honeybadger.should_receive(:notify_or_ignore).with(hash_including({
7
+ error_class: 'RuntimeError',
8
+ error_message: 'RuntimeError: cobras!',
9
+ backtrace: kind_of(Array),
10
+ context: kind_of(Hash)
11
+ }))
12
+ expect { Delayed::Worker.new.work_off(1) }.not_to raise_error
13
+ end
14
+ end
@@ -0,0 +1,19 @@
1
+ require 'rspec'
2
+ require 'delayed_job'
3
+ require 'delayed_job_honeybadger'
4
+
5
+ # Require files in spec/support/ and its subdirectories.
6
+ Dir[File.expand_path('../../spec/support/**/*.rb', __FILE__)].each {|f| require f}
7
+
8
+ # Use test backend
9
+ Delayed::Worker.backend = :test
10
+
11
+ RSpec.configure do |c|
12
+ c.mock_with :rspec
13
+ c.color_enabled = true
14
+ c.tty = true
15
+
16
+ c.treat_symbols_as_metadata_keys_with_true_values = true
17
+ c.filter_run :focus => true
18
+ c.run_all_when_everything_filtered = true
19
+ end
@@ -0,0 +1,9 @@
1
+ class CobraJob
2
+ def perform
3
+ raise 'cobras!'
4
+ end
5
+
6
+ def max_attempts
7
+ 1
8
+ end
9
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed_job_honeybadger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Wood
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-22 00:00:00.000000000 Z
11
+ date: 2013-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: honeybadger
@@ -38,17 +38,82 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: fuubar
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
41
97
  description: Notifies Honeybadger of errors in Delayed Job workers.
42
98
  email: josh@honeybadger.io
43
99
  executables: []
44
100
  extensions: []
45
101
  extra_rdoc_files: []
46
102
  files:
47
- - delayed_job_honeybadger.gemspec
103
+ - Gemfile
104
+ - Gemfile.lock
105
+ - Guardfile
48
106
  - LICENSE
49
107
  - README.md
50
- - lib/delayed_job_honeybadger.rb
108
+ - Rakefile
109
+ - delayed_job_honeybadger.gemspec
51
110
  - lib/delayed/plugins/honeybadger.rb
111
+ - lib/delayed_job_honeybadger.rb
112
+ - spec/delayed/backend/test.rb
113
+ - spec/delayed/serialization/test.rb
114
+ - spec/lib/delayed_job_honeybadger_spec.rb
115
+ - spec/spec_helper.rb
116
+ - spec/support/cobra_job.rb
52
117
  homepage: https://github.com/honeybadger-io/delayed_job_honeybadger
53
118
  licenses: []
54
119
  metadata: {}
@@ -68,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
133
  version: '0'
69
134
  requirements: []
70
135
  rubyforge_project:
71
- rubygems_version: 2.0.0
136
+ rubygems_version: 2.0.3
72
137
  signing_key:
73
138
  specification_version: 4
74
139
  summary: Honeybadger plugin for Delayed Job