Class: LogStash::Filters::Javascript::Script
- Inherits:
-
Object
- Object
- LogStash::Filters::Javascript::Script
- Defined in:
- lib/logstash/filters/javascript.rb
Constant Summary collapse
- FILENAME =
javax.script.ScriptEngine::FILENAME
Instance Attribute Summary collapse
-
#context ⇒ Object
readonly
Returns the value of attribute context.
Instance Method Summary collapse
-
#get(name) ⇒ Object
Nil if no such property.
-
#initialize(context, params, logger) ⇒ Script
constructor
A new instance of Script.
- #js_call(js_fn, arg) ⇒ Object
- #js_eval(code, path: nil) ⇒ Object
- #verify ⇒ Object
Constructor Details
#initialize(context, params, logger) ⇒ Script
Returns a new instance of Script.
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
#context ⇒ Object (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.
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.) raise e ensure @engine.put(FILENAME, filename) end |
#verify ⇒ Object
209 210 211 |
# File 'lib/logstash/filters/javascript.rb', line 209 def verify true # NOTE can we do more JS code checks? end |