class LogStash::Codecs::Frame

Frame-oriented text data.

Decoding behavior: Only whole frame events will be emitted.

Encoding behavior: Each event will be emitted with a prefixed <length><delimiter>.

Public Instance Methods

decode(data) { |event("message" => convert)| ... } click to toggle source
# File lib/logstash/codecs/frame.rb, line 32
def decode(data)
  @buffer += data
  while (nextMessage)
    yield LogStash::Event.new("message" => @converter.convert(@buffer[@offset, @frameLength]))
    @buffer.slice!(0, @offset + @frameLength)
    @offset = nil
  end
end
encode(event) click to toggle source
# File lib/logstash/codecs/frame.rb, line 42
def encode(event)
  if event.is_a? LogStash::Event and @format
    @on_event.call(event, encodeFrameLength(event.sprintf(@format)))
  else
    @on_event.call(event, encodeFrameLength(event.to_s))
  end
end
register() click to toggle source
# File lib/logstash/codecs/frame.rb, line 23
def register
  @buffer = ""
  @offset
  @frame_length
  @converter = LogStash::Util::Charset.new(@charset)
  @converter.logger = @logger
end

Private Instance Methods

encodeFrameLength(message) click to toggle source
# File lib/logstash/codecs/frame.rb, line 64
def encodeFrameLength(message)
  return message.length.to_s + @delimiter + message
end
nextMessage() click to toggle source
# File lib/logstash/codecs/frame.rb, line 51
def nextMessage()
  if (@offset.nil?)
    @offset = @buffer.index(@delimiter);
    if (@offset.nil?)
      return false
    end
    @frameLength = @buffer[0, @offset].to_i
    @offset +=  @delimiter.length
  end
  return @buffer.length >= @offset + @frameLength
end