lib/fluent/plugin/out_simple_arithmetic.rb in fluent-plugin-simplearithmetic-0.0.1.pre vs lib/fluent/plugin/out_simple_arithmetic.rb in fluent-plugin-simplearithmetic-0.0.1

- old
+ new

@@ -9,10 +9,13 @@ config_param :undefined_variables, :string, :default => 'undefined' # 'nil', 'undefined', 'error_string' config_param :how_to_process_error, :string, :default => 'error_string' + config_param :replace_hyphen, :string, :default => '__HYPHON__' + config_param :replace_dollar, :string, :default => '__DOLLAR__' + attr_accessor :_formulas def initialize super require 'time' @@ -39,14 +42,13 @@ end } # Create functions @_formulas = [] - def create_func(var, expr) begin - f_argv = expr.scan(/[a-zA-Z][\w\d\.]*/).uniq.select{|x| not x.start_with?('Time.iso8601')} + f_argv = expr.scan(/[a-zA-Z\_][\w\d\.\_]*/).uniq.select{|x| not x.start_with?('Time.iso8601')} f = eval('lambda {|' + f_argv.join(',') + '| ' + expr + '}') return [f, f_argv] rescue SyntaxError raise Fluent::ConfigError, "SyntaxError at formula `#{var}`: #{expr}" end @@ -59,10 +61,14 @@ element.has_key?(var) # to suppress unread configuration warning formula, f_argv = create_func(var, expr) @_formulas.push [var, f_argv, formula] } } + if @_formulas.empty? + raise Fluent::ConfigError, "No formulas found" + end + end def has_all_keys?(record, argv) argv.each {|var| if not record.has_key?(var) @@ -78,11 +84,34 @@ argv.push(record[v]) } return formula.call(*argv) end + # functions for symbols + def replace_symbols(record) + # 'var-1' -> 'var__HYPHEN__1' + new_record = {} + record.each_pair {|key, value| + new_key = key.gsub('-', @replace_hyphen).gsub('$', @replace_dollar) + new_record[new_key] = value + } + return new_record + end + + def restore_symbols(record) + # 'var__HYPHEN__1' -> 'var-1' + new_record = {} + record.each_pair {|key, value| + new_key = key.gsub(@replace_hyphen, '-').gsub(@replace_dollar, '$') + new_record[new_key] = value + } + new_record + end + def calculate(record) + record = replace_symbols(record) + @_formulas.each {|var, f_argv, formula| if not has_all_keys?(record, f_argv) if @undefined_variables == 'nil' record[var] = nil end @@ -98,10 +127,11 @@ when 'nil' record[var] = nil end end } - record + + restore_symbols(record) end def emit(tag, es, chain) chain.next es.each { |time, record|