logstash-core 1.5.0.rc2.snapshot-java → 1.5.0.rc3-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: 9d71faa6ec440c5cb9057a50d51147d590b25984
4
- data.tar.gz: 52f21ca86f005baa4e5eb3c3886040e1657fc9a2
3
+ metadata.gz: 33f2eca5fac0bd51fb51dcaa864f11e5dad12614
4
+ data.tar.gz: e16ce45358620cd81a1044b42f31744ac4106274
5
5
  SHA512:
6
- metadata.gz: 2202931d2edce9a77cb4a8b9f84a36c1b9ff1a9c38a1cf319ab8f3b48b65eb59654e4841c17ef7f062ba92f4b0b9ab082d227702118b51f94b513b1d45f3a20d
7
- data.tar.gz: e0fa89dfd73c248c93999986ca023716a24ea62670fa2781e58b6d7d2edde5f2f280319aac23ea48ac83cffab289b4031b7443d0e795bb1c9567495d53d3b078
6
+ metadata.gz: 6fed2572b9d8d055330b405efe6524c9a9cbc228b946bca904ec9967206d6c7753e8f6a08ac8a3b3cfce6ef1cb36c62a9d6d876ab551ba5b711b018343e5a96c
7
+ data.tar.gz: 88c502df536ec73769152280fac1172737db4c7b49bc1c081b2ed821b3f2b185472adf8185095d876e95e26f6108c13e6a8ad5df0f42bd3d8f3b3a970c34d729
@@ -172,7 +172,6 @@ class LogStash::Agent < Clamp::Command
172
172
 
173
173
  if RUBY_PLATFORM == "java"
174
174
  show_version_java
175
- show_version_elasticsearch
176
175
  end
177
176
 
178
177
  if [:debug].include?(verbosity?) || debug?
@@ -190,13 +189,6 @@ class LogStash::Agent < Clamp::Command
190
189
  puts RUBY_DESCRIPTION
191
190
  end # def show_version_ruby
192
191
 
193
- def show_version_elasticsearch
194
- LogStash::Environment.load_elasticsearch_jars!
195
-
196
- $stdout.write("Elasticsearch: ");
197
- org.elasticsearch.Version::main([])
198
- end # def show_version_elasticsearch
199
-
200
192
  def show_version_java
201
193
  properties = java.lang.System.getProperties
202
194
  puts "java #{properties["java.version"]} (#{properties["java.vendor"]})"
@@ -1,28 +1,55 @@
1
- require "bundler"
2
- require "bundler/cli"
3
-
4
- module Bundler
5
- # Patch bundler to write a .lock file specific to the version of ruby.
6
- # This keeps MRI/JRuby/RBX from conflicting over the Gemfile.lock updates
7
- module SharedHelpers
8
- def default_lockfile
9
- ruby = "#{LogStash::Environment.ruby_engine}-#{LogStash::Environment.ruby_abi_version}"
10
- Pathname.new("#{default_gemfile}.#{ruby}.lock")
11
- end
12
- end
13
-
14
- # Add the Bundler.reset! method which has been added in master but is not in 1.7.9.
15
- class << self
16
- unless self.method_defined?("reset!")
17
- def reset!
18
- @definition = nil
19
- end
20
- end
21
- end
22
- end
1
+ require "logstash/environment"
23
2
 
24
3
  module LogStash
25
4
  module Bundler
5
+ # Take a gem package and extract it to a specific target
6
+ # @param [String] Gem file, this must be a path
7
+ # @param [String, String] Return a Gem::Package and the installed path
8
+ def self.unpack(file, path)
9
+ require "rubygems/package"
10
+ require "securerandom"
11
+
12
+ # We are creating a random directory per extract,
13
+ # if we dont do this bundler will not trigger download of the dependencies.
14
+ # Use case is:
15
+ # - User build his own gem with a fix
16
+ # - User doesnt increment the version
17
+ # - User install the same version but different code or dependencies multiple times..
18
+ basename = ::File.basename(file, '.gem')
19
+ unique = SecureRandom.hex(4)
20
+ target_path = ::File.expand_path(::File.join(path, unique, basename))
21
+
22
+ package = ::Gem::Package.new(file)
23
+ package.extract_files(target_path)
24
+
25
+ return [package, target_path]
26
+ end
27
+
28
+ def self.setup!(options = {})
29
+ options = {:without => [:development]}.merge(options)
30
+ options[:without] = Array(options[:without])
31
+
32
+ # make sure we use our own installed bundler
33
+ require "logstash/patches/rubygems" # patch rubygems before clear_paths
34
+ ::Gem.clear_paths
35
+ ::Gem.paths = ENV['GEM_HOME'] = ENV['GEM_PATH'] = LogStash::Environment.logstash_gem_home
36
+
37
+ # set BUNDLE_GEMFILE ENV before requiring bundler to avoid bundler recurse and load unrelated Gemfile(s)
38
+ ENV["BUNDLE_GEMFILE"] = LogStash::Environment::GEMFILE_PATH
39
+
40
+ require "bundler"
41
+ require "logstash/bundler"
42
+ require "logstash/patches/bundler"
43
+
44
+ ::Bundler.settings[:path] = LogStash::Environment::BUNDLE_DIR
45
+ ::Bundler.settings[:without] = options[:without].join(":")
46
+ # in the context of Bundler.setup it looks like this is useless here because Gemfile path can only be specified using
47
+ # the ENV, see https://github.com/bundler/bundler/blob/v1.8.3/lib/bundler/shared_helpers.rb#L103
48
+ ::Bundler.settings[:gemfile] = LogStash::Environment::GEMFILE_PATH
49
+
50
+ ::Bundler.reset!
51
+ ::Bundler.setup
52
+ end
26
53
 
27
54
  # capture any $stdout from the passed block. also trap any exception in that block, in which case the trapped exception will be returned
28
55
  # @param [Proc] the code block to execute
@@ -51,7 +78,22 @@ module LogStash
51
78
  options[:without] = Array(options[:without])
52
79
  options[:update] = Array(options[:update]) if options[:update]
53
80
 
54
- ENV["GEM_PATH"] = LogStash::Environment.logstash_gem_home
81
+ # make sure we use our own installed bundler
82
+ require "logstash/patches/rubygems" # patch rubygems before clear_paths
83
+ ::Gem.clear_paths
84
+ ::Gem.paths = ENV['GEM_HOME'] = ENV['GEM_PATH'] = LogStash::Environment.logstash_gem_home
85
+
86
+ # set BUNDLE_GEMFILE ENV before requiring bundler to avoid bundler recurse and load unrelated Gemfile(s).
87
+ # in the context of calling Bundler::CLI this is not really required since Bundler::CLI will look at
88
+ # Bundler.settings[:gemfile] unlike Bundler.setup. For the sake of consistency and defensive/future proofing, let's keep it here.
89
+ ENV["BUNDLE_GEMFILE"] = LogStash::Environment::GEMFILE_PATH
90
+
91
+ require "bundler"
92
+ require "bundler/cli"
93
+ require "logstash/patches/bundler"
94
+
95
+ # force Rubygems sources to our Gemfile sources
96
+ ::Gem.sources = options[:rubygems_source] if options[:rubygems_source]
55
97
 
56
98
  ::Bundler.settings[:path] = LogStash::Environment::BUNDLE_DIR
57
99
  ::Bundler.settings[:gemfile] = LogStash::Environment::GEMFILE_PATH
@@ -60,7 +102,7 @@ module LogStash
60
102
  try = 0
61
103
 
62
104
  # capture_stdout also traps any raised exception and pass them back as the function return [output, exception]
63
- capture_stdout do
105
+ output, exception = capture_stdout do
64
106
  loop do
65
107
  begin
66
108
  ::Bundler.reset!
@@ -81,11 +123,15 @@ module LogStash
81
123
 
82
124
  try += 1
83
125
  $stderr.puts("Error #{e.class}, retrying #{try}/#{options[:max_tries]}")
84
- $stderr.puts(e.message) if ENV["DEBUG"]
126
+ $stderr.puts(e.message)
85
127
  sleep(0.5)
86
128
  end
87
129
  end
88
130
  end
131
+
132
+ raise exception if exception
133
+
134
+ return output
89
135
  end
90
136
 
91
137
  # build Bundler::CLI.start arguments array from the given options hash
@@ -107,4 +153,4 @@ module LogStash
107
153
  arguments.flatten
108
154
  end
109
155
  end
110
- end
156
+ end
@@ -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
@@ -81,20 +103,22 @@ module LogStash; module Config; module AST
81
103
  ["filter", "output"].each do |type|
82
104
  # defines @filter_func and @output_func
83
105
 
84
- definitions << "@#{type}_func = lambda do |event, &block|"
85
- definitions << " events = [event]"
106
+ definitions << "def #{type}_func(event)"
107
+ definitions << " events = [event]" if type == "filter"
86
108
  definitions << " @logger.debug? && @logger.debug(\"#{type} received\", :event => event.to_hash)"
109
+
87
110
  sections.select { |s| s.plugin_type.text_value == type }.each do |s|
88
111
  definitions << s.compile.split("\n", -1).map { |e| " #{e}" }
89
112
  end
90
113
 
91
- if type == "filter"
92
- definitions << " events.flatten.each{|e| block.call(e) }"
93
- end
114
+ definitions << " events" if type == "filter"
94
115
  definitions << "end"
95
116
  end
96
117
 
97
118
  code += definitions.join("\n").split("\n", -1).collect { |l| " #{l}" }
119
+
120
+ code += LogStash::Config::AST.defered_conditionals
121
+
98
122
  return code.join("\n")
99
123
  end
100
124
  end
@@ -125,20 +149,15 @@ module LogStash; module Config; module AST
125
149
  #{name}_flush = lambda do |options, &block|
126
150
  @logger.debug? && @logger.debug(\"Flushing\", :plugin => #{name})
127
151
 
128
- flushed_events = #{name}.flush(options)
152
+ events = #{name}.flush(options)
129
153
 
130
- return if flushed_events.nil? || flushed_events.empty?
154
+ return if events.nil? || events.empty?
131
155
 
132
- flushed_events.each do |event|
133
- @logger.debug? && @logger.debug(\"Flushing\", :plugin => #{name}, :event => event)
156
+ @logger.debug? && @logger.debug(\"Flushing\", :plugin => #{name}, :events => events)
134
157
 
135
- events = [event]
136
- #{plugin.compile_starting_here.gsub(/^/, " ")}
137
-
138
- block.call(event)
139
- events.flatten.each{|e| block.call(e) if e != event}
140
- end
158
+ #{plugin.compile_starting_here.gsub(/^/, " ")}
141
159
 
160
+ events.each{|e| block.call(e)}
142
161
  end
143
162
 
144
163
  if #{name}.respond_to?(:flush)
@@ -211,13 +230,7 @@ module LogStash; module Config; module AST
211
230
  return "start_input(#{variable_name})"
212
231
  when "filter"
213
232
  return <<-CODE
214
- events = events.flat_map do |event|
215
- next [] if event.cancelled?
216
-
217
- new_events = []
218
- #{variable_name}.filter(event){|new_event| new_events << new_event}
219
- event.cancelled? ? new_events : new_events.unshift(event)
220
- end
233
+ #{variable_name}.filter(event) {|new_event| events << new_event }
221
234
  CODE
222
235
  when "output"
223
236
  return "#{variable_name}.handle(event)\n"
@@ -287,7 +300,7 @@ module LogStash; module Config; module AST
287
300
 
288
301
  module Unicode
289
302
  def self.wrap(text)
290
- return "(" + text.inspect + ".force_encoding(Encoding::UTF_8)" + ")"
303
+ return "(" + text.force_encoding(Encoding::UTF_8).inspect + ")"
291
304
  end
292
305
  end
293
306
 
@@ -364,18 +377,38 @@ module LogStash; module Config; module AST
364
377
  # at the end, events is returned to handle the case where no branch match and no branch code is executed
365
378
  # so we must make sure to return the current event.
366
379
 
367
- return <<-CODE
368
- events = events.flat_map do |event|
369
- events = [event]
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
370
403
  #{super}
371
404
  end
372
- events
373
- end
374
- CODE
405
+ CODE
406
+ end
375
407
  end
376
408
  end
377
409
 
378
410
  class BranchEntry < Node; end
411
+
379
412
  class If < BranchEntry
380
413
  def compile
381
414
  children = recursive_inject { |e| e.is_a?(Branch) || e.is_a?(Plugin) }
@@ -472,7 +472,7 @@ module LogStash::Config::Mixin
472
472
  bytes = Integer(value.first) rescue nil
473
473
  result = bytes || Filesize.from(value.first).to_i
474
474
  rescue ArgumentError
475
- return false, "Unparseable filesize: #{value.first}. possible units (KiB, MiB, ...) e.g. '10 KiB'. doc reference: http://www.elasticsearch.org/guide/en/logstash/current/_logstash_config_language.html#bytes"
475
+ return false, "Unparseable filesize: #{value.first}. possible units (KiB, MiB, ...) e.g. '10 KiB'. doc reference: http://www.elastic.co/guide/en/logstash/current/configuration.html#bytes"
476
476
  end
477
477
  else
478
478
  return false, "Unknown validator symbol #{validator}"
@@ -1,75 +1,19 @@
1
1
  require "logstash/errors"
2
- require 'logstash/version'
3
-
4
- # monkey patch RubyGems to silence ffi warnings:
5
- #
6
- # WARN: Unresolved specs during Gem::Specification.reset:
7
- # ffi (>= 0)
8
- # WARN: Clearing out unresolved specs.
9
- # Please report a bug if this causes problems.
10
- #
11
- # see https://github.com/elasticsearch/logstash/issues/2556 and https://github.com/rubygems/rubygems/issues/1070
12
- #
13
- # this code is from Rubygems v2.1.9 in JRuby 1.7.17. Per tickets this issue should be solved at JRuby >= 1.7.20.
14
-
15
- # this method implementation works for Rubygems version 2.1.0 and up, verified up to 2.4.6
16
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new("2.1.0") && Gem::Version.new(Gem::VERSION) < Gem::Version.new("2.5.0")
17
- class Gem::Specification
18
- def self.reset
19
- @@dirs = nil
20
- Gem.pre_reset_hooks.each { |hook| hook.call }
21
- @@all = nil
22
- @@stubs = nil
23
- _clear_load_cache
24
- unresolved = unresolved_deps
25
- unless unresolved.empty?
26
- unless (unresolved.size == 1 && unresolved["ffi"])
27
- w = "W" + "ARN"
28
- warn "#{w}: Unresolved specs during Gem::Specification.reset:"
29
- unresolved.values.each do |dep|
30
- warn " #{dep}"
31
- end
32
- warn "#{w}: Clearing out unresolved specs."
33
- warn "Please report a bug if this causes problems."
34
- end
35
- unresolved.clear
36
- end
37
- Gem.post_reset_hooks.each { |hook| hook.call }
38
- end
39
- end
40
- end
2
+ require "logstash/version"
41
3
 
42
4
  module LogStash
43
5
  module Environment
44
6
  extend self
45
7
 
46
8
  LOGSTASH_HOME = ::File.expand_path(::File.join(::File.dirname(__FILE__), "..", ".."))
47
- JAR_DIR = ::File.join(LOGSTASH_HOME, "vendor", "jar")
48
- ELASTICSEARCH_DIR = ::File.join(LOGSTASH_HOME, "vendor", "elasticsearch")
49
9
  BUNDLE_DIR = ::File.join(LOGSTASH_HOME, "vendor", "bundle")
50
10
  GEMFILE_PATH = ::File.join(LOGSTASH_HOME, "Gemfile")
51
11
  BUNDLE_CONFIG_PATH = ::File.join(LOGSTASH_HOME, ".bundle", "config")
52
12
  BOOTSTRAP_GEM_PATH = ::File.join(LOGSTASH_HOME, 'build', 'bootstrap')
13
+ LOCAL_GEM_PATH = ::File.join(LOGSTASH_HOME, 'vendor', 'local_gems')
53
14
 
54
15
  LOGSTASH_ENV = (ENV["LS_ENV"] || 'production').to_s.freeze
55
16
 
56
- # loads currently embedded elasticsearch jars
57
- # @raise LogStash::EnvironmentError if not running under JRuby or if no jar files are found
58
- def load_elasticsearch_jars!
59
- raise(LogStash::EnvironmentError, "JRuby is required") unless jruby?
60
-
61
- require "java"
62
- jars_path = ::File.join(ELASTICSEARCH_DIR, "**", "*.jar")
63
- jar_files = Dir.glob(jars_path)
64
-
65
- raise(LogStash::EnvironmentError, "Could not find Elasticsearch jar files under #{ELASTICSEARCH_DIR}") if jar_files.empty?
66
-
67
- jar_files.each do |jar|
68
- loaded = require jar
69
- puts("Loaded #{jar}") if $DEBUG && loaded
70
- end
71
- end
72
-
73
17
  def logstash_gem_home
74
18
  ::File.join(BUNDLE_DIR, ruby_engine, gem_ruby_version)
75
19
  end
@@ -90,27 +34,41 @@ module LogStash
90
34
  env.downcase == "test"
91
35
  end
92
36
 
93
- def bundler_setup!(options = {})
94
- options = {:without => [:development]}.merge(options)
95
- options[:without] = Array(options[:without])
96
- # make sure we use our own nicely installed bundler and not a rogue, bad, mean, ugly, stupid other bundler. bad bundler, bad bad bundler go away.
97
- ::Gem.clear_paths
98
- ::Gem.paths = ENV['GEM_HOME'] = ENV['GEM_PATH'] = logstash_gem_home
37
+ def runtime_jars_root(dir_name, package)
38
+ ::File.join(dir_name, package, "runtime-jars")
39
+ end
40
+
41
+ def test_jars_root(dir_name, package)
42
+ ::File.join(dir_name, package, "test-jars")
43
+ end
44
+
45
+ def load_runtime_jars!(dir_name="vendor", package="jar-dependencies")
46
+ load_jars!(::File.join(runtime_jars_root(dir_name, package), "*.jar"))
47
+ end
99
48
 
100
- # set BUNDLE_GEMFILE ENV before requiring bundler to avoid bundler recurse and load unrelated Gemfile(s)
101
- ENV["BUNDLE_GEMFILE"] = LogStash::Environment::GEMFILE_PATH
49
+ def load_test_jars!(dir_name="vendor", package="jar-dependencies")
50
+ load_jars!(::File.join(test_jars_root(dir_name, package), "*.jar"))
51
+ end
102
52
 
103
- require "bundler"
104
- require "logstash/bundler"
53
+ def load_jars!(pattern)
54
+ raise(LogStash::EnvironmentError, I18n.t("logstash.environment.jruby-required")) unless LogStash::Environment.jruby?
105
55
 
106
- ::Bundler.settings[:path] = LogStash::Environment::BUNDLE_DIR
107
- ::Bundler.settings[:without] = options[:without].join(":")
108
- # in the context of Bundler.setup it looks like this is useless here because Gemfile path can only be specified using
109
- # the ENV, see https://github.com/bundler/bundler/blob/v1.8.3/lib/bundler/shared_helpers.rb#L103
110
- ::Bundler.settings[:gemfile] = LogStash::Environment::GEMFILE_PATH
56
+ jar_files = find_jars(pattern)
57
+ require_jars! jar_files
58
+ end
111
59
 
112
- ::Bundler.reset!
113
- ::Bundler.setup
60
+ def find_jars(pattern)
61
+ require 'java'
62
+ jar_files = Dir.glob(pattern)
63
+ raise(LogStash::EnvironmentError, I18n.t("logstash.environment.missing-jars", :pattern => pattern)) if jar_files.empty?
64
+ jar_files
65
+ end
66
+
67
+ def require_jars!(files)
68
+ files.each do |jar_file|
69
+ loaded = require jar_file
70
+ puts("Loaded #{jar_file}") if $DEBUG && loaded
71
+ end
114
72
  end
115
73
 
116
74
  def ruby_bin