logstash-core 1.5.0.rc3.snapshot2-java → 1.5.0.rc3.snapshot3-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of logstash-core might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9ec518211d023c5f4499757aed7d6e3cfdf7c2fa
4
- data.tar.gz: 8434ea102ecd49a99ddbf66f9c1730028087f661
3
+ metadata.gz: 349047620a2726f0c42566a25c9e6a2b229d9ece
4
+ data.tar.gz: d6d9a858c12499f66ff7f0d2e250267208bd77d3
5
5
  SHA512:
6
- metadata.gz: a2312511be9d28f1a5d0b07fc66bfba8a50dcdb3299c15b6ee9bc803356f2fc4ee668b9c38047b64cfc4532117f4c43e9fa6fd20236cb20abd391001c75177ba
7
- data.tar.gz: 44784d222a78ba4cfe8ee0a9b84b342d780280fcc62fbb3b0823bb1c0f110b08ca941e3e2c204e8f31bcd3c245b390170e012e35b030d41fd6e9ae9603a8a8ee
6
+ metadata.gz: e5fe3f78adde94e7fbc5327fdebb3534f3086f14d86d558a6f225c930256bbdf7edd9ce175bc08757e6c3cbc6872db8166a25f439718712a3eb20b5c5e4a18d0
7
+ data.tar.gz: d0f571cbc5d26b5b0a54a4e79b3ca87abb698bd5d4ad9a05bc6ff7ecfdf7f1f726f1b40c99643c99319f58d742d45f06f08c7a7c95048421051f7f2a9ada60cc
@@ -1,7 +1,9 @@
1
1
  # encoding: utf-8
2
2
  require 'logstash/errors'
3
3
  require "treetop"
4
+
4
5
  class Treetop::Runtime::SyntaxNode
6
+
5
7
  def compile
6
8
  return "" if elements.nil?
7
9
  return elements.collect(&:compile).reject(&:empty?).join("")
@@ -55,11 +57,31 @@ class Treetop::Runtime::SyntaxNode
55
57
  end
56
58
  end
57
59
 
60
+
58
61
  module LogStash; module Config; module AST
62
+
63
+ def self.defered_conditionals=(val)
64
+ @defered_conditionals = val
65
+ end
66
+
67
+ def self.defered_conditionals
68
+ @defered_conditionals
69
+ end
70
+
71
+ def self.defered_conditionals_index
72
+ @defered_conditionals_index
73
+ end
74
+
75
+ def self.defered_conditionals_index=(val)
76
+ @defered_conditionals_index = val
77
+ end
78
+
59
79
  class Node < Treetop::Runtime::SyntaxNode; end
60
80
 
61
81
  class Config < Node
62
82
  def compile
83
+ LogStash::Config::AST.defered_conditionals = []
84
+ LogStash::Config::AST.defered_conditionals_index = 0
63
85
  code = []
64
86
 
65
87
  code << <<-CODE
@@ -94,6 +116,9 @@ module LogStash; module Config; module AST
94
116
  end
95
117
 
96
118
  code += definitions.join("\n").split("\n", -1).collect { |l| " #{l}" }
119
+
120
+ code += LogStash::Config::AST.defered_conditionals
121
+
97
122
  return code.join("\n")
98
123
  end
99
124
  end
@@ -124,20 +149,15 @@ module LogStash; module Config; module AST
124
149
  #{name}_flush = lambda do |options, &block|
125
150
  @logger.debug? && @logger.debug(\"Flushing\", :plugin => #{name})
126
151
 
127
- flushed_events = #{name}.flush(options)
152
+ events = #{name}.flush(options)
128
153
 
129
- return if flushed_events.nil? || flushed_events.empty?
154
+ return if events.nil? || events.empty?
130
155
 
131
- flushed_events.each do |event|
132
- @logger.debug? && @logger.debug(\"Flushing\", :plugin => #{name}, :event => event)
156
+ @logger.debug? && @logger.debug(\"Flushing\", :plugin => #{name}, :events => events)
133
157
 
134
- events = [event]
135
- #{plugin.compile_starting_here.gsub(/^/, " ")}
136
-
137
- block.call(event)
138
- events.flatten.each{|e| block.call(e) if e != event}
139
- end
158
+ #{plugin.compile_starting_here.gsub(/^/, " ")}
140
159
 
160
+ events.each{|e| block.call(e)}
141
161
  end
142
162
 
143
163
  if #{name}.respond_to?(:flush)
@@ -210,7 +230,7 @@ module LogStash; module Config; module AST
210
230
  return "start_input(#{variable_name})"
211
231
  when "filter"
212
232
  return <<-CODE
213
- events = #{variable_name}.multi_filter(events)
233
+ #{variable_name}.filter(event) {|new_event| events << new_event }
214
234
  CODE
215
235
  when "output"
216
236
  return "#{variable_name}.handle(event)\n"
@@ -357,14 +377,38 @@ module LogStash; module Config; module AST
357
377
  # at the end, events is returned to handle the case where no branch match and no branch code is executed
358
378
  # so we must make sure to return the current event.
359
379
 
360
- <<-CODE
361
- #{super}
362
- end
363
- CODE
380
+ type = recursive_select_parent(PluginSection).first.plugin_type.text_value
381
+
382
+ if type == "filter"
383
+ i = LogStash::Config::AST.defered_conditionals_index += 1
384
+ source = <<-CODE
385
+ def cond_func_#{i}(input_events)
386
+ result = []
387
+ input_events.each do |event|
388
+ events = [event]
389
+ #{super}
390
+ end
391
+ result += events
392
+ end
393
+ result
394
+ end
395
+ CODE
396
+ LogStash::Config::AST.defered_conditionals << source
397
+
398
+ <<-CODE
399
+ events = cond_func_#{i}(events)
400
+ CODE
401
+ else
402
+ <<-CODE
403
+ #{super}
404
+ end
405
+ CODE
406
+ end
364
407
  end
365
408
  end
366
409
 
367
410
  class BranchEntry < Node; end
411
+
368
412
  class If < BranchEntry
369
413
  def compile
370
414
  children = recursive_inject { |e| e.is_a?(Branch) || e.is_a?(Plugin) }
@@ -235,6 +235,10 @@ class LogStash::Event
235
235
  # Take the inside of the %{ ... }
236
236
  key = tok[2 ... -1]
237
237
 
238
+ if key[0] == "+" && !@data.has_key?(TIMESTAMP)
239
+ raise LogStash::Error, "Unable to format \"#{key}\" in string \"#{format}\", #{TIMESTAMP} field not found"
240
+ end
241
+
238
242
  if key == "+%s"
239
243
  # Got %{+%s}, support for unix epoch time
240
244
  next @data[TIMESTAMP].to_i
@@ -146,24 +146,6 @@ class LogStash::Filters::Base < LogStash::Plugin
146
146
  raise "#{self.class}#filter must be overidden"
147
147
  end # def filter
148
148
 
149
-
150
- # in 1.5.0 multi_filter is meant to be used in the generated filter function in LogStash::Config::AST::Plugin only
151
- # and is temporary until we refactor the filter method interface to accept events list and return events list,
152
- # just list in multi_filter see https://github.com/elastic/logstash/issues/2872.
153
- # refactoring the filter method will mean updating all plugins which we want to avoid doing for 1.5.0.
154
- #
155
- # @param events [Array<LogStash::Event] list of events to filter
156
- # @return [Array<LogStash::Event] filtered events and any new events generated by the filter
157
- public
158
- def multi_filter(events)
159
- result = []
160
- events.each do |event|
161
- result << event
162
- filter(event){|new_event| result << new_event}
163
- end
164
- result
165
- end
166
-
167
149
  public
168
150
  def execute(event, &block)
169
151
  filter(event, &block)
@@ -6,36 +6,75 @@ require "java"
6
6
  # not test for is_a?(Array) or is_a?(Hash) and we do not want to include tests for
7
7
  # both classes everywhere. see LogStash::JSon.
8
8
 
9
- class Java::JavaUtil::ArrayList
10
- # have ArrayList objects report is_a?(Array) == true
11
- def is_a?(clazz)
12
- return true if clazz == Array
9
+ class Array
10
+ # enable class equivalence between Array and ArrayList
11
+ # so that ArrayList will work with case o when Array ...
12
+ def self.===(other)
13
+ return true if other.is_a?(Java::JavaUtil::Collection)
13
14
  super
14
15
  end
15
16
  end
16
17
 
18
+ class Hash
19
+ # enable class equivalence between Hash and LinkedHashMap
20
+ # so that LinkedHashMap will work with case o when Hash ...
21
+ def self.===(other)
22
+ return true if other.is_a?(Java::JavaUtil::Map)
23
+ super
24
+ end
25
+ end
26
+
27
+
28
+ # this is a temporary fix to solve a bug in JRuby where classes implementing the Map interface, like LinkedHashMap
29
+ # have a bug in the has_key? method that is implemented in the Enumerable module that is somehow mixed in the Map interface.
30
+ # this bug makes has_key? (and all its aliases) return false for a key that has a nil value.
31
+ # Only LinkedHashMap is patched here because patching the Map interface is not working.
32
+ # TODO find proper fix, and submit upstream
33
+ # releavant JRuby files:
34
+ # https://github.com/jruby/jruby/blob/master/core/src/main/ruby/jruby/java/java_ext/java.util.rb
35
+ # https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/java/proxies/MapJavaProxy.java
17
36
  class Java::JavaUtil::LinkedHashMap
18
- # have LinkedHashMap objects report is_a?(Array) == true
37
+ def has_key?(key)
38
+ self.containsKey(key)
39
+ end
40
+ alias_method :include?, :has_key?
41
+ alias_method :member?, :has_key?
42
+ alias_method :key?, :has_key?
43
+ end
44
+
45
+ module java::util::Map
46
+ # have Map objects like LinkedHashMap objects report is_a?(Array) == true
19
47
  def is_a?(clazz)
20
48
  return true if clazz == Hash
21
49
  super
22
50
  end
23
51
  end
24
52
 
25
- class Array
26
- # enable class equivalence between Array and ArrayList
27
- # so that ArrayList will work with case o when Array ...
28
- def self.===(other)
29
- return true if other.is_a?(Java::JavaUtil::ArrayList)
53
+ module java::util::Collection
54
+ # have Collections objects like ArrayList report is_a?(Array) == true
55
+ def is_a?(clazz)
56
+ return true if clazz == Array
30
57
  super
31
58
  end
32
- end
33
59
 
34
- class Hash
35
- # enable class equivalence between Hash and LinkedHashMap
36
- # so that LinkedHashMap will work with case o when Hash ...
37
- def self.===(other)
38
- return true if other.is_a?(Java::JavaUtil::LinkedHashMap)
39
- super
60
+ # support the Ruby Array delete method on a Java Collection
61
+ def delete(o)
62
+ self.removeAll([o]) ? o : block_given? ? yield : nil
63
+ end
64
+
65
+ # support the Ruby intersection method on Java Collection
66
+ def &(other)
67
+ # transform self into a LinkedHashSet to remove duplicates and preserve order as defined by the Ruby Array intersection contract
68
+ duped = Java::JavaUtil::LinkedHashSet.new(self)
69
+ duped.retainAll(other)
70
+ duped
71
+ end
72
+
73
+ # support the Ruby union method on Java Collection
74
+ def |(other)
75
+ # transform self into a LinkedHashSet to remove duplicates and preserve order as defined by the Ruby Array union contract
76
+ duped = Java::JavaUtil::LinkedHashSet.new(self)
77
+ duped.addAll(other)
78
+ duped
40
79
  end
41
80
  end
@@ -55,7 +55,8 @@ module LogStash::Util
55
55
 
56
56
  def include?(accessor)
57
57
  target, key = lookup_path(accessor)
58
- return target.include?(key)
58
+ return false unless target
59
+ target.is_a?(Array) ? !target[key.to_i].nil? : target.include?(key)
59
60
  end
60
61
 
61
62
  private
@@ -1,6 +1,6 @@
1
1
  # encoding: utf-8
2
2
  # The version of logstash.
3
- LOGSTASH_VERSION = "1.5.0-rc3.snapshot2"
3
+ LOGSTASH_VERSION = "1.5.0-rc3.snapshot3"
4
4
 
5
5
  # Note to authors: this should not include dashes because 'gem' barfs if
6
6
  # you include a dash in the version string.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0.rc3.snapshot2
4
+ version: 1.5.0.rc3.snapshot3
5
5
  platform: java
6
6
  authors:
7
7
  - Jordan Sissel
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-04-14 00:00:00.000000000 Z
13
+ date: 2015-04-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: cabin