class LogStash::Filters::Javascript::Script
Constants
- FILENAME
- MAX_LINE_LENGTH
Attributes
context[R]
Public Class Methods
new(context, params, logger)
click to toggle source
@param context the JS this context for the filter function @param params additional JS (key-value) parameters to set 'globally'
# File lib/logstash/filters/javascript.rb, line 177 def initialize(context, params, logger) @logger = logger @engine = javax.script.ScriptEngineManager.new.getEngineByName("nashorn") @context = context factory = @engine.getFactory logger.debug "initialized javascript (#{factory.getLanguageVersion}) engine:", name: factory.getEngineName, version: factory.getEngineVersion params.each { |name, value| @engine.put(name, value) } end
Public Instance Methods
get(name)
click to toggle source
@return nil if no such property
# File lib/logstash/filters/javascript.rb, line 205 def get(name) @engine.get(name) end
js_call(js_fn, arg)
click to toggle source
# File lib/logstash/filters/javascript.rb, line 200 def js_call(js_fn, arg) js_fn.call(@context, arg) end
js_eval(code, path: nil) { |: code| ... }
click to toggle source
# File lib/logstash/filters/javascript.rb, line 188 def js_eval(code, path: nil) filename = @engine.get(FILENAME) @engine.put(FILENAME, path) @engine.eval block_given? ? yield : code rescue => e # (non-checked) Java::JavaxScript::ScriptException, e.g. # Java::JavaxScript::ScriptException (TypeError: Cannot read property "far" from undefined in <eval> at line number 2) @logger.error "failed to evaluate javascript code:", code_hint(code, path).merge(message: e.message) raise e ensure @engine.put(FILENAME, filename) end
verify()
click to toggle source
# File lib/logstash/filters/javascript.rb, line 209 def verify true # NOTE can we do more JS code checks? end
Private Instance Methods
code_hint(code, path)
click to toggle source
# File lib/logstash/filters/javascript.rb, line 217 def code_hint(code, path) return { path: path } if path lines = code.split("\n") code = lines.find { |line| ! line.strip.empty? } if code.length <= MAX_LINE_LENGTH code = "#{code}..." if lines.size > 1 else code = "#{code[0, MAX_LINE_LENGTH - 3]}..." end { code: code } end