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_docker_cfg = {}
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 82
def format_record(tag, record)
  id = interpolate(tag, @container_id)
  record['container_id'] = id
  record['container_name'] = get_container_name(id) || "<unknown>"
  record['image_name'] = get_image_name(id) || "<unknown>"
  record
end
get_container_name(id) click to toggle source
# File lib/fluent/plugin/out_docker_format.rb, line 52
def get_container_name(id)
  @id_to_docker_cfg[id] = get_docker_cfg_from_id(id) unless @id_to_docker_cfg.has_key? id
  if @id_to_docker_cfg[id] == nil
    container_name = nil
  else
    container_name = @id_to_docker_cfg[id]['Name'][1..-1]
  end
  container_name
end
get_docker_cfg_from_id(id) click to toggle source
# File lib/fluent/plugin/out_docker_format.rb, line 43
def get_docker_cfg_from_id(id)
  begin
    docker_cfg = JSON.parse(File.read("#{@docker_containers_path}/#{id}/config.json"))
  rescue
    docker_cfg = nil
  end
  docker_cfg
end
get_image_name(id) click to toggle source
# File lib/fluent/plugin/out_docker_format.rb, line 62
def get_image_name(id)
  @id_to_docker_cfg[id] = get_docker_cfg_from_id(id) unless @id_to_docker_cfg.has_key? id
  if @id_to_docker_cfg[id] == nil
    image_name = nil
  else
    image_name = @id_to_docker_cfg[id]['Config']['Image'].dup
  end
  image_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)

  container_name = get_container_name(id)
  @tag.gsub(/\$\{name\}/, container_name || id)
  @tag.gsub(/\$\{container_name\}/, container_name || id)

  image_name = get_image_name(id)
  image_name.gsub!(/\:.*$/,'') if image_name  # strip the docker tag
  @tag.gsub(/\$\{image_name\}/, image_name || id)
end