class Fluent::Nata2Output

Public Class Methods

new() click to toggle source
Calls superclass method
# File lib/fluent/plugin/out_nata2.rb, line 12
def initialize
  super
  require 'net/http'
  require 'uri'
end

Public Instance Methods

configure(conf) click to toggle source
Calls superclass method
# File lib/fluent/plugin/out_nata2.rb, line 18
def configure(conf)
  super
  @url = 'http://' + @server + ':' + @port.to_s
end
emit(tag, es, chain) click to toggle source
# File lib/fluent/plugin/out_nata2.rb, line 23
def emit(tag, es, chain)
  es.each do |time, record|
    emit_tag = tag.clone
    filter_record(emit_tag, time, record)
    service_name, host_name, database_name = prepare_data_to_post(emit_tag, record)
    post_to_nata2(service_name, host_name, database_name, record)
  end
  chain.next
end
post_to_nata2(service_name, host_name, database_name, record) click to toggle source
# File lib/fluent/plugin/out_nata2.rb, line 41
def post_to_nata2(service_name, host_name, database_name, record)
  api = URI.parse(@url + %Q{/api/1/#{service_name}/#{host_name}/#{database_name}})
  begin
    request = Net::HTTP::Post.new(api.path)
    request.set_form_data(record)
    http = Net::HTTP.new(api.host, api.port)
    response = http.start.request(request)
  rescue IOError, EOFError, SystemCallError => e
    log.warn %Q{net/http POST raises exception: #{e.class}, '#{e.message}'}
  end
  if !response || !response.is_a?(Net::HTTPSuccess)
    log.warn %Q{failed to post to nata2: #{api}, sql: #{record[:sql]}, code: #{response && response.code}}
  end
end
prepare_data_to_post(tag, record) click to toggle source
# File lib/fluent/plugin/out_nata2.rb, line 33
def prepare_data_to_post(tag, record)
  tag = tag.split('.')
  service_name = tag.shift
  host_name = tag.join('.')
  database_name = record[:database] || record['database']
  [ service_name, host_name, database_name ]
end