circuitry 2.1.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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