Class: LogStash::Filters::Javascript::Script

Inherits:
Object
  • Object
show all
Defined in:
lib/logstash/filters/javascript.rb

Constant Summary collapse

FILENAME =
javax.script.ScriptEngine::FILENAME

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context, params, logger) ⇒ Script

Returns a new instance of Script.

Parameters:

  • context

    the JS this context for the filter function

  • params

    additional JS (key-value) parameters to set ‘globally’



177
178
179
180
181
182
183
184
185
186
# 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

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



173
174
175
# File 'lib/logstash/filters/javascript.rb', line 173

def context
  @context
end

Instance Method Details

#get(name) ⇒ Object

Returns nil if no such property.

Returns:

  • nil if no such property



205
206
207
# File 'lib/logstash/filters/javascript.rb', line 205

def get(name)
  @engine.get(name)
end

#js_call(js_fn, arg) ⇒ Object



200
201
202
# 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) ⇒ Object



188
189
190
191
192
193
194
195
196
197
198
# 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

#verifyObject



209
210
211
# File 'lib/logstash/filters/javascript.rb', line 209

def verify
  true # NOTE can we do more JS code checks?
end