class Fluent::DockerFormatOutput

Public Instance Methods

configure(conf) click to toggle source
Calls superclass method
# File lib/fluent/plugin/out_docker_format.rb, line 10
def configure(conf)
  super
  @id_to_name = {}
end
emit(tag, es, chain) click to toggle source
# File lib/fluent/plugin/out_docker_format.rb, line 15
def emit(tag, es, chain)
  es.each do |time,record|
    Engine.emit(interpolate_tag(tag), time, format_record(tag, record))
  end

  chain.next
end

Private Instance Methods

format_record(tag, record) click to toggle source
# File lib/fluent/plugin/out_docker_format.rb, line 54
def format_record(tag, record)
  id = interpolate(tag, @container_id)
  record['container_id'] = id
  record['container_name'] = get_name(id) || "<unknown>"
  record
end
get_name(id) click to toggle source
# File lib/fluent/plugin/out_docker_format.rb, line 49
def get_name(id)
  @id_to_name[id] = get_name_from_cfg(id) unless @id_to_name.has_key? id
  @id_to_name[id]
end
get_name_from_cfg(id) click to toggle source
# File lib/fluent/plugin/out_docker_format.rb, line 39
def get_name_from_cfg(id)
  begin
    docker_cfg = JSON.parse(File.read("#{@docker_containers_path}/#{id}/config.json"))
    container_name = docker_cfg['Name']
  rescue
    container_name = nil
  end
  container_name
end
interpolate(tag, str) click to toggle source
# File lib/fluent/plugin/out_docker_format.rb, line 25
def interpolate(tag, str)
  tag_parts = tag.split('.')

  str.gsub(/\$\{tag_parts\[(\d+)\]\}/) { |m| tag_parts[$1.to_i] }
end
interpolate_tag(tag) click to toggle source
# File lib/fluent/plugin/out_docker_format.rb, line 31
def interpolate_tag(tag)
  id = interpolate(tag, @container_id)
  name = get_name(id)
  name = name[1..-1] if name

  @tag.gsub(/\$\{name\}/, name || id)
end