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 CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2dcd557f6df5163212e7a3177e8583e2353b0721
4
- data.tar.gz: 16599e5549b169a8c332c7d7697a6bb59f8f429e
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZmE0Y2NmMmMwNTBkMDgwZTMyYzMxZjgxMTI4YWUxZjExNjJiOGIwMg==
5
+ data.tar.gz: !binary |-
6
+ MGRmM2IyNzkwMmU1ZWY3M2E0ZmMxODkwYzlhMzBjMWE1MDhlZGU4ZQ==
5
7
  SHA512:
6
- metadata.gz: 3f6ea60af14bdb7de7745896921ad5fca24b28f916cb81441541e579399040fc19172f96c3b638008fb0818c8ee60000c696f1f97605d05cc6cd00525ee6e7b3
7
- data.tar.gz: 2d5820996399b7e598ac7f6fccfeba8e53fdc314f568442fd3826015e8c9859c75cbdca36c58de2c9619e665656d62c42e03018ab2d5ecf71b3fdf3b961547e3
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
@@ -1,3 +1,6 @@
1
+ # 0.7.3 / 2014-04-03
2
+ * [FEATURE] Support message replay through a utility class.
3
+
1
4
  # 0.7.2 / 2014-02-26
2
5
  * [BUGFIX] Add logging every 60secs to worker pool.
3
6
 
data/lib/larva.rb CHANGED
@@ -9,6 +9,7 @@ require 'larva/listener'
9
9
  require 'larva/processor'
10
10
  require 'larva/worker_pool'
11
11
  require 'larva/daemon'
12
+ require 'larva/message_replayer'
12
13
 
13
14
  module Larva
14
15
  class LarvaError < StandardError
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Larva
2
- VERSION = '0.7.2'
2
+ VERSION = '0.7.3'
3
3
  end
@@ -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.2
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-02-28 00:00:00.000000000 Z
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.2.1
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