sqs_bunny 0.0.1

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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/sqs_bunny +8 -0
  3. data/lib/sqs_bunny.rb +65 -0
  4. metadata +75 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4840b44a6e5e0d7e33982d7fca3f337d80bf7e0e
4
+ data.tar.gz: da5949d3acde4b48ed0bc29dcc18e5af942d4392
5
+ SHA512:
6
+ metadata.gz: 16d1d851796670d9f1064e003abdf25ec94c112cd13ddeee84d1e6815ffda001f1f239825e6384750dbdf010aa39e955791979ebc46053ea2ec2eb1eacc29d95
7
+ data.tar.gz: 849ea8e7fe91062af64d456bdbce85125ae205430113e69d2918bda2a3109b025a19a97e7364390bf4de56447a83c9ff435829b9da2a115e8ac6152056865704
data/bin/sqs_bunny ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'sqs_bunny'
4
+ if ARGV[0]
5
+ SqsBunny.run(ARGV[0])
6
+ else
7
+ puts "You must pass the configuration file as the first parameter."
8
+ end
data/lib/sqs_bunny.rb ADDED
@@ -0,0 +1,65 @@
1
+ require 'json'
2
+ require 'aws-sdk-core'
3
+ ##
4
+ # Main execution class, just call +SqsBunny.run+ and pass in the path of your configuration file
5
+
6
+ class SqsBunny
7
+ attr_accessor :logger
8
+ ##
9
+ # Run this method to start the job, optionally pass in a configuration hash. Otherwise
10
+ # the job will look for a JSON configuration at +config/setup.json+
11
+ def self.run config_file_path, logger=nil
12
+ raise "Configuration file could not be found at #{config_file_path}" unless File.exists? config_file_path
13
+ s = self.new(JSON.parse(IO.read(config_file_path)))
14
+ s.logger = logger
15
+ s.go
16
+ end
17
+
18
+ def initialize config
19
+ @config = {'wait_time_seconds'=>10}.merge config
20
+ @poll_count = 0
21
+ end
22
+
23
+ def go
24
+ while true
25
+ @poll_count += 1
26
+ client = Aws::SQS::Client.new
27
+ parent_url = @config['parent_q']['queue_url']
28
+ log.debug "Polling for messages at #{parent_url}"
29
+ resp = client.receive_message(queue_url:parent_url,wait_time_seconds:@config['wait_time_seconds'])
30
+ if resp.respond_to? :messages
31
+ resp.messages.each do |x|
32
+ log.info x.body
33
+ send_message client, x
34
+ client.delete_message(queue_url:parent_url,receipt_handle:x.receipt_handle)
35
+ end
36
+ else
37
+ log.debug "No messages"
38
+ end
39
+ break unless keep_polling?
40
+ sleep 1
41
+ end
42
+ end
43
+
44
+ #private stuff
45
+ def send_message client, message
46
+ return unless @config['children']
47
+ @config['children'].each do |child|
48
+ client.send_message(queue_url:child['queue_url'],message_body:message.body)
49
+ end
50
+ end
51
+ def keep_polling?
52
+ @config['poll_max'].nil? || @poll_count < @config['poll_max']
53
+ end
54
+ class NullLogger < Logger
55
+ def initialize(*args)
56
+ end
57
+
58
+ def add(*args, &block)
59
+ end
60
+ end
61
+ def log
62
+ @logger ||= NullLogger.new
63
+ end
64
+ private :keep_polling?; :log
65
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sqs_bunny
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Brian Glick
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-sdk-core
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.beta
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.beta
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.1'
41
+ description: Polls a single SQS queue and copies the body of any messages to a configurable
42
+ set of child queues then deletes the message from the parent.
43
+ email: brian@brian-glick.com
44
+ executables:
45
+ - sqs_bunny
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - bin/sqs_bunny
50
+ - lib/sqs_bunny.rb
51
+ homepage: https://github.com/Vandegrift/sqs_bunny
52
+ licenses:
53
+ - Apache 2.0
54
+ metadata: {}
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 2.2.2
72
+ signing_key:
73
+ specification_version: 4
74
+ summary: Copy Amazon SQS messages from one master queue to multiple child queues
75
+ test_files: []