class LogStash::Inputs::Faker

NOTE

The values put into the add_faker_field params must be available modules and method calls from the Faker gem library seen at github.com/stympy/faker/

Example:

source, ruby

input {

faker {
  count => 1
  add_faker_field => {
    "[name][last_name]" => "Name.last_name"
    "[name][first_name]" => "Name.first_name"
    "[address][city]" => "Address.city"
    "[address][address1]" => "Address.street_address"
  }
  overwrite_fields => true
}

}

Public Instance Methods

close() click to toggle source
# File lib/logstash/inputs/faker.rb, line 211
def close
  if @codec.respond_to?(:flush)
    @codec.flush do |event|
      decorate(event)
      event.set("host", @host)
      queue << event
    end
  end
end
register() click to toggle source
# File lib/logstash/inputs/faker.rb, line 87
def register
  @host = Socket.gethostname
  @count = Array(@count).first
end
run(queue) click to toggle source
# File lib/logstash/inputs/faker.rb, line 92
def run(queue)
  number = 0
  set_primary_key   if @add_primary_key_to_events
  set_foreign_keys  if @add_foreign_keys_to_events
  while !stop? && (@count <= 0 || number < @count)
    event = LogStash::Event.new({})
    add_faker_fields(event)
    if @splitable_field
      add_splitable_fields(event)
    end
    if @add_primary_key_to_events
      LogStash::Util::Decorators.add_fields(@primary_key, event,"inputs/#{self.class.name}")
    end
    decorate(event)
    event.set("host", @host)
    queue << event
    number += 1
  end #end loop
end

Protected Instance Methods

add_faker_fields(event) click to toggle source
# File lib/logstash/inputs/faker.rb, line 123
def add_faker_fields(event)
  new_fields = {}
  @add_faker_field.each do |field, faker_string|
    if @multiply_field[field]
      event.remove(field) if @overwrite_fields
      new_fields[field] = generate_multiplied_values(faker_string, @multiply_field[field], true)
    else
      event.remove(field) if @overwrite_fields
      new_fields[field] = Faker.class_eval(faker_string)
    end
  end
  LogStash::Util::Decorators.add_fields(new_fields, event,"inputs/#{self.class.name}")
end
add_splitable_fields(event) click to toggle source
# File lib/logstash/inputs/faker.rb, line 138
def add_splitable_fields(event)
  event.remove(@splitable_field)
  splitable_events = []
  used_ids = []
  if @splitable_field_count <= 0
    @splitable_field_count = rand(100)
  end
  @splitable_field_count.times do
    new_event = LogStash::Event.new()
    @add_splitable_field.each do |field, value|
      if @multiply_splitable_field[field]
        new_event.set(field, generate_multiplied_values(faker_string, @multiply_splitable_field[field], false))
      else
        new_event.set(field, event.sprintf(value))
      end
    end
    @add_splitable_faker_field.each do |field, faker_string|
      if @multiply_splitable_field[field]
        new_event.set(field, generate_multiplied_values(faker_string, @multiply_splitable_field[field], true))
      else
        new_event.set(field, event.sprintf(Faker.class_eval(faker_string)))
      end
    end
    if @add_foreign_keys_to_events
      key = (@foreign_keys - used_ids).sample
      if key.nil?
        used_ids = []
        key = (@foreign_keys - used_ids).sample
      else
        new_event.set(@foreign_key_field, key)
      end
      used_ids.push(key)
    end
    new_event.remove("@timestamp")
    new_event.remove("@version")
    splitable_events << new_event.to_hash
  end
  event.set(@splitable_field, splitable_events)
end
generate_foreign_keys(key_count) click to toggle source
# File lib/logstash/inputs/faker.rb, line 202
def generate_foreign_keys(key_count)
  @foreign_keys = []
  while @foreign_keys.size < key_count
    @foreign_keys.push(Faker::Number.number(10).to_s)
    @foreign_keys.uniq!
  end
end
generate_multiplied_values(value, count, is_faker=false) click to toggle source
# File lib/logstash/inputs/faker.rb, line 113
def generate_multiplied_values(value, count, is_faker=false)
  num = (count == 0 ? rand(1000) : count)
  if is_faker
    return num.times.map{ Faker.class_eval(value) }
  else
    return num.times.map{ value }
  end
end
set_foreign_keys() click to toggle source
# File lib/logstash/inputs/faker.rb, line 186
def set_foreign_keys
  if @add_foreign_keys_to_events && @foreign_keys.empty?
    @foreign_key_field = "[foreign_id]" if @foreign_key_field.to_s.empty?
    if @splitable_field_count <= 0
      if @count <= 0
        generate_foreign_keys(@count)
      else
        generate_foreign_keys(1000)
      end
    else
      generate_foreign_keys(@splitable_field_count)
    end
  end
end
set_primary_key() click to toggle source
# File lib/logstash/inputs/faker.rb, line 179
def set_primary_key
  if @add_primary_key_to_events && @primary_key.empty?
    @primary_key = { "[id]" => Faker::Number.number(10).to_s }
  end
end