logstash-core 1.5.0.beta2-java → 1.5.0-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 +4 -4
- data/lib/logstash-core.rb +2 -0
- data/lib/logstash/agent.rb +0 -41
- data/lib/logstash/config/config_ast.rb +62 -29
- data/lib/logstash/config/mixin.rb +3 -3
- data/lib/logstash/environment.rb +37 -100
- data/lib/logstash/event.rb +32 -20
- data/lib/logstash/filters/base.rb +20 -0
- data/lib/logstash/java_integration.rb +72 -18
- data/lib/logstash/namespace.rb +0 -3
- data/lib/logstash/outputs/base.rb +1 -1
- data/lib/logstash/patches/bundler.rb +20 -0
- data/lib/logstash/patches/rubygems.rb +37 -0
- data/lib/logstash/pipeline.rb +59 -39
- data/lib/logstash/runner.rb +4 -50
- data/lib/logstash/util.rb +0 -1
- data/lib/logstash/util/accessors.rb +6 -0
- data/lib/logstash/version.rb +1 -1
- data/locales/en.yml +5 -0
- data/logstash-core.gemspec +51 -0
- data/spec/core/conditionals_spec.rb +428 -0
- data/spec/core/config_mixin_spec.rb +99 -0
- data/spec/core/config_spec.rb +108 -0
- data/spec/core/environment_spec.rb +44 -0
- data/spec/core/event_spec.rb +473 -0
- data/spec/core/pipeline_spec.rb +198 -0
- data/spec/core/plugin_spec.rb +106 -0
- data/spec/core/runner_spec.rb +39 -0
- data/spec/core/timestamp_spec.rb +83 -0
- data/spec/filters/base_spec.rb +318 -0
- data/spec/inputs/base_spec.rb +13 -0
- data/spec/lib/logstash/bundler_spec.rb +120 -0
- data/spec/lib/logstash/java_integration_spec.rb +257 -0
- data/spec/logstash/agent_spec.rb +37 -0
- data/spec/outputs/base_spec.rb +47 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/util/accessors_spec.rb +215 -0
- data/spec/util/charset_spec.rb +74 -0
- data/spec/util/fieldeval_spec.rb +96 -0
- data/spec/util/gemfile_spec.rb +212 -0
- data/spec/util/json_spec.rb +97 -0
- data/spec/util/plugin_version_spec.rb +48 -0
- data/spec/util/retryable_spec.rb +145 -0
- data/spec/util_spec.rb +34 -0
- metadata +96 -253
- data/lib/logstash-event.rb +0 -2
- data/lib/logstash.rb +0 -4
- data/lib/logstash/JRUBY-PR1448.rb +0 -32
- data/lib/logstash/bundler.rb +0 -124
- data/lib/logstash/gemfile.rb +0 -175
- data/lib/logstash/pluginmanager.rb +0 -17
- data/lib/logstash/pluginmanager/install.rb +0 -112
- data/lib/logstash/pluginmanager/list.rb +0 -38
- data/lib/logstash/pluginmanager/main.rb +0 -22
- data/lib/logstash/pluginmanager/maven_tools_patch.rb +0 -12
- data/lib/logstash/pluginmanager/uninstall.rb +0 -49
- data/lib/logstash/pluginmanager/update.rb +0 -50
- data/lib/logstash/pluginmanager/util.rb +0 -88
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'clamp'
|
2
|
-
require 'logstash/namespace'
|
3
|
-
require 'logstash/pluginmanager/util'
|
4
|
-
require 'rubygems/spec_fetcher'
|
5
|
-
|
6
|
-
class LogStash::PluginManager::List < Clamp::Command
|
7
|
-
|
8
|
-
parameter "[PLUGIN]", "Part of plugin name to search for, leave empty for all plugins"
|
9
|
-
|
10
|
-
option "--installed", :flag, "List only explicitly installed plugins using bin/plugin install ...", :default => false
|
11
|
-
option "--verbose", :flag, "Also show plugin version number", :default => false
|
12
|
-
option "--group", "NAME", "Filter plugins per group: input, output, filter or codec" do |arg|
|
13
|
-
raise(ArgumentError, "should be one of: input, output, filter or codec") unless ['input', 'output', 'filter', 'codec'].include?(arg)
|
14
|
-
arg
|
15
|
-
end
|
16
|
-
|
17
|
-
def execute
|
18
|
-
Gem.configuration.verbose = false
|
19
|
-
|
20
|
-
gemfile = LogStash::Gemfile.new(File.new(LogStash::Environment::GEMFILE_PATH, "r+")).load
|
21
|
-
|
22
|
-
# start with all locally installed plugin gems regardless of the Gemfile content
|
23
|
-
specs = LogStash::PluginManager.find_plugins_gem_specs
|
24
|
-
|
25
|
-
# apply filters
|
26
|
-
specs = specs.select{|spec| gemfile.find(spec.name)} if installed?
|
27
|
-
specs = specs.select{|spec| spec.name =~ /#{plugin}/i} if plugin
|
28
|
-
specs = specs.select{|spec| spec.metadata['logstash_group'] == group} if group
|
29
|
-
|
30
|
-
raise(LogStash::PluginManager::Error, "No plugins found") if specs.empty?
|
31
|
-
|
32
|
-
specs.sort_by{|spec| spec.name}.each do |spec|
|
33
|
-
line = "#{spec.name}"
|
34
|
-
line += " (#{spec.version})" if verbose?
|
35
|
-
puts(line)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end # class Logstash::PluginManager
|
@@ -1,22 +0,0 @@
|
|
1
|
-
require "logstash/namespace"
|
2
|
-
require "logstash/errors"
|
3
|
-
require "logstash/pluginmanager/install"
|
4
|
-
require "logstash/pluginmanager/uninstall"
|
5
|
-
require "logstash/pluginmanager/list"
|
6
|
-
require "logstash/pluginmanager/update"
|
7
|
-
require "logstash/pluginmanager/util"
|
8
|
-
require "logstash/pluginmanager/maven_tools_patch"
|
9
|
-
require "clamp"
|
10
|
-
|
11
|
-
module LogStash
|
12
|
-
module PluginManager
|
13
|
-
class Error < StandardError; end
|
14
|
-
|
15
|
-
class Main < Clamp::Command
|
16
|
-
subcommand "install", "Install a plugin", LogStash::PluginManager::Install
|
17
|
-
subcommand "uninstall", "Uninstall a plugin", LogStash::PluginManager::Uninstall
|
18
|
-
subcommand "update", "Install a plugin", LogStash::PluginManager::Update
|
19
|
-
subcommand "list", "List all installed plugins", LogStash::PluginManager::List
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# This adds the "repo" element to the jar-dependencies DSL
|
2
|
-
# allowing a gemspec to require a jar that exists in a custom
|
3
|
-
# maven repository
|
4
|
-
# Example:
|
5
|
-
# gemspec.requirements << "repo http://localhosty/repo"
|
6
|
-
require 'maven/tools/dsl/project_gemspec'
|
7
|
-
class Maven::Tools::DSL::ProjectGemspec
|
8
|
-
def repo(url)
|
9
|
-
@parent.repository(:id => url, :url => url)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require "logstash/namespace"
|
2
|
-
require "logstash/logging"
|
3
|
-
require "logstash/errors"
|
4
|
-
require "logstash/environment"
|
5
|
-
require "logstash/pluginmanager/util"
|
6
|
-
require "clamp"
|
7
|
-
|
8
|
-
require "logstash/gemfile"
|
9
|
-
require "logstash/bundler"
|
10
|
-
|
11
|
-
class LogStash::PluginManager::Uninstall < Clamp::Command
|
12
|
-
parameter "PLUGIN", "plugin name"
|
13
|
-
|
14
|
-
|
15
|
-
def execute
|
16
|
-
raise(LogStash::PluginManager::Error, "File #{LogStash::Environment::GEMFILE_PATH} does not exist or is not writable, aborting") unless File.writable?(LogStash::Environment::GEMFILE_PATH)
|
17
|
-
|
18
|
-
gemfile = LogStash::Gemfile.new(File.new(LogStash::Environment::GEMFILE_PATH, "r+")).load
|
19
|
-
# keep a copy of the gemset to revert on error
|
20
|
-
original_gemset = gemfile.gemset.copy
|
21
|
-
|
22
|
-
# make sure this is an installed plugin and present in Gemfile.
|
23
|
-
# it is not possible to uninstall a dependency not listed in the Gemfile, for example a dependent codec
|
24
|
-
raise(LogStash::PluginManager::Error, "This plugin has not been previously installed, aborting") unless LogStash::PluginManager.installed_plugin?(plugin, gemfile)
|
25
|
-
|
26
|
-
# since we previously did a gemfile.find(plugin) there is no reason why
|
27
|
-
# remove would not work (return nil) here
|
28
|
-
if gemfile.remove(plugin)
|
29
|
-
gemfile.save
|
30
|
-
|
31
|
-
puts("Uninstalling #{plugin}")
|
32
|
-
|
33
|
-
# any errors will be logged to $stderr by invoke_bundler!
|
34
|
-
output, exception = LogStash::Bundler.invoke_bundler!(:clean => true)
|
35
|
-
|
36
|
-
if ENV["DEBUG"]
|
37
|
-
$stderr.puts(output)
|
38
|
-
$stderr.puts("Error: #{exception.class}, #{exception.message}") if exception
|
39
|
-
end
|
40
|
-
|
41
|
-
if exception
|
42
|
-
# revert to original Gemfile content
|
43
|
-
gemfile.gemset = original_gemset
|
44
|
-
gemfile.save
|
45
|
-
raise(LogStash::PluginManager::Error, "Uninstall aborted")
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'clamp'
|
2
|
-
require 'logstash/namespace'
|
3
|
-
require 'logstash/pluginmanager/util'
|
4
|
-
require 'jar-dependencies'
|
5
|
-
require 'jar_install_post_install_hook'
|
6
|
-
require 'file-dependencies/gem'
|
7
|
-
|
8
|
-
require "logstash/gemfile"
|
9
|
-
require "logstash/bundler"
|
10
|
-
|
11
|
-
class LogStash::PluginManager::Update < Clamp::Command
|
12
|
-
parameter "[PLUGIN] ...", "Plugin name(s) to upgrade to latest version"
|
13
|
-
|
14
|
-
def execute
|
15
|
-
gemfile = LogStash::Gemfile.new(File.new(LogStash::Environment::GEMFILE_PATH, "r+")).load
|
16
|
-
# keep a copy of the gemset to revert on error
|
17
|
-
original_gemset = gemfile.gemset.copy
|
18
|
-
|
19
|
-
# create list of plugins to update
|
20
|
-
plugins = unless plugin_list.empty?
|
21
|
-
not_installed = plugin_list.find{|plugin| !LogStash::PluginManager.installed_plugin?(plugin, gemfile)}
|
22
|
-
raise(LogStash::PluginManager::Error, "Plugin #{not_installed} has not been previously installed, aborting") if not_installed
|
23
|
-
plugin_list
|
24
|
-
else
|
25
|
-
LogStash::PluginManager.all_installed_plugins_gem_specs(gemfile).map{|spec| spec.name}
|
26
|
-
end
|
27
|
-
|
28
|
-
# remove any version constrain from the Gemfile so the plugin(s) can be updated to latest version
|
29
|
-
# calling update without requiremend will remove any previous requirements
|
30
|
-
plugins.each{|plugin| gemfile.update(plugin)}
|
31
|
-
gemfile.save
|
32
|
-
|
33
|
-
puts("Updating " + plugins.join(", "))
|
34
|
-
|
35
|
-
# any errors will be logged to $stderr by invoke_bundler!
|
36
|
-
output, exception = LogStash::Bundler.invoke_bundler!(:update => plugins)
|
37
|
-
|
38
|
-
if ENV["DEBUG"]
|
39
|
-
$stderr.puts(output)
|
40
|
-
$stderr.puts("Error: #{exception.class}, #{exception.message}") if exception
|
41
|
-
end
|
42
|
-
|
43
|
-
if exception
|
44
|
-
# revert to original Gemfile content
|
45
|
-
gemfile.gemset = original_gemset
|
46
|
-
gemfile.save
|
47
|
-
raise(LogStash::PluginManager::Error, "Update aborted")
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,88 +0,0 @@
|
|
1
|
-
module LogStash::PluginManager
|
2
|
-
|
3
|
-
# check for valid logstash plugin gem name & version or .gem file, logs errors to $stdout
|
4
|
-
# uses Rubygems API and will remotely validated agains the current Gem.sources
|
5
|
-
# @param plugin [String] plugin name or .gem file path
|
6
|
-
# @param version [String] gem version requirement string
|
7
|
-
# @return [Boolean] true if valid logstash plugin gem name & version or a .gem file
|
8
|
-
def self.logstash_plugin?(plugin, version = nil)
|
9
|
-
if plugin_file?(plugin)
|
10
|
-
begin
|
11
|
-
return logstash_plugin_gem_spec?(plugin_file_spec(plugin))
|
12
|
-
rescue => e
|
13
|
-
$stderr.puts("Error reading plugin file #{plugin}, caused by #{e.class}")
|
14
|
-
$stderr.puts(e.message) if ENV["DEBUG"]
|
15
|
-
return false
|
16
|
-
end
|
17
|
-
else
|
18
|
-
dep = Gem::Dependency.new(plugin, version || Gem::Requirement.default)
|
19
|
-
specs, error = Gem::SpecFetcher.fetcher.spec_for_dependency(dep)
|
20
|
-
|
21
|
-
# depending on version requirements, multiple specs can be returned in which case
|
22
|
-
# we will grab the one with the highest version number
|
23
|
-
if latest = specs.map(&:first).max_by(&:version)
|
24
|
-
unless valid = logstash_plugin_gem_spec?(latest)
|
25
|
-
$stderr.puts("#{plugin} is not a Logstash plugin")
|
26
|
-
end
|
27
|
-
return valid
|
28
|
-
else
|
29
|
-
$stderr.puts("Plugin #{plugin}" + (version ? " version #{version}" : "") + " does not exist")
|
30
|
-
return false
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# @param spec [Gem::Specification] plugin gem specification
|
36
|
-
# @return [Boolean] true if this spec is for an installable logstash plugin
|
37
|
-
def self.logstash_plugin_gem_spec?(spec)
|
38
|
-
spec.metadata && spec.metadata["logstash_plugin"] == "true"
|
39
|
-
end
|
40
|
-
|
41
|
-
# @param path [String] path to .gem file
|
42
|
-
# @return [Gem::Specification] .get file gem specification
|
43
|
-
# @raise [Exception] Gem::Package::FormatError will be raised on invalid .gem file format, might be other exceptions too
|
44
|
-
def self.plugin_file_spec(path)
|
45
|
-
Gem::Package.new(path).spec
|
46
|
-
end
|
47
|
-
|
48
|
-
# @param plugin [String] the plugin name or the local path to a .gem file
|
49
|
-
# @return [Boolean] true if the plugin is a local .gem file
|
50
|
-
def self.plugin_file?(plugin)
|
51
|
-
(plugin =~ /\.gem$/ && File.file?(plugin))
|
52
|
-
end
|
53
|
-
|
54
|
-
# retrieve gem specs for all or specified name valid logstash plugins locally installed
|
55
|
-
# @param name [String] specific plugin name to find or nil for all plungins
|
56
|
-
# @return [Array<Gem::Specification>] all local logstash plugin gem specs
|
57
|
-
def self.find_plugins_gem_specs(name = nil)
|
58
|
-
specs = name ? Gem::Specification.find_all_by_name(name) : Gem::Specification.find_all
|
59
|
-
specs.select{|spec| logstash_plugin_gem_spec?(spec)}
|
60
|
-
end
|
61
|
-
|
62
|
-
# list of all locally installed plugins specs specified in the Gemfile.
|
63
|
-
# note that an installed plugin dependecies like codecs will not be listed, only those
|
64
|
-
# specifically listed in the Gemfile.
|
65
|
-
# @param gemfile [LogStash::Gemfile] the gemfile to validate against
|
66
|
-
# @return [Array<Gem::Specification>] list of plugin names
|
67
|
-
def self.all_installed_plugins_gem_specs(gemfile)
|
68
|
-
# we start form the installed gemspecs so we can verify the metadata for valid logstash plugin
|
69
|
-
# then filter out those not included in the Gemfile
|
70
|
-
find_plugins_gem_specs.select{|spec| !!gemfile.find(spec.name)}
|
71
|
-
end
|
72
|
-
|
73
|
-
# @param plugin [String] plugin name
|
74
|
-
# @param gemfile [LogStash::Gemfile] the gemfile to validate against
|
75
|
-
# @return [Boolean] true if the plugin is an installed logstash plugin and spefificed in the Gemfile
|
76
|
-
def self.installed_plugin?(plugin, gemfile)
|
77
|
-
!!gemfile.find(plugin) && find_plugins_gem_specs(plugin).any?
|
78
|
-
end
|
79
|
-
|
80
|
-
# @param plugin_list [Array] array of [plugin name, version] tuples
|
81
|
-
# @return [Array] array of [plugin name, version, ...] tuples when duplciate names have been merged and non duplicate version requirements added
|
82
|
-
def self.merge_duplicates(plugin_list)
|
83
|
-
|
84
|
-
# quick & dirty naive dedup for now
|
85
|
-
# TODO: properly merge versions requirements
|
86
|
-
plugin_list.uniq(&:first)
|
87
|
-
end
|
88
|
-
end
|