dispatch-rider 1.1.7 → 1.2.0
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 +4 -4
- data/lib/dispatch-rider.rb +2 -0
- data/lib/dispatch-rider/integrations/appsignal.rb +44 -0
- data/lib/dispatch-rider/queue_services/aws_sqs/sqs_received_message.rb +13 -1
- data/lib/dispatch-rider/queue_services/file_system/fs_received_message.rb +13 -1
- data/lib/dispatch-rider/queue_services/received_message.rb +13 -0
- data/lib/dispatch-rider/version.rb +1 -1
- data/lib/generators/dispatch_rider/job/USAGE +13 -0
- data/lib/generators/dispatch_rider/job/dispatch_job_generator.rb +60 -0
- data/lib/generators/dispatch_rider/job/templates/handler/handler.rb.erb +9 -0
- data/lib/generators/dispatch_rider/job/templates/handler/handler_spec.rb.erb +18 -0
- data/lib/generators/dispatch_rider/job/templates/publisher/publisher.rb.erb +14 -0
- data/lib/generators/dispatch_rider/job/templates/publisher/publisher_spec.rb.erb +18 -0
- metadata +35 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a1ca3958470feda02b927f94698654ef9f9e803
|
4
|
+
data.tar.gz: 27e28265cf7227e992c0f35f1eb0ff3d8fb79a4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 997865accff6ed5df9b8ae28804be792c0cb30e679024d13b6e59624a705aa17285dc3ed566a251d17c18e57b21124f1594ee6045dd882983e11f13112943623
|
7
|
+
data.tar.gz: 811ca64e0a2d53a7172428e956605057d3d02b8674d5dc2b8bf78829e1c426db1673058ab68179c498cdfc9e9e8142392dcb75f4363d5654e789addd7e620c15
|
data/lib/dispatch-rider.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
if defined? Appsignal
|
2
|
+
Appsignal.logger.info('Loading Dispatch Rider integration')
|
3
|
+
|
4
|
+
module DispatchRider
|
5
|
+
module Integrations
|
6
|
+
module Appsignal
|
7
|
+
|
8
|
+
def self.wrap_message(job, message)
|
9
|
+
begin
|
10
|
+
Appsignal::Transaction.create(SecureRandom.uuid, ENV.to_hash)
|
11
|
+
|
12
|
+
ActiveSupport::Notifications.instrument(
|
13
|
+
'perform_job.dispatch-rider',
|
14
|
+
:class => message.subject,
|
15
|
+
:method => 'handle',
|
16
|
+
:attempts => message.receive_count,
|
17
|
+
:queue => message.queue_name,
|
18
|
+
:queue_time => (Time.now.to_f - message.sent_at.to_f) * 1000
|
19
|
+
) do
|
20
|
+
job.call
|
21
|
+
end
|
22
|
+
rescue Exception => exception
|
23
|
+
unless Appsignal.is_ignored_exception?(exception)
|
24
|
+
Appsignal::Transaction.current.add_exception(exception)
|
25
|
+
end
|
26
|
+
raise exception
|
27
|
+
ensure
|
28
|
+
Appsignal::Transaction.current.complete!
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
DispatchRider.config do |config|
|
37
|
+
|
38
|
+
config.around(:dispatch_message) do |job, message|
|
39
|
+
DispatchRider::Appsignal.wrap_message(job, message)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -27,7 +27,19 @@ module DispatchRider
|
|
27
27
|
def return_to_queue
|
28
28
|
extend_timeout(0)
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
|
+
def receive_count
|
32
|
+
@item.approximate_receive_count
|
33
|
+
end
|
34
|
+
|
35
|
+
def sent_at
|
36
|
+
@item.sent_timestamp
|
37
|
+
end
|
38
|
+
|
39
|
+
def queue_name
|
40
|
+
queue.arn.split(':').last
|
41
|
+
end
|
42
|
+
|
31
43
|
end
|
32
44
|
end
|
33
45
|
end
|
@@ -16,7 +16,19 @@ module DispatchRider
|
|
16
16
|
def return_to_queue
|
17
17
|
queue.put_back(item)
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
|
+
def receive_count
|
21
|
+
1 # can't really check that in this service
|
22
|
+
end
|
23
|
+
|
24
|
+
def sent_at
|
25
|
+
@item.ctime
|
26
|
+
end
|
27
|
+
|
28
|
+
def queue_name
|
29
|
+
File.basename(File.dirname(@item.path))
|
30
|
+
end
|
31
|
+
|
20
32
|
end
|
21
33
|
end
|
22
34
|
end
|
@@ -20,6 +20,19 @@ module DispatchRider
|
|
20
20
|
def return_to_queue
|
21
21
|
raise NotImplementedError
|
22
22
|
end
|
23
|
+
|
24
|
+
def receive_count
|
25
|
+
raise NotImplementedError
|
26
|
+
end
|
27
|
+
|
28
|
+
def sent_at
|
29
|
+
raise NotImplementedError
|
30
|
+
end
|
31
|
+
|
32
|
+
def queue_name
|
33
|
+
raise NotImplementedError
|
34
|
+
end
|
35
|
+
|
23
36
|
end
|
24
37
|
end
|
25
38
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Description:
|
2
|
+
Generates a Publisher/Handler pair
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate dispatch_rider:job some_job
|
6
|
+
|
7
|
+
This will create:
|
8
|
+
app/publishers/some_job_publisher.rb
|
9
|
+
app/handlers/some_job.rb
|
10
|
+
|
11
|
+
As well as its tests (currently only supporting rspec):
|
12
|
+
spec/publishers/some_job_publisher_spec.rb
|
13
|
+
spec/handlers/some_job_spec.rb
|
@@ -0,0 +1,60 @@
|
|
1
|
+
class DispatchJob < Rails::Generators::Base
|
2
|
+
|
3
|
+
class Publisher < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../templates/publisher', __FILE__)
|
5
|
+
argument :handler_name, type: :string, required: true
|
6
|
+
argument :publisher_name, type: :string, required: true
|
7
|
+
|
8
|
+
class Rspec < Rails::Generators::Base
|
9
|
+
source_root File.expand_path('../templates/publisher', __FILE__)
|
10
|
+
argument :handler_name, type: :string, required: true
|
11
|
+
argument :publisher_name, type: :string, required: true
|
12
|
+
|
13
|
+
def generate_publisher_spec
|
14
|
+
template "publisher_spec.rb.erb", "spec/publishers/#{publisher_name}_spec.rb"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def generate_publisher
|
19
|
+
template "publisher.rb.erb", "app/publishers/#{publisher_name}.rb"
|
20
|
+
end
|
21
|
+
|
22
|
+
hook_for :test_framework, in: "dispatch_job:publisher"
|
23
|
+
end
|
24
|
+
|
25
|
+
class Handler < Rails::Generators::Base
|
26
|
+
source_root File.expand_path('../templates/handler', __FILE__)
|
27
|
+
argument :handler_name, type: :string, required: true
|
28
|
+
|
29
|
+
class Rspec < Rails::Generators::Base
|
30
|
+
source_root File.expand_path('../templates/handler', __FILE__)
|
31
|
+
argument :handler_name, type: :string, required: true
|
32
|
+
|
33
|
+
def generate_handler_spec
|
34
|
+
template "handler_spec.rb.erb", "spec/handlers/#{handler_name}_spec.rb"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def generate_handler
|
39
|
+
template "handler.rb.erb", "app/handlers/#{handler_name}.rb"
|
40
|
+
end
|
41
|
+
|
42
|
+
hook_for :test_framework, in: "dispatch_job:handler"
|
43
|
+
end
|
44
|
+
|
45
|
+
# source_root File.expand_path('../templates', __FILE__)
|
46
|
+
|
47
|
+
class_option :publisher, default: :publisher, hide: true
|
48
|
+
class_option :handler, default: :handler, hide: true
|
49
|
+
|
50
|
+
argument :handler_name, type: :string
|
51
|
+
|
52
|
+
hook_for :publisher do |publisher|
|
53
|
+
invoke publisher, [handler_name, handler_name.underscore + "_publisher"]
|
54
|
+
end
|
55
|
+
|
56
|
+
hook_for :handler do |handler|
|
57
|
+
invoke handler, [handler_name]
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe <%= handler_name.classify %> do
|
4
|
+
|
5
|
+
subject(:handler) { described_class.new }
|
6
|
+
|
7
|
+
# TODO: set some attributes
|
8
|
+
let(:attributes) { {} }
|
9
|
+
|
10
|
+
describe "#process" do
|
11
|
+
it "does something useful" do
|
12
|
+
handler.process attributes
|
13
|
+
# TODO: assert something
|
14
|
+
fail "not implemented"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class <%= publisher_name.classify %> < DispatchRider::Publisher::Base
|
2
|
+
|
3
|
+
# TODO: set the correct destination
|
4
|
+
destinations [:some_destination]
|
5
|
+
subject "<%= handler_name.underscore %>"
|
6
|
+
|
7
|
+
# TODO: accept some custom arguments here
|
8
|
+
# @return [<%= handler_name.classify %>]
|
9
|
+
def self.publish
|
10
|
+
# TODO: pass them to the message as hash arguments
|
11
|
+
new.publish({})
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe <%= publisher_name.classify %> do
|
4
|
+
|
5
|
+
describe '.process' do
|
6
|
+
|
7
|
+
# TODO: set up whatever needs to be set up
|
8
|
+
|
9
|
+
it "publishes the task" do
|
10
|
+
# TODO: assert the correct arguments
|
11
|
+
described_class.any_instance.should_receive(:publish).with()
|
12
|
+
# TODO: pass the right arguments
|
13
|
+
described_class.publish()
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dispatch-rider
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Suman Mukherjee
|
@@ -11,132 +11,132 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2014-
|
14
|
+
date: 2014-07-21 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
20
|
-
- -
|
20
|
+
- - ">="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: activemodel
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
|
-
- -
|
34
|
+
- - ">="
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: '0'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- -
|
41
|
+
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: '0'
|
44
44
|
- !ruby/object:Gem::Dependency
|
45
45
|
name: daemons
|
46
46
|
requirement: !ruby/object:Gem::Requirement
|
47
47
|
requirements:
|
48
|
-
- -
|
48
|
+
- - ">="
|
49
49
|
- !ruby/object:Gem::Version
|
50
50
|
version: '0'
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
|
-
- -
|
55
|
+
- - ">="
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '0'
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bundler
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
|
-
- -
|
62
|
+
- - ">="
|
63
63
|
- !ruby/object:Gem::Version
|
64
64
|
version: '0'
|
65
65
|
type: :development
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
|
-
- -
|
69
|
+
- - ">="
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
73
|
name: jeweler
|
74
74
|
requirement: !ruby/object:Gem::Requirement
|
75
75
|
requirements:
|
76
|
-
- - ~>
|
76
|
+
- - "~>"
|
77
77
|
- !ruby/object:Gem::Version
|
78
78
|
version: 1.8.4
|
79
79
|
type: :development
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
|
-
- - ~>
|
83
|
+
- - "~>"
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: 1.8.4
|
86
86
|
- !ruby/object:Gem::Dependency
|
87
87
|
name: rake
|
88
88
|
requirement: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
|
-
- -
|
90
|
+
- - ">="
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '0'
|
93
93
|
type: :development
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- -
|
97
|
+
- - ">="
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '0'
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
101
|
name: travis-lint
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
|
-
- -
|
104
|
+
- - ">="
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: '0'
|
107
107
|
type: :development
|
108
108
|
prerelease: false
|
109
109
|
version_requirements: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
|
-
- -
|
111
|
+
- - ">="
|
112
112
|
- !ruby/object:Gem::Version
|
113
113
|
version: '0'
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
115
|
name: rspec
|
116
116
|
requirement: !ruby/object:Gem::Requirement
|
117
117
|
requirements:
|
118
|
-
- -
|
118
|
+
- - "~>"
|
119
119
|
- !ruby/object:Gem::Version
|
120
|
-
version: '0'
|
120
|
+
version: '2.0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
123
|
version_requirements: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
|
-
- -
|
125
|
+
- - "~>"
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version: '0'
|
127
|
+
version: '2.0'
|
128
128
|
- !ruby/object:Gem::Dependency
|
129
|
-
name:
|
129
|
+
name: byebug
|
130
130
|
requirement: !ruby/object:Gem::Requirement
|
131
131
|
requirements:
|
132
|
-
- -
|
132
|
+
- - ">="
|
133
133
|
- !ruby/object:Gem::Version
|
134
134
|
version: '0'
|
135
135
|
type: :development
|
136
136
|
prerelease: false
|
137
137
|
version_requirements: !ruby/object:Gem::Requirement
|
138
138
|
requirements:
|
139
|
-
- -
|
139
|
+
- - ">="
|
140
140
|
- !ruby/object:Gem::Version
|
141
141
|
version: '0'
|
142
142
|
description: Messaging system that is customizable based on which queueing system
|
@@ -152,6 +152,8 @@ extra_rdoc_files:
|
|
152
152
|
- LICENSE.txt
|
153
153
|
- README.md
|
154
154
|
files:
|
155
|
+
- LICENSE.txt
|
156
|
+
- README.md
|
155
157
|
- lib/dispatch-rider.rb
|
156
158
|
- lib/dispatch-rider/callbacks.rb
|
157
159
|
- lib/dispatch-rider/callbacks/access.rb
|
@@ -166,6 +168,7 @@ files:
|
|
166
168
|
- lib/dispatch-rider/handlers/base.rb
|
167
169
|
- lib/dispatch-rider/handlers/inheritance_tracking.rb
|
168
170
|
- lib/dispatch-rider/handlers/named_process.rb
|
171
|
+
- lib/dispatch-rider/integrations/appsignal.rb
|
169
172
|
- lib/dispatch-rider/message.rb
|
170
173
|
- lib/dispatch-rider/notification_services.rb
|
171
174
|
- lib/dispatch-rider/notification_services/aws_sns.rb
|
@@ -204,8 +207,12 @@ files:
|
|
204
207
|
- lib/generators/dispatch_rider/install/USAGE
|
205
208
|
- lib/generators/dispatch_rider/install/install_generator.rb
|
206
209
|
- lib/generators/dispatch_rider/install/templates/script/dispatch_rider
|
207
|
-
-
|
208
|
-
-
|
210
|
+
- lib/generators/dispatch_rider/job/USAGE
|
211
|
+
- lib/generators/dispatch_rider/job/dispatch_job_generator.rb
|
212
|
+
- lib/generators/dispatch_rider/job/templates/handler/handler.rb.erb
|
213
|
+
- lib/generators/dispatch_rider/job/templates/handler/handler_spec.rb.erb
|
214
|
+
- lib/generators/dispatch_rider/job/templates/publisher/publisher.rb.erb
|
215
|
+
- lib/generators/dispatch_rider/job/templates/publisher/publisher_spec.rb.erb
|
209
216
|
homepage: https://github.com/payrollhero/dispatch-rider
|
210
217
|
licenses:
|
211
218
|
- MIT
|
@@ -216,17 +223,17 @@ require_paths:
|
|
216
223
|
- lib
|
217
224
|
required_ruby_version: !ruby/object:Gem::Requirement
|
218
225
|
requirements:
|
219
|
-
- -
|
226
|
+
- - ">="
|
220
227
|
- !ruby/object:Gem::Version
|
221
228
|
version: '0'
|
222
229
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
223
230
|
requirements:
|
224
|
-
- -
|
231
|
+
- - ">="
|
225
232
|
- !ruby/object:Gem::Version
|
226
233
|
version: '0'
|
227
234
|
requirements: []
|
228
235
|
rubyforge_project:
|
229
|
-
rubygems_version: 2.0
|
236
|
+
rubygems_version: 2.3.0
|
230
237
|
signing_key:
|
231
238
|
specification_version: 4
|
232
239
|
summary: Messaging system based on the reactor patter. You can publish messages to
|