class LogCourier::PendingPayload
Describes a pending payload
Attributes
events[RW]
last_sequence[RW]
next[RW]
nonce[RW]
payload[RW]
sequence_len[RW]
Public Class Methods
new(events, nonce)
click to toggle source
# File lib/log-courier/client.rb, line 35 def initialize(events, nonce) @events = events @nonce = nonce generate end
Public Instance Methods
ack(sequence)
click to toggle source
# File lib/log-courier/client.rb, line 60 def ack(sequence) return 0, false if sequence <= @last_sequence if sequence >= @sequence_len lines = @sequence_len - @last_sequence @last_sequence = sequence @payload = nil @events = [] return lines, true end lines = sequence - @last_sequence @last_sequence = sequence @payload = nil @events.shift(lines) [lines, false] end
generate()
click to toggle source
# File lib/log-courier/client.rb, line 42 def generate raise ArgumentError, 'Corrupt payload' if @events.length.zero? buffer = Zlib::Deflate.new # Write each event in JSON format events.each do |event| json_data = MultiJson.dump(event) # Add length and then the data buffer << [json_data.bytesize].pack('N') << json_data end # Generate and store the payload @payload = nonce + buffer.finish @last_sequence = 0 @sequence_len = @events.length end