Class: Carnivore::Http::RetryDelivery
- Inherits:
-
Object
- Object
- Carnivore::Http::RetryDelivery
- Includes:
- Utils::Logging, Celluloid
- Defined in:
- lib/carnivore-http/retry_delivery.rb
Instance Attribute Summary collapse
-
#message_directory ⇒ String
readonly
Message directory.
Instance Method Summary collapse
-
#attempt_redelivery(message_id = '*') ⇒ TrueClass, FalseClass
Attempt to deliver messages found in message directory.
-
#initialize(directory) ⇒ self
constructor
Create new instance.
-
#redeliver(message_id, payload, method, url, headers) ⇒ TrueClass, FalseClass
Attempt redelivery of message.
Constructor Details
#initialize(directory) ⇒ self
Create new instance
18 19 20 21 |
# File 'lib/carnivore-http/retry_delivery.rb', line 18 def initialize(directory) @message_directory = directory every(60){ attempt_redelivery } end |
Instance Attribute Details
#message_directory ⇒ String (readonly)
Returns message directory.
12 13 14 |
# File 'lib/carnivore-http/retry_delivery.rb', line 12 def @message_directory end |
Instance Method Details
#attempt_redelivery(message_id = '*') ⇒ TrueClass, FalseClass
Note:
will not attempt if attempt is currently in progress
Attempt to deliver messages found in message directory
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/carnivore-http/retry_delivery.rb', line 27 def attempt_redelivery( = '*') attempt = false begin unless(@delivering) @delivering = true attempt = true Dir.glob(File.join(, "#{}.json")).each do |file| debug "Redelivery processing: #{file}" begin args = MultiJson.load(File.read(file)).to_smash debug "Restored from file #{file}: #{args.inspect}" if(redeliver(args[:message_id], args[:payload], args[:method], args[:url], args[:headers])) FileUtils.rm(file) end rescue => e error "Failed to process file (#{file}): #{e.class}: #{e}" debug "#{e.class}: #{e}\n#{e.backtrace.join("\n")}" end end end rescue => e error "Unexpected error encountered during message redelivery! #{e.class}: #{e}" debug "#{e.class}: #{e}\n#{e.backtrace.join("\n")}" ensure @delivering = false end attempt end |
#redeliver(message_id, payload, method, url, headers) ⇒ TrueClass, FalseClass
Attempt redelivery of message
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/carnivore-http/retry_delivery.rb', line 64 def redeliver(, payload, method, url, headers) begin base = headers.empty? ? HTTP : HTTP.with_headers(headers) uri = URI.parse(url) if(uri.userinfo) base = base.basic_auth(:user => uri.user, :pass => uri.password) end if(payload.is_a?(String)) begin payload = MultiJson.load(payload) rescue MultiJson::ParseError # ignore end end result = base.send(method, url, payload.is_a?(Hash) ? :json : :body => payload ) if(result.code < 200 || result.code > 299) error "Invalid response code received for #{}: #{result.code} - #{result.reason}" false else info "Successful delivery of message on retry! Message ID: #{}" true end rescue => e error "Transmission redelivery failure (Message ID: #{}) - #{e.class}: #{e}" debug "#{e.class}: #{e}\n#{e.backtrace.join("\n")}" false end end |