class Fluent::Path2tagOutput
Public Instance Methods
configure(conf)
click to toggle source
Calls superclass method
# File lib/fluent/plugin/out_path2tag.rb, line 9 def configure(conf) super @rewriterules = [] conf.keys.select{|k| k =~ /^path2tag$/}.each do |key| path_key, data_key = conf[key].split(" ") if path_key.nil? || data_key.nil? raise Fluent::ConfigError, "[path2tag] failed to parse path2tag at #{key} #{conf[key]}" end @rewriterules.push([path_key, data_key]) log.info "[path2tag] adding path2tag rule: #{key} #{@rewriterules.last}" end unless @rewriterules.length > 0 raise Fluent::ConfigError, "[path2tag] missing path2tag rule" end end
emit(tag, es, chain)
click to toggle source
# File lib/fluent/plugin/out_path2tag.rb, line 28 def emit(tag, es, chain) es.each do |time,record| rewrited_tag, newrecords = rewrite_tag_record(tag, record) next if newrecords.nil? || tag == rewrited_tag if newrecords.kind_of?(Array) newrecords.each do |r| router.emit(rewrited_tag, time, r) end else router.emit(rewrited_tag, time, newrecords) end end chain.next end
parse(str = '')
click to toggle source
# File lib/fluent/plugin/out_path2tag.rb, line 45 def parse(str = '') array = str.scan(/(?:\\x..)+/).uniq.sort{ |a, b| b.length <=> a.length } array.each do |reg| s = [reg.gsub('\\x', 'x').split('x').slice(1..-1).join('')].pack('H*').force_encoding('utf-8') str = str.gsub(reg, s) end return JSON.parse(str) end
rewrite_tag_record(tag, record)
click to toggle source
# File lib/fluent/plugin/out_path2tag.rb, line 54 def rewrite_tag_record(tag, record) path_key, data_key = @rewriterules[0] unless record.has_key?(path_key) log.warn "[path2tag] record has no path_key <#{path_key}>, record => #{record}" return tag, nil end unless record.has_key?(data_key) log.warn "[path2tag] record has no data_key <#{data_key}>, record => #{record}" return tag, nil end if record[data_key].empty? log.warn "[path2tag] record is empty <#{data_key}>, record => #{record}" return tag, nil end begin newrecords = parse(record[data_key]) rescue => e log.warn "[path2tag] JSON parse error!, record => #{record}" return tag, nil end newtag = record[path_key] if newtag.start_with?("/") newtag = newtag.sub("/", "") end if newtag.end_with?("/") newtag = newtag.chop end newtag = newtag.gsub("/", ".") index = newtag.index("?") unless index.nil? newtag = newtag.slice(0, newtag.index("?")) end return newtag, newrecords end