larva 0.7.2 → 0.7.3

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,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