class Fluent::Plugin::ObjectSpaceInput

def initialize

def initialize
  super
end

def multi_workers_ready?

def multi_workers_ready?
  true
end

def on_timer

def on_timer
  now = Fluent::EventTime.now
  array = []
  map = {}
  ObjectSpace.each_object {|obj|
    klass = obj.class rescue Object
    if c = map[klass]
      c.incr!
    else
      c = Counter.new(klass, 1)
      array << c
      map[klass] = c
    end
  }
  array.sort_by! {|c| -c.count }
  record = {}
  array.each_with_index {|c,i|
    break if i >= @top
    record[c.name] = c.count
  }
  router.emit(@tag, now, record)
rescue => e
  log.error "object space failed to emit", error: e, tag: @tag, record: Yajl.dump(record)
  log.error_backtrace
end

def start

def start
  super
  timer_execute(:object_space_input, @emit_interval, &method(:on_timer))
end