lib/fluent/plugin/out_datacalculator.rb in fluent-plugin-datacalculator-0.0.3 vs lib/fluent/plugin/out_datacalculator.rb in fluent-plugin-datacalculator-0.0.4
- old
+ new
@@ -68,13 +68,17 @@
end
def createFunc (cnt, str)
str.strip!
left, right = str.split(/\s*=\s*/, 2)
- # Fluent moduleだけはOK
- rights = right.scan(/[a-zA-Z][\w\d_\.\$\:\@]*/).uniq.select{|x| x.index('Fluent') != 0}
+ rights = right.gsub(/([^\\]|^)\".+[^\\]\"/, '')
+ rights = rights.scan(/[a-zA-Z][\w\d_\.\$\:\@]*/).uniq.select{|x| not x.match(/^[A-Z]/)}
+ rights = rights.map do|var|
+ var.sub(/[\.:].+$/, '')
+ end
+
begin
f = eval('lambda {|'+rights.join(',')+'| '+right + '}')
rescue SyntaxError
raise Fluent::ConfigError, "'" + str + "' is not valid"
end
@@ -92,10 +96,14 @@
if tag != nil and tag != 'all'
arg = tag + '_' + arg
end
_argv.push obj[arg]
}
- formula.call(*_argv)
+ begin
+ formula.call(*_argv)
+ rescue ArgumentError
+ raise Fluent::RuntimeError, "argument error " + _argv + " are adapted to "+ formula
+ end
end
@_formulas = []
if conf.has_key?('formulas')
fs = conf['formulas'].split(/\s*,\s*/)