delayed_job_honeybadger 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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