Class: Fluent::MultiEventStream

Inherits:
EventStream show all
Defined in:
lib/fluent/event.rb

Overview

EventStream from entries: numbers of pairs of time and record.

This class can handle many events more efficiently than ArrayEventStream because this class generate less objects than ArrayEventStream.

Use this class as below, in loop of data-enumeration:

1. initialize blank stream:
   streams[tag] ||= MultiEventStream.new
2. add events
   stream[tag].add(time, record)

Instance Method Summary collapse

Methods inherited from EventStream

#==, #to_compressed_msgpack_stream, #to_msgpack_stream, #to_msgpack_stream_forced_integer

Methods included from Plugin::Compressable

#compress, #decompress

Constructor Details

#initialize(time_array = [], record_array = []) ⇒ MultiEventStream

Returns a new instance of MultiEventStream.



162
163
164
165
# File 'lib/fluent/event.rb', line 162

def initialize(time_array = [], record_array = [])
  @time_array = time_array
  @record_array = record_array
end

Instance Method Details

#add(time, record) ⇒ Object



175
176
177
178
# File 'lib/fluent/event.rb', line 175

def add(time, record)
  @time_array << time
  @record_array << record
end

#dupObject



167
168
169
# File 'lib/fluent/event.rb', line 167

def dup
  MultiEventStream.new(@time_array.dup, @record_array.map(&:dup))
end

#each(unpacker: nil, &block) ⇒ Object



192
193
194
195
196
197
198
199
# File 'lib/fluent/event.rb', line 192

def each(unpacker: nil, &block)
  time_array = @time_array
  record_array = @record_array
  for i in 0..time_array.length-1
    block.call(time_array[i], record_array[i])
  end
  nil
end

#empty?Boolean

Returns:

  • (Boolean)


184
185
186
# File 'lib/fluent/event.rb', line 184

def empty?
  @time_array.empty?
end

#repeatable?Boolean

Returns:

  • (Boolean)


180
181
182
# File 'lib/fluent/event.rb', line 180

def repeatable?
  true
end

#sizeObject



171
172
173
# File 'lib/fluent/event.rb', line 171

def size
  @time_array.size
end

#slice(index, num) ⇒ Object



188
189
190
# File 'lib/fluent/event.rb', line 188

def slice(index, num)
  MultiEventStream.new(@time_array.slice(index, num), @record_array.slice(index, num))
end