pushyd 0.25.0 → 0.26.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/defaults.yml +1 -1
- data/lib/pushyd/consumer.rb +7 -15
- data/lib/pushyd/proxy.rb +45 -14
- data/lib/pushyd/shouter.rb +13 -12
- data/pushyd.gemspec +3 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40d8b0ca991da2673c872f8dd20865c9c8423a1f
|
4
|
+
data.tar.gz: fd793ad3c7c38d72eeca44fd7aa2a09ad965fc8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 490dd865467775ff6f9b3b8a588636c3f7192cb135305583c05cb24e0f6185051294dcf61a475c148dc39f64d3842b37a810c12c57090297c00f4bd94ea4a711
|
7
|
+
data.tar.gz: db8fb4341181f1fd9690df6d7da85a2567a3d1a280c25e7ae20f294430bc5feea549b7c728ce8a8bedaaa50691954118b841b3ece08434f63dc0a89ce5cc483b
|
data/defaults.yml
CHANGED
data/lib/pushyd/consumer.rb
CHANGED
@@ -5,28 +5,21 @@ module PushyDaemon
|
|
5
5
|
# class ShouterInterrupted < StandardError; end
|
6
6
|
class ConsumerError < StandardError; end
|
7
7
|
class ConsumerRuleMissing < StandardError; end
|
8
|
+
class ConsumerSubscribeError < StandardError; end
|
8
9
|
|
9
10
|
class Consumer < BmcDaemonLib::MqConsumer
|
10
11
|
#include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
11
12
|
include Shared::HmacSignature
|
12
|
-
attr_accessor :logger
|
13
13
|
|
14
|
-
def initialize(
|
14
|
+
def initialize(channel, rule_name, rule)
|
15
|
+
# Init MqConsumer
|
16
|
+
log_pipe :consumer
|
17
|
+
super
|
18
|
+
|
15
19
|
# Init
|
16
20
|
@queue = nil
|
17
|
-
@conn = conn
|
18
21
|
@rule = rule
|
19
22
|
@rule_name = rule_name
|
20
|
-
|
21
|
-
# Prepare logger
|
22
|
-
log_pipe :consumer
|
23
|
-
|
24
|
-
# Create channel, prefetch only one message at a time
|
25
|
-
@channel = @conn.create_channel
|
26
|
-
@channel.prefetch(AMQP_PREFETCH)
|
27
|
-
|
28
|
-
# OK
|
29
|
-
log_info "Consumer initialized"
|
30
23
|
end
|
31
24
|
|
32
25
|
protected
|
@@ -135,7 +128,7 @@ module PushyDaemon
|
|
135
128
|
|
136
129
|
# rescue StandardError => ex
|
137
130
|
# log_debug "channel_ackit[#{@channel.id}.#{tag}]: exception: #{ex.inspect}"
|
138
|
-
# # fail PushyDaemon::
|
131
|
+
# # fail PushyDaemon::ConsumerSubscribeError, "unhandled (#{e.inspect})"
|
139
132
|
|
140
133
|
# else
|
141
134
|
# log_debug "channel_ackit[#{@channel.id}.#{tag}]: done"
|
@@ -144,6 +137,5 @@ module PushyDaemon
|
|
144
137
|
# NewRelic instrumentation
|
145
138
|
#add_transaction_tracer :receive, category: :task
|
146
139
|
#add_transaction_tracer :propagate, category: :task
|
147
|
-
|
148
140
|
end
|
149
141
|
end
|
data/lib/pushyd/proxy.rb
CHANGED
@@ -4,6 +4,10 @@ require 'rest_client'
|
|
4
4
|
require 'terminal-table'
|
5
5
|
|
6
6
|
module PushyDaemon
|
7
|
+
class EndpointConnexionContext < StandardError; end
|
8
|
+
class ProxyConnectionError < StandardError; end
|
9
|
+
class ProxyConsumerError < StandardError; end
|
10
|
+
|
7
11
|
class Proxy < BmcDaemonLib::MqEndpoint
|
8
12
|
#include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
9
13
|
|
@@ -25,11 +29,10 @@ module PushyDaemon
|
|
25
29
|
@logger = BmcDaemonLib::LoggerPool.instance.get
|
26
30
|
|
27
31
|
# Start connexion to RabbitMQ
|
28
|
-
|
29
|
-
log_info "Proxy connected"
|
32
|
+
connect_to BmcDaemonLib::Conf[:broker]
|
30
33
|
|
31
34
|
# Create a new shouter
|
32
|
-
|
35
|
+
create_shouter
|
33
36
|
|
34
37
|
# Check config and subscribe rules
|
35
38
|
create_consumers
|
@@ -42,10 +45,10 @@ module PushyDaemon
|
|
42
45
|
@shouter.start_loop
|
43
46
|
|
44
47
|
rescue BmcDaemonLib::MqConsumerException => e
|
45
|
-
log_error "Proxy
|
48
|
+
log_error "Proxy exception: #{e.message}"
|
46
49
|
abort "EXITING #{e.class}: #{e.message}"
|
47
50
|
|
48
|
-
rescue ShouterInterrupted,
|
51
|
+
rescue ShouterInterrupted, ProxyConnectionError, Errno::EACCES => e
|
49
52
|
log_error "Proxy error: #{e.message}"
|
50
53
|
abort "EXITING #{e.class}: #{e.message}"
|
51
54
|
|
@@ -62,15 +65,14 @@ module PushyDaemon
|
|
62
65
|
{
|
63
66
|
me: :proxy
|
64
67
|
}
|
65
|
-
|
66
68
|
end
|
67
69
|
|
68
70
|
def create_shouter
|
69
|
-
#
|
70
|
-
|
71
|
+
# Create my channel
|
72
|
+
channel = @conn.create_channel
|
71
73
|
|
72
74
|
# Create the shouter
|
73
|
-
Shouter.new(
|
75
|
+
@shouter = Shouter.new(channel, BmcDaemonLib::Conf[:shout])
|
74
76
|
end
|
75
77
|
|
76
78
|
def create_consumers
|
@@ -104,13 +106,14 @@ module PushyDaemon
|
|
104
106
|
end
|
105
107
|
|
106
108
|
# Check we have a topic and at least one routing key
|
107
|
-
fail
|
108
|
-
fail
|
109
|
+
fail BmcDaemonLib::ProxyConsumerError, "rule [#{rule_name}] lacking topic" unless rule_topic
|
110
|
+
fail BmcDaemonLib::ProxyConsumerError, "rule [#{rule_name}] lacking keys" if rule_keys.empty?
|
109
111
|
|
110
|
-
# Build a new consumer
|
111
|
-
|
112
|
+
# Build a new consumer on its own channel
|
113
|
+
channel = @conn.create_channel
|
114
|
+
consumer = Consumer.new(channel, rule_name, rule)
|
112
115
|
|
113
|
-
# Subscribe to
|
116
|
+
# Subscribe to its own queue
|
114
117
|
consumer.subscribe_to_queue rule_queue, "rule:#{rule_name}"
|
115
118
|
|
116
119
|
# Bind each key to exchange
|
@@ -140,5 +143,33 @@ module PushyDaemon
|
|
140
143
|
log_error "consumer_cancelled remotely: #{all.inspect}"
|
141
144
|
end
|
142
145
|
|
146
|
+
# Start connexion to RabbitMQ
|
147
|
+
def connect_to busconf
|
148
|
+
fail ProxyConnectionError, "connect_to/busconf" unless busconf
|
149
|
+
log_info "connect_to: connecting to broker", {
|
150
|
+
broker: busconf,
|
151
|
+
recover: AMQP_RECOVERY_INTERVAL,
|
152
|
+
heartbeat: AMQP_HEARTBEAT_INTERVAL,
|
153
|
+
prefetch: AMQP_PREFETCH
|
154
|
+
}
|
155
|
+
@conn = Bunny.new busconf.to_s,
|
156
|
+
logger: @logger,
|
157
|
+
# heartbeat: :server,
|
158
|
+
automatically_recover: true,
|
159
|
+
network_recovery_interval: AMQP_RECOVERY_INTERVAL,
|
160
|
+
heartbeat_interval: AMQP_HEARTBEAT_INTERVAL,
|
161
|
+
read_write_timeout: AMQP_HEARTBEAT_INTERVAL*2
|
162
|
+
|
163
|
+
# Start the connection
|
164
|
+
@conn.start
|
165
|
+
|
166
|
+
rescue Bunny::TCPConnectionFailedForAllHosts, Bunny::AuthenticationFailureError, AMQ::Protocol::EmptyResponseError => e
|
167
|
+
fail ProxyConnectionError, "error connecting (#{e.class})"
|
168
|
+
rescue StandardError => e
|
169
|
+
fail ProxyConnectionError, "unknow (#{e.inspect})"
|
170
|
+
else
|
171
|
+
#return conn
|
172
|
+
end
|
173
|
+
|
143
174
|
end
|
144
175
|
end
|
data/lib/pushyd/shouter.rb
CHANGED
@@ -7,20 +7,19 @@ module PushyDaemon
|
|
7
7
|
|
8
8
|
class Shouter < BmcDaemonLib::MqEndpoint
|
9
9
|
include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
|
10
|
-
include
|
10
|
+
include LoggerHelper
|
11
|
+
attr_accessor :logger
|
11
12
|
|
12
13
|
# Class options
|
13
14
|
attr_accessor :table
|
14
|
-
attr_accessor :logger
|
15
15
|
|
16
|
-
def initialize(
|
16
|
+
def initialize(channel, config_shout)
|
17
|
+
# Init MqConsumer
|
18
|
+
log_pipe :shouter
|
19
|
+
super
|
20
|
+
|
17
21
|
# Init
|
18
22
|
@shouter_keys = []
|
19
|
-
@channel = nil
|
20
|
-
@exchange = nil
|
21
|
-
|
22
|
-
# Prepare logger
|
23
|
-
log_pipe :shouter
|
24
23
|
|
25
24
|
# Check config
|
26
25
|
unless config_shout && config_shout.any? && config_shout.is_a?(Enumerable)
|
@@ -31,20 +30,22 @@ module PushyDaemon
|
|
31
30
|
# Extract information
|
32
31
|
@shouter_keys = config_shout[:keys] if config_shout[:keys].is_a? Array
|
33
32
|
@shouter_topic = config_shout[:topic]
|
34
|
-
@shouter_period = config_shout[:period].
|
33
|
+
@shouter_period = config_shout[:period].to_f
|
35
34
|
@shouter_period = 1 unless (@shouter_period > 0)
|
36
35
|
|
37
36
|
fail PushyDaemon::EndpointTopicContext unless @shouter_topic
|
38
37
|
|
39
|
-
# Create
|
40
|
-
@channel = conn.create_channel
|
38
|
+
# Create exchange
|
41
39
|
@exchange = @channel.topic(@shouter_topic, durable: true, persistent: true)
|
40
|
+
#log_info "channel[#{@channel.id}] created, prefetch[#{AMQP_PREFETCH}]"
|
42
41
|
|
43
42
|
# Start working, now
|
44
|
-
log_info "
|
43
|
+
log_info "shouter initialized"
|
45
44
|
end
|
46
45
|
|
47
46
|
def start_loop
|
47
|
+
log_info "shouter start_loop", { topic: @shouter_topic, period: @shouter_period, keys: @shouter_keys }
|
48
|
+
|
48
49
|
# Prepare exchange
|
49
50
|
loop do
|
50
51
|
# Generate payload
|
data/pushyd.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
Gem::Specification.new do |spec|
|
3
3
|
# Project version
|
4
|
-
spec.version = "0.
|
4
|
+
spec.version = "0.26.0"
|
5
5
|
|
6
6
|
# Project description
|
7
7
|
spec.name = "pushyd"
|
@@ -28,7 +28,8 @@ Gem::Specification.new do |spec|
|
|
28
28
|
# spec.add_development_dependency "pry"
|
29
29
|
|
30
30
|
# Runtime dependencies
|
31
|
-
spec.add_runtime_dependency "bmc-daemon-lib"
|
31
|
+
# spec.add_runtime_dependency "bmc-daemon-lib"
|
32
|
+
spec.add_runtime_dependency "bmc-daemon-lib", "= 0.10.0"
|
32
33
|
spec.add_runtime_dependency "daemons"
|
33
34
|
spec.add_runtime_dependency "json"
|
34
35
|
spec.add_runtime_dependency "bunny", "~> 2.3"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pushyd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.26.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bruno MEDICI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - '='
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 0.
|
89
|
+
version: 0.10.0
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - '='
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 0.
|
96
|
+
version: 0.10.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: daemons
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|