larva 0.7.2 → 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/CHANGELOG.md +3 -0
- data/lib/larva.rb +1 -0
- data/lib/larva/message_replayer.rb +34 -0
- data/lib/larva/version.rb +1 -1
- data/test/message_replayer_test.rb +66 -0
- metadata +12 -9
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZmE0Y2NmMmMwNTBkMDgwZTMyYzMxZjgxMTI4YWUxZjExNjJiOGIwMg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MGRmM2IyNzkwMmU1ZWY3M2E0ZmMxODkwYzlhMzBjMWE1MDhlZGU4ZQ==
|
5
7
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NGRiYmViOWJhYTNjMDMyYWUyZmY2OTZkMDUzMmJlNzNlMTM5YWQ3NjEwNWE1
|
10
|
+
OTI1ZDE3MWVmMGU3ZTcwY2M1NjczMjMzNGFkZjUxZjQyY2UwMGNkZTMxN2Zm
|
11
|
+
ZGVhYTA3Y2NlODI5ZTdmMmZkODExM2FjNmUyMjJhYjVlNmNkMWM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
OWI4Y2EwNjVjOWM4MGI3NTAyMDVmNGIyNjY4Y2FlM2VhMTYwY2ZkM2E4MWE4
|
14
|
+
YTFiMmQwYzllOGFiYjBjMDBiM2YxNjNlYzE1N2YwNzA1MzAwMGRlYmY1NDJh
|
15
|
+
ZGIxMGI2ODI1Y2VhNmNhYWM5NjJhYmViNmI4MzRiYTBlODU1MzI=
|
data/CHANGELOG.md
CHANGED
data/lib/larva.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
module Larva
|
2
|
+
class MessageReplayer
|
3
|
+
|
4
|
+
def self.reprocess_failed(topic_name, count=1)
|
5
|
+
new(topic_name).reprocess_failed(count)
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize(topic_name)
|
9
|
+
@topic_name = topic_name
|
10
|
+
end
|
11
|
+
|
12
|
+
def reprocess_failed(count)
|
13
|
+
Filum.logger.info "Reprocessing #{count} message(s) for topic: #{@topic_name}"
|
14
|
+
|
15
|
+
subscription = Propono::QueueSubscription.create(@topic_name)
|
16
|
+
original_url = subscription.queue.url
|
17
|
+
failed_url = subscription.failed_queue.url
|
18
|
+
|
19
|
+
sqs = Fog::AWS::SQS.new(Propono.aws_options)
|
20
|
+
response = sqs.receive_message( failed_url, {'MaxNumberOfMessages' => count.to_i} )
|
21
|
+
messages = response.body['Message']
|
22
|
+
if messages.empty?
|
23
|
+
raise StandardError.new "Message empty"
|
24
|
+
else
|
25
|
+
messages.each do |msg|
|
26
|
+
sqs_message = Propono::SqsMessage.new(msg)
|
27
|
+
puts "Message : #{sqs_message}"
|
28
|
+
sqs.send_message(original_url, sqs_message.to_json_with_exception(StandardError.new "Fake Exception"))
|
29
|
+
sqs.delete_message(failed_url, msg['ReceiptHandle'])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/larva/version.rb
CHANGED
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
2
|
+
|
3
|
+
module Larva
|
4
|
+
class MessageReplayerTest < Minitest::Test
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@topic_name = 'my-topic'
|
8
|
+
|
9
|
+
@original_url = 'http://mock-sqs/my-topic-queue'
|
10
|
+
@failed_url = 'http://mock-sqs/my-topic-queue-failed'
|
11
|
+
|
12
|
+
original_queue = stub(url: @original_url)
|
13
|
+
failed_queue = stub(url: @failed_url)
|
14
|
+
|
15
|
+
subscription = stub(queue: original_queue, failed_queue: failed_queue)
|
16
|
+
Propono::QueueSubscription.expects(:create).with(@topic_name).returns(subscription)
|
17
|
+
|
18
|
+
aws_options = stub()
|
19
|
+
Propono.expects(:aws_options).returns(aws_options)
|
20
|
+
|
21
|
+
@sqs = mock()
|
22
|
+
Fog::AWS::SQS.expects(:new).with(aws_options).returns(@sqs)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_reprocess_failed_when_no_messages_on_queue
|
26
|
+
stub_sqs_response = stub(body: {'Message' => []})
|
27
|
+
@sqs.expects(:receive_message).with(@failed_url, {'MaxNumberOfMessages' => 1}).returns(stub_sqs_response)
|
28
|
+
|
29
|
+
replayer = MessageReplayer.new(@topic_name)
|
30
|
+
assert_raises StandardError do
|
31
|
+
replayer.reprocess_failed(1)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_should_request_message_count_from_sqs
|
36
|
+
stub_sqs_response = stub(body: {'Message' => []})
|
37
|
+
@sqs.expects(:receive_message).with(@failed_url, {'MaxNumberOfMessages' => 7}).returns(stub_sqs_response)
|
38
|
+
|
39
|
+
replayer = MessageReplayer.new(@topic_name)
|
40
|
+
begin
|
41
|
+
replayer.reprocess_failed(7)
|
42
|
+
rescue
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_reprocess_failed_when_single_message_on_queue
|
47
|
+
receipt_handle = 'my-receipt-handle'
|
48
|
+
@message = { 'ReceiptHandle' => receipt_handle }
|
49
|
+
@message_to_replay = {}
|
50
|
+
@parsed_msg = stub(to_json_with_exception: @message_to_replay)
|
51
|
+
|
52
|
+
# Stub out the message parsing in Propono
|
53
|
+
Propono::SqsMessage.stubs(:new).with(@message).returns(@parsed_msg)
|
54
|
+
|
55
|
+
stub_sqs_response = stub(body: {'Message' => [@message]})
|
56
|
+
@sqs.stubs(:receive_message).with(@failed_url, {'MaxNumberOfMessages' => 1}).returns(stub_sqs_response)
|
57
|
+
@sqs.expects(:send_message).with(@original_url, @message_to_replay)
|
58
|
+
@sqs.expects(:delete_message).with(@failed_url, receipt_handle)
|
59
|
+
|
60
|
+
replayer = MessageReplayer.new(@topic_name)
|
61
|
+
replayer.reprocess_failed(1)
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: larva
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- iHiD
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: propono
|
@@ -70,28 +70,28 @@ dependencies:
|
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - '>='
|
73
|
+
- - ! '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - '>='
|
80
|
+
- - ! '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: mocha
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - '>='
|
87
|
+
- - ! '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - '>='
|
94
|
+
- - ! '>='
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
@@ -131,6 +131,7 @@ files:
|
|
131
131
|
- lib/larva/configurator.rb
|
132
132
|
- lib/larva/daemon.rb
|
133
133
|
- lib/larva/listener.rb
|
134
|
+
- lib/larva/message_replayer.rb
|
134
135
|
- lib/larva/mocker.rb
|
135
136
|
- lib/larva/processor.rb
|
136
137
|
- lib/larva/version.rb
|
@@ -157,6 +158,7 @@ files:
|
|
157
158
|
- test/daemon_test.rb
|
158
159
|
- test/larva_test.rb
|
159
160
|
- test/listener_test.rb
|
161
|
+
- test/message_replayer_test.rb
|
160
162
|
- test/mocker_test.rb
|
161
163
|
- test/processor_test.rb
|
162
164
|
- test/test_helper.rb
|
@@ -171,17 +173,17 @@ require_paths:
|
|
171
173
|
- lib
|
172
174
|
required_ruby_version: !ruby/object:Gem::Requirement
|
173
175
|
requirements:
|
174
|
-
- - '>='
|
176
|
+
- - ! '>='
|
175
177
|
- !ruby/object:Gem::Version
|
176
178
|
version: '0'
|
177
179
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
180
|
requirements:
|
179
|
-
- - '>='
|
181
|
+
- - ! '>='
|
180
182
|
- !ruby/object:Gem::Version
|
181
183
|
version: '0'
|
182
184
|
requirements: []
|
183
185
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
186
|
+
rubygems_version: 2.1.9
|
185
187
|
signing_key:
|
186
188
|
specification_version: 4
|
187
189
|
summary: Some Meducation specific helper files for ur pub/sub network
|
@@ -191,6 +193,7 @@ test_files:
|
|
191
193
|
- test/daemon_test.rb
|
192
194
|
- test/larva_test.rb
|
193
195
|
- test/listener_test.rb
|
196
|
+
- test/message_replayer_test.rb
|
194
197
|
- test/mocker_test.rb
|
195
198
|
- test/processor_test.rb
|
196
199
|
- test/test_helper.rb
|