barnyard_harvester 0.0.10 → 0.0.12

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.
@@ -27,6 +27,7 @@ Gem::Specification.new do |gem|
27
27
  gem.add_runtime_dependency "bson_ext", "= 1.6.0"
28
28
  gem.add_runtime_dependency "mongo", "= 1.6.0"
29
29
  gem.add_runtime_dependency "amqp"
30
+ gem.add_runtime_dependency "bunny"
30
31
  gem.add_runtime_dependency "aws-sdk"
31
32
 
32
33
  end
@@ -0,0 +1,72 @@
1
+ module BarnyardHarvester
2
+
3
+ class GenericQueue
4
+
5
+ def initialize(args)
6
+ @queueing = args.fetch(:queueing) { raise "You must provide :queueing" }
7
+
8
+ case @queueing
9
+ when :sqs
10
+ require "aws-sdk"
11
+ @sqs_settings = args.fetch(:sqs_settings) { raise "You must provide :sqs_settings" }
12
+ @sqs = AWS::SQS.new(@sqs_settings)
13
+ when :rabbitmq
14
+ require "bunny"
15
+ @rabbitmq_settings = args.fetch(:rabbitmq_settings) { raise "You must provide :rabbitmq_settings" }
16
+ @rabbitmq_settings[:logging] = true if @debug
17
+ @bunny = Bunny.new(@rabbitmq_settings)
18
+ @bunny.start
19
+ when :hash
20
+ @queues = Hash.new
21
+ else
22
+ raise "Unknown queueing method. #{@queuing}"
23
+ end
24
+
25
+ end
26
+
27
+ def push(queue_name, message)
28
+ case @queueing
29
+ when :sqs
30
+ queue = @sqs.queues.create(queue_name)
31
+ queue.send_message(message)
32
+ when :rabbitmq
33
+ @bunny.queue(queue_name).publish(message)
34
+ when :hash
35
+ @queues[queue_name] = Array.new unless @queues.has_key?(queue_name)
36
+ @queues[queue_name] << message
37
+ File.open("#{queue_name}.yml", "w") { |file| file.puts(@queues[queue_name].to_yaml) }
38
+ end
39
+ end
40
+
41
+ def pop(queue_name)
42
+ case @queueing
43
+ when :sqs
44
+ msg = @sqs.queues.create(queue_name).receive_message
45
+ unless msg.nil?
46
+ msg.delete
47
+ msg.body
48
+ else
49
+ nil
50
+ end
51
+
52
+ when :rabbitmq
53
+ msg = @bunny.queue(queue_name).pop[:payload]
54
+ if msg == :queue_empty
55
+ return nil
56
+ else
57
+ msg
58
+ end
59
+ when :hash
60
+ msg = @queue.pop
61
+ File.open("#{queue_name}.yml", "w") { |file| file.puts(@queues[queue_name].to_yaml) }
62
+ msg
63
+ end
64
+ end
65
+
66
+ def empty(queue_name)
67
+ while pop(queue_name)
68
+ end
69
+ end
70
+ end
71
+
72
+ end
@@ -42,15 +42,15 @@ module BarnyardHarvester
42
42
  @collection
43
43
  end
44
44
 
45
- def log_run(harvester_uuid, crop_number, began_at, ended_at, source_count, change_count, add_count, delete_count)
46
-
47
- begin
48
- Resque.enqueue(HarvesterLogs, Time.now, harvester_uuid, crop_number, began_at, ended_at, source_count, change_count, add_count, delete_count)
49
- rescue Exception => e
50
- logger.fatal "#{self.class} Fail in Resque.enqueue of HarvesterLogs. #{e.backtrace}"
51
- end
52
-
53
- end
45
+ #def log_run(harvester_uuid, crop_number, began_at, ended_at, source_count, change_count, add_count, delete_count)
46
+ #
47
+ # begin
48
+ # Resque.enqueue(HarvesterLogs, Time.now, harvester_uuid, crop_number, began_at, ended_at, source_count, change_count, add_count, delete_count)
49
+ # rescue Exception => e
50
+ # @log.fatal "#{self.class} Fail in Resque.enqueue of HarvesterLogs. #{e.backtrace}"
51
+ # end
52
+ #
53
+ #end
54
54
 
55
55
  def delete(primary_key)
56
56
  check_key primary_key
@@ -1,6 +1,7 @@
1
- module BarnyardHarvester
2
1
 
3
- require "bunny"
2
+ require "barnyard_harvester/generic_queue"
3
+
4
+ module BarnyardHarvester
4
5
 
5
6
  QUEUE_FARMER = "barnyard-farmer"
6
7
  QUEUE_HARVESTER = "barnyard-harvests"
@@ -9,10 +10,10 @@ module BarnyardHarvester
9
10
 
10
11
  class Queue
11
12
 
12
- def enqueue(queue, queued_at, harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value, old_value)
13
+ def enqueue(queue, harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value, old_value)
13
14
 
14
15
  payload = Hash.new
15
- payload[:queued_at] = queued_at
16
+ payload[:queued_at] = Time.now
16
17
  payload[:harvester_uuid] = harvester_uuid
17
18
  payload[:change_uuid] = change_uuid
18
19
  payload[:crop_number] = crop_number
@@ -21,10 +22,10 @@ module BarnyardHarvester
21
22
  payload[:value] = value
22
23
  payload[:old_value] = old_value
23
24
 
24
- json_payload = payload
25
+ json_payload = payload.to_json
25
26
 
26
- @direct_exchange.publish(json_payload, key: queue)
27
- @direct_exchange.publish(json_payload, key: QUEUE_CHANGE)
27
+ @q.push(queue,json_payload)
28
+ @q.push(QUEUE_CHANGE,json_payload)
28
29
 
29
30
  end
30
31
 
@@ -41,7 +42,7 @@ module BarnyardHarvester
41
42
  payload[:add_count] = add_count
42
43
  payload[:delete_count] = delete_count
43
44
 
44
- @direct_exchange.publish(payload.to_json, key: QUEUE_HARVESTER)
45
+ @q.push(QUEUE_HARVESTER,payload.to_json)
45
46
 
46
47
  end
47
48
 
@@ -50,19 +51,15 @@ module BarnyardHarvester
50
51
  @debug = args.fetch(:debug) { false }
51
52
  @log = args.fetch(:logger) { Logger.new(STDOUT) }
52
53
  @crop_number = args.fetch(:crop_number) { raise "You must provide :crop_number" }
53
- @rabbitmq_settings = args.fetch(:rabbitmq_settings) { raise "You must provide :rabbitmq_settings" }
54
-
55
- @bunny = Bunny.new(@rabbitmq_settings)
56
- @bunny.start
57
54
 
58
- @direct_exchange = @bunny.exchange('');
55
+ @q = BarnyardHarvester::GenericQueue.new(args)
59
56
 
60
57
  end
61
58
 
62
59
  def push(harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value, old_value=Hash.new)
63
60
  check_key primary_key
64
61
 
65
- enqueue(QUEUE_FARMER, DateTime.now, harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value.to_json, old_value.to_json)
62
+ enqueue(QUEUE_FARMER, harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value.to_json, old_value.to_json)
66
63
 
67
64
  message = "RabbitQueue: #{QUEUE_FARMER}, Now: #{DateTime.now}, Harvester:#{harvester_uuid}, Change:#{change_uuid} crop_number: #{crop_number}, key: #{primary_key}, transaction_type: #{transaction_type})"
68
65
 
@@ -1,3 +1,3 @@
1
1
  module BarnyardHarvester
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.12"
3
3
  end
@@ -2,6 +2,7 @@ require "uuid"
2
2
  require "logger"
3
3
 
4
4
  require "barnyard_harvester/version"
5
+ require "barnyard_harvester/queue"
5
6
 
6
7
  module BarnyardHarvester
7
8
 
@@ -20,21 +21,24 @@ module BarnyardHarvester
20
21
 
21
22
  def initialize(args)
22
23
 
24
+ @queueing = args.fetch(:queueing) { raise "You must provide :queueing" }
23
25
  @crop_number = args.fetch(:crop_number) { raise "You must provide :crop_number" }
24
26
  @redis_settings = args.fetch(:redis_settings) { DEFAULT_REDIS_SETTINGS }
25
27
  @debug = args.fetch(:debug) { false }
26
28
  @log = args.fetch(:logger) { Logger.new(STDOUT) }
27
29
 
28
- @queueing = args[:queueing]
30
+ @q = BarnyardHarvester::Queue.new(args)
29
31
 
30
- case @queueing
31
- when :rabbitmq
32
- @rabbitmq_settings = args.fetch(:rabbitmq_settings) { raise "You must provide :rabbitmq_settings" }
33
- when :sqs
34
- @sqs_settings = args.fetch(:sqs_settings) { raise "You must provide :sqs_settings" }
35
- else
36
- @queueing = :resque
37
- end
32
+ #@queueing = args[:queueing]
33
+ #
34
+ #case @queueing
35
+ # when :rabbitmq
36
+ # @rabbitmq_settings = args.fetch(:rabbitmq_settings) { raise "You must provide :rabbitmq_settings" }
37
+ # when :sqs
38
+ # @sqs_settings = args.fetch(:sqs_settings) { raise "You must provide :sqs_settings" }
39
+ # else
40
+ # @queueing = :resque
41
+ #end
38
42
 
39
43
  @backend = args.fetch(:backend) { :redis }
40
44
 
@@ -43,7 +47,7 @@ module BarnyardHarvester
43
47
  end
44
48
 
45
49
  require "barnyard_harvester/#{@backend.to_s}_helper" if File.exist? "barnyard_harvester/#{@backend.to_s}_helper"
46
- require "barnyard_harvester/#{@queueing.to_s}_queue"
50
+ # require "barnyard_harvester/#{@queueing.to_s}_queue"
47
51
  require "barnyard_harvester/#{@backend.to_s}"
48
52
 
49
53
  # YAML::ENGINE.yamler = 'syck'
data/spec/hash_spec.rb CHANGED
@@ -22,7 +22,7 @@ describe BarnyardHarvester do
22
22
  my_logger = Logger.new(STDOUT)
23
23
  my_logger.level = Logger::INFO
24
24
 
25
- h = BarnyardHarvester::Sync.new(:queueing => :resque,
25
+ h = BarnyardHarvester::Sync.new(:queueing => :hash,
26
26
  :backend => backend,
27
27
  :debug => false,
28
28
  :crop_number => 1,
data/spec/loader_spec.rb CHANGED
@@ -1,5 +1,10 @@
1
1
  require "barnyard_harvester"
2
2
 
3
+ RABBITMQ_SETTINGS = {
4
+ :host => "localhost"
5
+ # :port => 6163
6
+ }
7
+
3
8
  describe BarnyardHarvester do
4
9
 
5
10
  it "no parameters should raise error" do
@@ -7,31 +12,31 @@ describe BarnyardHarvester do
7
12
  end
8
13
 
9
14
  it "passing only :crop_number => 1 should return BarnyardHarvester::Sync object" do
10
- BarnyardHarvester::Sync.new(crop_number: 1).class.should eq(BarnyardHarvester::Sync)
15
+ BarnyardHarvester::Sync.new(rabbitmq_settings: RABBITMQ_SETTINGS, queueing: :rabbitmq, crop_number: 1).class.should eq(BarnyardHarvester::Sync)
11
16
  end
12
17
 
13
18
  it "default backend should be :redis" do
14
- BarnyardHarvester::Sync.new(crop_number: 1).backend.should eq(:redis)
19
+ BarnyardHarvester::Sync.new(rabbitmq_settings: RABBITMQ_SETTINGS, queueing: :rabbitmq, crop_number: 1).backend.should eq(:redis)
15
20
  end
16
21
 
17
22
  it "passing backend :hash should be :hash" do
18
- BarnyardHarvester::Sync.new(crop_number: 1, backend: :hash).backend.should eq(:hash)
23
+ BarnyardHarvester::Sync.new(rabbitmq_settings: RABBITMQ_SETTINGS, queueing: :rabbitmq, crop_number: 1, backend: :hash).backend.should eq(:hash)
19
24
  end
20
25
 
21
26
  it "passing bogus backend should raise an error" do
22
- lambda{BarnyardHarvester::Sync.new(crop_number: 1, backend: :foobar)}.should raise_error
27
+ lambda{BarnyardHarvester::Sync.new(rabbitmq_settings: RABBITMQ_SETTINGS, queueing: :rabbitmq, crop_number: 1, backend: :foobar)}.should raise_error
23
28
  end
24
29
 
25
30
  it "crop_number should be 1001" do
26
- BarnyardHarvester::Sync.new(crop_number: 1001).crop_number.should eq(1001)
31
+ BarnyardHarvester::Sync.new(rabbitmq_settings: RABBITMQ_SETTINGS, queueing: :rabbitmq, crop_number: 1001).crop_number.should eq(1001)
27
32
  end
28
33
 
29
34
  it "all counters should be zero" do
30
- BarnyardHarvester::Sync.new(crop_number: 1).change_count.should eq(0)
31
- BarnyardHarvester::Sync.new(crop_number: 1).add_count.should eq(0)
32
- BarnyardHarvester::Sync.new(crop_number: 1).delete_count.should eq(0)
33
- BarnyardHarvester::Sync.new(crop_number: 1).source_count.should eq(0)
34
- BarnyardHarvester::Sync.new(crop_number: 1).cache_count.should eq(0)
35
+ BarnyardHarvester::Sync.new(rabbitmq_settings: RABBITMQ_SETTINGS, queueing: :rabbitmq, crop_number: 1).change_count.should eq(0)
36
+ BarnyardHarvester::Sync.new(rabbitmq_settings: RABBITMQ_SETTINGS, queueing: :rabbitmq, crop_number: 1).add_count.should eq(0)
37
+ BarnyardHarvester::Sync.new(rabbitmq_settings: RABBITMQ_SETTINGS, queueing: :rabbitmq, crop_number: 1).delete_count.should eq(0)
38
+ BarnyardHarvester::Sync.new(rabbitmq_settings: RABBITMQ_SETTINGS, queueing: :rabbitmq, crop_number: 1).source_count.should eq(0)
39
+ BarnyardHarvester::Sync.new(rabbitmq_settings: RABBITMQ_SETTINGS, queueing: :rabbitmq, crop_number: 1).cache_count.should eq(0)
35
40
  end
36
41
 
37
42
  end
@@ -7,12 +7,6 @@ require "json"
7
7
 
8
8
  CROP_NUMBER = 1
9
9
 
10
- REDIS_SETTINGS = {
11
- :host => "localhost",
12
- :port => 6379,
13
- :db => CROP_NUMBER
14
- }
15
-
16
10
  MONGODB_SETTINGS = {
17
11
  :host => "localhost",
18
12
  :collection => "test_collection",
@@ -21,14 +15,19 @@ MONGODB_SETTINGS = {
21
15
  }
22
16
 
23
17
  MONGODB_REPLICA_SET_SETTINGS = {
24
- :host => ["ip-172-19-31-44.c.qaapollogrp.edu:27017", "ip-172-19-30-49.c.qaapollogrp.edu:27017", "ip-172-19-31-202.c.qaapollogrp.edu:27017"],
18
+ :host => ["mongo1:27017", "mongo2:27017", "mongo3:27017"],
25
19
  :collection => "test_collection",
26
20
  :db => "test_database",
27
- :user => "honeybadger",
28
- :password => "0joQuk35vJM05Hj",
21
+ :user => "username",
22
+ :password => "password",
29
23
  :collection => "test_collection"
30
24
  }
31
25
 
26
+ RABBITMQ_SETTINGS = {
27
+ :host => "localhost"
28
+ # :port => 6163
29
+ }
30
+
32
31
  $mongo_settings = MONGODB_SETTINGS
33
32
 
34
33
  describe BarnyardHarvester do
@@ -41,11 +40,11 @@ describe BarnyardHarvester do
41
40
  my_logger.level = Logger::INFO
42
41
 
43
42
  h = BarnyardHarvester::Sync.new(:backend => backend,
44
- :queueing => :resque,
43
+ :queueing => :rabbitmq,
45
44
  :debug => false,
46
45
  :mongodb_settings => $mongo_settings,
47
46
  :crop_number => CROP_NUMBER,
48
- :redis_settings => REDIS_SETTINGS,
47
+ :rabbitmq_settings => RABBITMQ_SETTINGS,
49
48
  :logger => my_logger)
50
49
 
51
50
  h.run do
@@ -125,8 +124,6 @@ describe BarnyardHarvester do
125
124
  h.source_count.should eq(data.count)
126
125
  h.cache_count.should eq(data.count)
127
126
 
128
- h.my_barn.log_run("#{file}-#{Random.rand(100)}", @crop_number, Time.now, Time.now, h.source_count, h.change_count, h.add_count, h.delete_count)
129
-
130
127
  end
131
128
 
132
129
  it "test change one record" do
@@ -143,8 +140,6 @@ describe BarnyardHarvester do
143
140
  h.source_count.should eq(data.count)
144
141
  h.cache_count.should eq(data.count)
145
142
 
146
- h.my_barn.log_run("#{file}-#{Random.rand(100)}", @crop_number, Time.now, Time.now, h.source_count, h.change_count, h.add_count, h.delete_count)
147
-
148
143
  end
149
144
 
150
145
  it "test delete one record" do
@@ -161,8 +156,6 @@ describe BarnyardHarvester do
161
156
  h.source_count.should eq(data.count)
162
157
  h.cache_count.should eq(data.count + 1)
163
158
 
164
- h.my_barn.log_run("#{file}-#{Random.rand(100)}", @crop_number, Time.now, Time.now, h.source_count, h.change_count, h.add_count, h.delete_count)
165
-
166
159
  end
167
160
 
168
161
  it "test delete all records and add one" do
@@ -181,8 +174,6 @@ describe BarnyardHarvester do
181
174
  h.source_count.should eq(1)
182
175
  h.cache_count.should eq(init_data.count + 1)
183
176
 
184
- h.my_barn.log_run("#{file}-#{Random.rand(100)}", @crop_number, Time.now, Time.now, h.source_count, h.change_count, h.add_count, h.delete_count)
185
-
186
177
  end
187
178
 
188
179
 
@@ -0,0 +1,37 @@
1
+ require "barnyard_harvester"
2
+
3
+ RABBITMQ_SETTINGS = {
4
+ :host => "localhost"
5
+ # :port => 6163
6
+ }
7
+
8
+ QUEUE_NAME = "test001"
9
+
10
+ describe "Test RabbitMQ" do
11
+
12
+ before(:each) do
13
+
14
+ @q = BarnyardHarvester::GenericQueue.new(queueing: :rabbitmq, rabbitmq_settings: RABBITMQ_SETTINGS)
15
+
16
+ end
17
+
18
+ it "Push 10 items on the queue" do
19
+
20
+ @q.empty(QUEUE_NAME)
21
+
22
+ 10.times do |i|
23
+ @q.push(QUEUE_NAME, "My Message #{i}")
24
+ end
25
+
26
+ end
27
+
28
+ it "Pop 10 items" do
29
+
30
+ 10.times do |i|
31
+ msg = @q.pop(QUEUE_NAME)
32
+ puts msg
33
+ end
34
+
35
+ end
36
+
37
+ end
@@ -0,0 +1,39 @@
1
+ require "barnyard_harvester"
2
+
3
+ SQS_SETTINGS = {
4
+ :sqs_endpoint => "sqs.us-west-1.amazonaws.com",
5
+ :access_key_id => ENV["AWS_ACCESS_KEY_ID"],
6
+ :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"]
7
+ }
8
+
9
+ QUEUE_NAME = "test001"
10
+
11
+ describe "Test SQS" do
12
+
13
+ before(:each) do
14
+
15
+ @q = BarnyardHarvester::GenericQueue.new(queueing: :sqs, sqs_settings: SQS_SETTINGS)
16
+
17
+ end
18
+
19
+ it "Push 10 items on the queue" do
20
+
21
+ @q.empty(QUEUE_NAME)
22
+
23
+ 10.times do |i|
24
+ @q.push(QUEUE_NAME, "My Message #{i}")
25
+ end
26
+
27
+ end
28
+
29
+ it "Pop 10 items" do
30
+
31
+ 10.times do |i|
32
+ msg = @q.pop(QUEUE_NAME)
33
+ puts msg
34
+ end
35
+
36
+ end
37
+
38
+
39
+ end
@@ -21,7 +21,7 @@ describe BarnyardHarvester do
21
21
  my_logger = Logger.new(STDOUT)
22
22
  my_logger.level = Logger::INFO
23
23
 
24
- h = BarnyardHarvester::Sync.new(:backend => backend, :debug => false, :crop_number => CROP_NUMBER, :redis_settings => REDIS_SETTINGS, :logger => my_logger)
24
+ h = BarnyardHarvester::Sync.new(:queueing => :hash, :backend => backend, :debug => false, :crop_number => CROP_NUMBER, :redis_settings => REDIS_SETTINGS, :logger => my_logger)
25
25
 
26
26
  h.run do
27
27
  data.each do |primary_key, value|
@@ -93,8 +93,6 @@ describe BarnyardHarvester do
93
93
  h.source_count.should eq(data.count)
94
94
  h.cache_count.should eq(data.count)
95
95
 
96
- # h.log_run("#{file}-#{Random.rand(100)}", @crop_number, Time.now, Time.now, h.source_count, h.change_count, h.add_count, h.delete_count)
97
-
98
96
  end
99
97
 
100
98
  it "test change one record" do
@@ -111,8 +109,6 @@ describe BarnyardHarvester do
111
109
  h.source_count.should eq(data.count)
112
110
  h.cache_count.should eq(data.count)
113
111
 
114
- # h.my_barn.log_run("#{file}-#{Random.rand(100)}", @crop_number, Time.now, Time.now, h.source_count, h.change_count, h.add_count, h.delete_count)
115
-
116
112
  end
117
113
 
118
114
  it "test delete one record" do
@@ -150,13 +146,10 @@ describe BarnyardHarvester do
150
146
  h.source_count.should eq(1)
151
147
  h.cache_count.should eq(init_data.count + 1)
152
148
 
153
- # h.my_barn.log_run("#{file}-#{Random.rand(100)}", @crop_number, Time.now, Time.now, h.source_count, h.change_count, h.add_count, h.delete_count)
154
-
155
149
  end
156
150
 
157
151
 
158
152
  after(:each) do
159
153
  end
160
154
 
161
-
162
155
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: barnyard_harvester
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-30 00:00:00.000000000 Z
12
+ date: 2012-12-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70321910695840 !ruby/object:Gem::Requirement
16
+ requirement: &70330836174420 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70321910695840
24
+ version_requirements: *70330836174420
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: resque
27
- requirement: &70321910691160 !ruby/object:Gem::Requirement
27
+ requirement: &70330836173200 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70321910691160
35
+ version_requirements: *70330836173200
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: crack
38
- requirement: &70321910677340 !ruby/object:Gem::Requirement
38
+ requirement: &70330836169660 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70321910677340
46
+ version_requirements: *70330836169660
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: json
49
- requirement: &70321910671040 !ruby/object:Gem::Requirement
49
+ requirement: &70330836167600 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70321910671040
57
+ version_requirements: *70330836167600
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: uuid
60
- requirement: &70321910666000 !ruby/object:Gem::Requirement
60
+ requirement: &70330836182240 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70321910666000
68
+ version_requirements: *70330836182240
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bson_ext
71
- requirement: &70321910662080 !ruby/object:Gem::Requirement
71
+ requirement: &70330836179360 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - =
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.6.0
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70321910662080
79
+ version_requirements: *70330836179360
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: mongo
82
- requirement: &70321910659980 !ruby/object:Gem::Requirement
82
+ requirement: &70330836189880 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - =
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 1.6.0
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70321910659980
90
+ version_requirements: *70330836189880
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: amqp
93
- requirement: &70321910658560 !ruby/object:Gem::Requirement
93
+ requirement: &70330836188800 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,21 @@ dependencies:
98
98
  version: '0'
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70321910658560
101
+ version_requirements: *70330836188800
102
+ - !ruby/object:Gem::Dependency
103
+ name: bunny
104
+ requirement: &70330836187660 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: *70330836187660
102
113
  - !ruby/object:Gem::Dependency
103
114
  name: aws-sdk
104
- requirement: &70321910654380 !ruby/object:Gem::Requirement
115
+ requirement: &70330836186540 !ruby/object:Gem::Requirement
105
116
  none: false
106
117
  requirements:
107
118
  - - ! '>='
@@ -109,7 +120,7 @@ dependencies:
109
120
  version: '0'
110
121
  type: :runtime
111
122
  prerelease: false
112
- version_requirements: *70321910654380
123
+ version_requirements: *70330836186540
113
124
  description: Performs harvests on data sources and detects adds, changes and deletes.
114
125
  email:
115
126
  - supercoder@gmail.com
@@ -128,14 +139,13 @@ files:
128
139
  - lib/.DS_Store
129
140
  - lib/barnyard_harvester.rb
130
141
  - lib/barnyard_harvester/dynamodb.rb
142
+ - lib/barnyard_harvester/generic_queue.rb
131
143
  - lib/barnyard_harvester/hash.rb
132
144
  - lib/barnyard_harvester/hash_queue.rb
133
145
  - lib/barnyard_harvester/mongodb.rb
134
146
  - lib/barnyard_harvester/mongodb_helper.rb
135
- - lib/barnyard_harvester/rabbitmq_queue.rb
147
+ - lib/barnyard_harvester/queue.rb
136
148
  - lib/barnyard_harvester/redis.rb
137
- - lib/barnyard_harvester/resque_queue.rb
138
- - lib/barnyard_harvester/sqs_queue.rb
139
149
  - lib/barnyard_harvester/version.rb
140
150
  - lib/test.yml
141
151
  - spec/dynamodb_sqs_spec.rb
@@ -147,9 +157,11 @@ files:
147
157
  - spec/hash_spec.rb
148
158
  - spec/loader_spec.rb
149
159
  - spec/mongo_helper_spec.rb
150
- - spec/mongo_spec.rb
160
+ - spec/mongo_rabbitmq_spec.rb
161
+ - spec/queue_rabbitmq_spec.rb
162
+ - spec/queue_sqs_spec.rb
163
+ - spec/redis_hash_spec.rb
151
164
  - spec/redis_rabbitmq_spec.rb
152
- - spec/redis_spec.rb
153
165
  - spec/redis_sqs_spec.rb
154
166
  - spec/spec_helper.rb
155
167
  homepage: https://github.com/jongillies/barnyard/tree/master/barnyard_harvester
@@ -186,8 +198,10 @@ test_files:
186
198
  - spec/hash_spec.rb
187
199
  - spec/loader_spec.rb
188
200
  - spec/mongo_helper_spec.rb
189
- - spec/mongo_spec.rb
201
+ - spec/mongo_rabbitmq_spec.rb
202
+ - spec/queue_rabbitmq_spec.rb
203
+ - spec/queue_sqs_spec.rb
204
+ - spec/redis_hash_spec.rb
190
205
  - spec/redis_rabbitmq_spec.rb
191
- - spec/redis_spec.rb
192
206
  - spec/redis_sqs_spec.rb
193
207
  - spec/spec_helper.rb
@@ -1,101 +0,0 @@
1
- module BarnyardHarvester
2
-
3
- class ChangeLogs
4
- @queue = :logs_change
5
- end
6
-
7
- class HarvesterLogs
8
- @queue = :logs_harvester
9
- end
10
-
11
- class DeliveryLogs
12
- @queue = :logs_delivery
13
- end
14
-
15
- class TransactionLogs
16
- @queue = :logs_transaction
17
- end
18
- class Queue
19
-
20
- class Enqueue
21
- def initialize(queue, queued_at, harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value, old_value)
22
- Resque.enqueue(queue, queued_at, harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value, old_value)
23
- Resque.enqueue(ChangeLogs, queued_at, harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value, old_value)
24
- end
25
- end
26
-
27
- def log_run(harvester_uuid, crop_number, began_at, ended_at, source_count, change_count, add_count, delete_count)
28
-
29
- Resque.enqueue(HarvesterLogs, harvester_uuid, crop_number, began_at, ended_at, source_count, change_count, add_count, delete_count)
30
-
31
- end
32
-
33
- def initialize(args)
34
-
35
- @debug = args.fetch(:debug) { false }
36
- @log = args.fetch(:logger) { Logger.new(STDOUT) }
37
- @crop_number = args.fetch(:crop_number) { raise "You must provide :crop_number" }
38
-
39
- resque_class_name = "Distribute"
40
-
41
- # If the class does not exist, the rescue block will create it.
42
- # The Class Queue is inherited by the AddQueue, ChangeQueue and DeleteQueue, but
43
- # we only want to create one "resque" queue for this instantiation
44
- begin
45
- Object.const_get(resque_class_name)
46
- rescue
47
- # Set the queue name to this apol_harvester's id prefixed with a Q_
48
- #Object.const_set(resque_class_name, Class.new { @queue = "Q_#{args[:crop_number]}"})
49
- Object.const_set(resque_class_name, Class.new { @queue = "Farmer" })
50
- end
51
-
52
- @resque_queue = Object.const_get(resque_class_name)
53
-
54
- end
55
-
56
-
57
- def push(harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value, old_value=Hash.new)
58
- check_key primary_key
59
-
60
- Enqueue.new(@resque_queue, DateTime.now, harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value.to_json, old_value.to_json)
61
-
62
- message = "RedisQueue: #{@resque_queue}, Now: #{DateTime.now}, Harvester:#{harvester_uuid}, Change:#{change_uuid} crop_number: #{crop_number}, key: #{primary_key}, transaction_type: #{transaction_type})"
63
-
64
- if @log.level == Logger::DEBUG
65
- message += ", value: #{value.to_json}, old_value: #{old_value.to_json}"
66
- @log.debug message
67
- end
68
- end
69
-
70
- # Flush any data if needed.
71
- #
72
- def flush
73
- end
74
-
75
- private
76
-
77
- # Raise an exception here if the key must conform to a specific format
78
- #
79
- def check_key(primary_key)
80
- # Example: raise "key must be a string object" unless key.is_a? String
81
- primary_key
82
- end
83
-
84
- end
85
-
86
- # AddQueue
87
- #
88
- class AddQueue < Queue
89
- end
90
-
91
- # ChangeQueue
92
- #
93
- class ChangeQueue < Queue
94
- end
95
-
96
- # DeleteQueue
97
- #
98
- class DeleteQueue < Queue
99
- end
100
-
101
- end
@@ -1,112 +0,0 @@
1
- module BarnyardHarvester
2
-
3
- require "aws-sdk"
4
-
5
- QUEUE_FARMER = "barnyard-farmer"
6
- QUEUE_HARVESTER = "barnyard-harvests"
7
- QUEUE_TRANSACTION = "barnyard-transactions"
8
- QUEUE_CHANGE = "barnyard-changes"
9
-
10
- class Queue
11
-
12
- def enqueue(queued_at, harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value, old_value)
13
-
14
- payload = Hash.new
15
- payload[:queued_at] = queued_at
16
- payload[:harvester_uuid] = harvester_uuid
17
- payload[:change_uuid] = change_uuid
18
- payload[:crop_number] = crop_number
19
- payload[:primary_key] = primary_key
20
- payload[:transaction_type] = transaction_type
21
- payload[:value] = value
22
- payload[:old_value] = old_value
23
-
24
- json_payload = payload.to_json
25
-
26
- @log.debug "Starting send_message to farmer..."
27
- @farmer_queue.send_message(json_payload)
28
- @log.debug "Done send_message to farmer..."
29
-
30
- @log.debug "Starting send_message to changes..."
31
- @change_queue.send_message(json_payload)
32
- @log.debug "Done send_message to changes..."
33
-
34
- end
35
-
36
- def log_run(harvester_uuid, crop_number, began_at, ended_at, source_count, change_count, add_count, delete_count)
37
-
38
- payload = Hash.new
39
- payload[:time] = Time.now
40
- payload[:harvester_uuid] = harvester_uuid
41
- payload[:crop_number] = crop_number
42
- payload[:began_at] = began_at
43
- payload[:ended_at] = ended_at
44
- payload[:source_count] = source_count
45
- payload[:change_count] = change_count
46
- payload[:add_count] = add_count
47
- payload[:delete_count] = delete_count
48
-
49
- @harvester_queue.send_message(payload.to_json)
50
-
51
- end
52
-
53
- def initialize(args)
54
-
55
- @debug = args.fetch(:debug) { false }
56
- @log = args.fetch(:logger) { Logger.new(STDOUT) }
57
- @crop_number = args.fetch(:crop_number) { raise "You must provide :crop_number" }
58
- @sqs_settings = args.fetch(:sqs_settings) { raise "You must provide :sqs_settings" }
59
-
60
- @sqs = AWS::SQS.new(@sqs_settings)
61
-
62
- @farmer_queue = @sqs.queues.create(QUEUE_FARMER)
63
- @harvester_queue = @sqs.queues.create(QUEUE_HARVESTER)
64
- @change_queue = @sqs.queues.create(QUEUE_CHANGE)
65
-
66
- end
67
-
68
- def push(harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value, old_value=Hash.new)
69
- check_key primary_key
70
-
71
- enqueue(DateTime.now, harvester_uuid, change_uuid, crop_number, primary_key, transaction_type, value.to_json, old_value.to_json)
72
-
73
- message = "SQS: #{QUEUE_FARMER}, Now: #{DateTime.now}, Harvester:#{harvester_uuid}, Change:#{change_uuid} crop_number: #{crop_number}, key: #{primary_key}, transaction_type: #{transaction_type})"
74
-
75
- if @log.level == Logger::DEBUG
76
- message += ", value: #{value.to_json}, old_value: #{old_value.to_json}"
77
- @log.debug message
78
- end
79
- end
80
-
81
- # Flush any data if needed.
82
- #
83
- def flush
84
- end
85
-
86
- private
87
-
88
- # Raise an exception here if the key must conform to a specific format
89
- #
90
- def check_key(primary_key)
91
- # Example: raise "key must be a string object" unless key.is_a? String
92
- primary_key
93
- end
94
-
95
- end
96
-
97
- # AddQueue
98
- #
99
- class AddQueue < Queue
100
- end
101
-
102
- # ChangeQueue
103
- #
104
- class ChangeQueue < Queue
105
- end
106
-
107
- # DeleteQueue
108
- #
109
- class DeleteQueue < Queue
110
- end
111
-
112
- end