Class: PushyDaemon::Shouter
Instance Attribute Summary collapse
-
#table ⇒ Object
Returns the value of attribute table.
Instance Method Summary collapse
-
#initialize ⇒ Shouter
constructor
A new instance of Shouter.
- #shout ⇒ Object
Constructor Details
#initialize ⇒ Shouter
Returns a new instance of Shouter.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/pushyd/shouter.rb', line 15 def initialize # Init super @keys = [] # Start connexion to RabbitMQ and create channel @channel = connect_channel Conf.bus info "channel connected" # Check config config_shout = Conf[:shout] if config_shout.empty? || (!config_shout.is_a? Enumerable) abort "prepare: empty [shout] section" end # Extract information @keys = config_shout[:keys] if config_shout[:keys].is_a? Array @topic = config_shout[:topic] @period = config_shout[:period] || 0 # Create exchange raise PushyDaemon::EndpointTopicContext unless @topic @exchange = @channel.topic(@topic, durable: true, persistent: true) info "initialized with parameters:", {topic: @topic, period: @period, keys: @keys} rescue Bunny::TCPConnectionFailedForAllHosts => e error "ERROR: cannot connect to RabbitMQ hosts (#{e.inspect})" end |
Instance Attribute Details
#table ⇒ Object
Returns the value of attribute table.
13 14 15 |
# File 'lib/pushyd/shouter.rb', line 13 def table @table end |
Instance Method Details
#shout ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/pushyd/shouter.rb', line 44 def shout # Prepare exchange loop do if true # shout_exchange random_string = SecureRandom.hex random_key = @keys.sample || "random" channel_shout [:ping, random_key, random_string], {} end sleep @period end rescue AMQ::Protocol::EmptyResponseError => e raise PushyDaemon::ShouterResponseError, "#{e.class} (#{e.inspect})" rescue Bunny::ChannelAlreadyClosed => e raise PushyDaemon::ShouterChannelClosed, "#{e.class} (#{e.inspect})" rescue Bunny::PreconditionFailed => e raise PushyDaemon::ShouterPreconditionFailed, "#{e.class} (#{e.inspect})" rescue Interrupt => e @channel.close raise PushyDaemon::ShouterInterrupted, "#{e.class} (#{e.inspect})" end |