Sha256: 7242d32b365abf6597ae6720a6c24b654b66b0d2554d7fd9e7f9a8754bad6f00

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

class Fluent::DockerTagResolverOutput < Fluent::Output

  # Define `log` method for v0.10.42 or earlier
  unless method_defined?(:log)
    define_method("log") { $log }
  end

  Fluent::Plugin.register_output('docker_tag_resolver', self)

  def initialize
    super
    require  'docker'

    @containers = Docker::Container.all

    @find_containers = Proc.new do |id|
      container = @containers.select{|c| c.id == id}.first

      if container.nil?
        @containers = Docker::Container.all 
        @containers.select{|c| c.id == id}.first
      else
        container
      end
    end
  end

  def emit(tag, es, chain)
    es.each do |time,record|
      rewrited_tag = rewrite_tag(tag, record)
      next if rewrited_tag.nil? || tag == rewrited_tag
      Fluent::Engine.emit(rewrited_tag, time, record)
    end

    chain.next
  end

  def rewrite_tag(tag, record)
    container_id, _ , _ = tag.split('.').last(3)

    container = @find_containers.call(container_id)

    return tag unless container

    image_name = container.info['Image']
    container_name = container.info['Names'].first

    return tag if image_name.nil? or container_name.nil?

    container_name.sub!(/^\//, '')
    container_name.tr!('.','_')
    image_name.tr!('.','_')

    rewrited_tag = "docker.container.%s.%s.%s" % [image_name, container_name, container_id]
    return rewrited_tag
  end


end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fluent-plugin-docker-tag-resolver-0.2.0 lib/fluent/plugin/out_docker_tag_resolver.rb