circuitry 2.1.1 → 3.0.0

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 (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/README.md +107 -59
  4. data/circuitry.gemspec +2 -2
  5. data/lib/circuitry.rb +32 -15
  6. data/lib/circuitry/cli.rb +32 -32
  7. data/lib/circuitry/config/file_loader.rb +24 -0
  8. data/lib/circuitry/config/publisher_settings.rb +16 -0
  9. data/lib/circuitry/config/shared_settings.rb +39 -0
  10. data/lib/circuitry/config/subscriber_settings.rb +32 -0
  11. data/lib/circuitry/locks/base.rb +3 -3
  12. data/lib/circuitry/locks/memory.rb +4 -4
  13. data/lib/circuitry/locks/noop.rb +1 -1
  14. data/lib/circuitry/locks/redis.rb +1 -1
  15. data/lib/circuitry/middleware/chain.rb +1 -1
  16. data/lib/circuitry/processor.rb +12 -10
  17. data/lib/circuitry/processors/forker.rb +1 -1
  18. data/lib/circuitry/processors/threader.rb +1 -1
  19. data/lib/circuitry/provisioning.rb +9 -0
  20. data/lib/circuitry/provisioning/provisioner.rb +71 -0
  21. data/lib/circuitry/provisioning/queue_creator.rb +64 -0
  22. data/lib/circuitry/provisioning/subscription_creator.rb +65 -0
  23. data/lib/circuitry/provisioning/topic_creator.rb +31 -0
  24. data/lib/circuitry/publisher.rb +5 -6
  25. data/lib/circuitry/queue.rb +25 -3
  26. data/lib/circuitry/railtie.rb +9 -0
  27. data/lib/circuitry/services/sns.rb +1 -1
  28. data/lib/circuitry/services/sqs.rb +1 -1
  29. data/lib/circuitry/subscriber.rb +8 -8
  30. data/lib/circuitry/tasks.rb +3 -3
  31. data/lib/circuitry/topic.rb +24 -2
  32. data/lib/circuitry/version.rb +1 -1
  33. metadata +11 -7
  34. data/lib/circuitry/configuration.rb +0 -64
  35. data/lib/circuitry/provisioner.rb +0 -60
  36. data/lib/circuitry/queue_creator.rb +0 -50
  37. data/lib/circuitry/subscription_creator.rb +0 -60
  38. data/lib/circuitry/topic_creator.rb +0 -25
@@ -1,50 +0,0 @@
1
- require 'circuitry/services/sqs'
2
- require 'circuitry/queue'
3
-
4
- module Circuitry
5
- class QueueCreator
6
- include Services::SQS
7
-
8
- attr_reader :queue_name
9
-
10
- def self.find_or_create(queue_name, dead_letter_queue_name: nil, max_receive_count: 8 )
11
- creator = new(queue_name)
12
- result = creator.create_queue
13
- creator.create_dead_letter_queue(dead_letter_queue_name, max_receive_count) if dead_letter_queue_name
14
- result
15
- end
16
-
17
- def initialize(queue_name)
18
- @queue_name = queue_name
19
- end
20
-
21
- def create_queue
22
- @_queue ||= Queue.new(create_primary_queue_internal)
23
- end
24
-
25
- def create_dead_letter_queue(name, max_receive_count)
26
- @_dl_queue ||= Queue.new(create_dl_queue_internal(name, max_receive_count))
27
- end
28
-
29
- private
30
-
31
- def create_dl_queue_internal(name, max_receive_count)
32
- dl_url = sqs.create_queue(queue_name: name).queue_url
33
- dl_arn = sqs.get_queue_attributes(queue_url: dl_url, attribute_names: ['QueueArn']).attributes['QueueArn']
34
-
35
- sqs.set_queue_attributes(queue_url: create_queue.url, attributes: build_redrive_policy(dl_arn, max_receive_count))
36
- dl_url
37
- end
38
-
39
- def build_redrive_policy(deadletter_arn, max_receive_count)
40
- {
41
- 'RedrivePolicy' => %({"maxReceiveCount":"#{max_receive_count}", "deadLetterTargetArn":"#{deadletter_arn}"})
42
- }
43
- end
44
-
45
- def create_primary_queue_internal
46
- attributes = { 'VisibilityTimeout' => (30 * 60).to_s }
47
- sqs.create_queue(queue_name: queue_name, attributes: attributes).queue_url
48
- end
49
- end
50
- end
@@ -1,60 +0,0 @@
1
- require 'circuitry/services/sns'
2
- require 'circuitry/topic'
3
-
4
- module Circuitry
5
- class SubscriptionCreator
6
- include Services::SNS
7
- include Services::SQS
8
-
9
- attr_reader :queue
10
- attr_reader :topics
11
-
12
- def self.subscribe_all(queue, topics)
13
- new(queue, topics).subscribe_all
14
- end
15
-
16
- def initialize(queue, topics)
17
- raise ArgumentError, 'queue must be a Circuitry::Queue' unless queue.is_a?(Circuitry::Queue)
18
- raise ArgumentError, 'topics must be an array' unless topics.is_a?(Array)
19
-
20
- @queue = queue
21
- @topics = topics
22
- end
23
-
24
- def subscribe_all
25
- topics.each do |topic|
26
- sns.subscribe(topic_arn: topic.arn, endpoint: queue.arn, protocol: 'sqs')
27
- end
28
- sqs.set_queue_attributes(
29
- queue_url: queue.url,
30
- attributes: build_policy
31
- )
32
- end
33
-
34
- private
35
-
36
- def build_policy
37
- # The aws ruby SDK doesn't have a policy builder :{
38
- {
39
- 'Policy' => {
40
- 'Version' => '2012-10-17',
41
- 'Id' => '#{queue.arn}/SNSPolicy',
42
- 'Statement' => topics.map { |t| build_policy_statement(t) }
43
- }.to_json
44
- }
45
- end
46
-
47
- def build_policy_statement(topic)
48
- {
49
- 'Sid' => "Sid#{topic.name}",
50
- 'Effect' => 'Allow',
51
- 'Principal' => { 'AWS' => '*' },
52
- 'Action' => 'SQS:SendMessage',
53
- 'Resource' => queue.arn,
54
- 'Condition' => {
55
- 'ArnEquals' => { 'aws:SourceArn' => topic.arn }
56
- }
57
- }
58
- end
59
- end
60
- end
@@ -1,25 +0,0 @@
1
- require 'circuitry/services/sns'
2
- require 'circuitry/topic'
3
-
4
- module Circuitry
5
- class TopicCreator
6
- include Services::SNS
7
-
8
- attr_reader :topic_name
9
-
10
- def self.find_or_create(topic_name)
11
- new(topic_name).topic
12
- end
13
-
14
- def initialize(topic_name)
15
- @topic_name = topic_name
16
- end
17
-
18
- def topic
19
- return @_topic if defined?(@_topic)
20
-
21
- response = sns.create_topic(name: topic_name)
22
- @_topic = Topic.new(response.topic_arn)
23
- end
24
- end
25
- end