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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +107 -59
- data/circuitry.gemspec +2 -2
- data/lib/circuitry.rb +32 -15
- data/lib/circuitry/cli.rb +32 -32
- data/lib/circuitry/config/file_loader.rb +24 -0
- data/lib/circuitry/config/publisher_settings.rb +16 -0
- data/lib/circuitry/config/shared_settings.rb +39 -0
- data/lib/circuitry/config/subscriber_settings.rb +32 -0
- data/lib/circuitry/locks/base.rb +3 -3
- data/lib/circuitry/locks/memory.rb +4 -4
- data/lib/circuitry/locks/noop.rb +1 -1
- data/lib/circuitry/locks/redis.rb +1 -1
- data/lib/circuitry/middleware/chain.rb +1 -1
- data/lib/circuitry/processor.rb +12 -10
- data/lib/circuitry/processors/forker.rb +1 -1
- data/lib/circuitry/processors/threader.rb +1 -1
- data/lib/circuitry/provisioning.rb +9 -0
- data/lib/circuitry/provisioning/provisioner.rb +71 -0
- data/lib/circuitry/provisioning/queue_creator.rb +64 -0
- data/lib/circuitry/provisioning/subscription_creator.rb +65 -0
- data/lib/circuitry/provisioning/topic_creator.rb +31 -0
- data/lib/circuitry/publisher.rb +5 -6
- data/lib/circuitry/queue.rb +25 -3
- data/lib/circuitry/railtie.rb +9 -0
- data/lib/circuitry/services/sns.rb +1 -1
- data/lib/circuitry/services/sqs.rb +1 -1
- data/lib/circuitry/subscriber.rb +8 -8
- data/lib/circuitry/tasks.rb +3 -3
- data/lib/circuitry/topic.rb +24 -2
- data/lib/circuitry/version.rb +1 -1
- metadata +11 -7
- data/lib/circuitry/configuration.rb +0 -64
- data/lib/circuitry/provisioner.rb +0 -60
- data/lib/circuitry/queue_creator.rb +0 -50
- data/lib/circuitry/subscription_creator.rb +0 -60
- 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
|