logstash-core 2.1.3-java → 2.2.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.

Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/lib/logstash-core.rb +1 -3
  3. data/lib/logstash-core/logstash-core.rb +3 -0
  4. data/lib/logstash-core/version.rb +8 -0
  5. data/lib/logstash/agent.rb +48 -20
  6. data/lib/logstash/codecs/base.rb +2 -2
  7. data/lib/logstash/config/config_ast.rb +8 -3
  8. data/lib/logstash/environment.rb +0 -16
  9. data/lib/logstash/filters/base.rb +9 -5
  10. data/lib/logstash/inputs/base.rb +1 -1
  11. data/lib/logstash/output_delegator.rb +150 -0
  12. data/lib/logstash/outputs/base.rb +37 -40
  13. data/lib/logstash/pipeline.rb +259 -178
  14. data/lib/logstash/pipeline_reporter.rb +114 -0
  15. data/lib/logstash/plugin.rb +1 -1
  16. data/lib/logstash/{shutdown_controller.rb → shutdown_watcher.rb} +10 -37
  17. data/lib/logstash/util.rb +17 -0
  18. data/lib/logstash/util/decorators.rb +14 -7
  19. data/lib/logstash/util/worker_threads_default_printer.rb +4 -4
  20. data/lib/logstash/util/wrapped_synchronous_queue.rb +41 -0
  21. data/lib/logstash/version.rb +10 -2
  22. data/locales/en.yml +8 -3
  23. data/logstash-core.gemspec +5 -3
  24. data/spec/{core/conditionals_spec.rb → conditionals_spec.rb} +0 -0
  25. data/spec/{core/config_spec.rb → logstash/config/config_ast_spec.rb} +0 -0
  26. data/spec/{core/config_cpu_core_strategy_spec.rb → logstash/config/cpu_core_strategy_spec.rb} +0 -0
  27. data/spec/{core/config_defaults_spec.rb → logstash/config/defaults_spec.rb} +0 -0
  28. data/spec/{core/config_mixin_spec.rb → logstash/config/mixin_spec.rb} +0 -0
  29. data/spec/{core → logstash}/environment_spec.rb +0 -0
  30. data/spec/{filters → logstash/filters}/base_spec.rb +0 -0
  31. data/spec/{inputs → logstash/inputs}/base_spec.rb +0 -0
  32. data/spec/{lib/logstash → logstash}/java_integration_spec.rb +0 -0
  33. data/spec/{util → logstash}/json_spec.rb +0 -0
  34. data/spec/logstash/output_delegator_spec.rb +126 -0
  35. data/spec/logstash/outputs/base_spec.rb +40 -0
  36. data/spec/logstash/pipeline_reporter_spec.rb +85 -0
  37. data/spec/{core → logstash}/pipeline_spec.rb +128 -16
  38. data/spec/{core → logstash}/plugin_spec.rb +47 -1
  39. data/spec/logstash/runner_spec.rb +68 -0
  40. data/spec/{core/shutdown_controller_spec.rb → logstash/shutdown_watcher_spec.rb} +17 -11
  41. data/spec/{util → logstash/util}/buftok_spec.rb +0 -0
  42. data/spec/{util → logstash/util}/charset_spec.rb +0 -0
  43. data/spec/{util → logstash/util}/defaults_printer_spec.rb +4 -4
  44. data/spec/{util → logstash/util}/java_version_spec.rb +0 -0
  45. data/spec/{util → logstash/util}/plugin_version_spec.rb +0 -0
  46. data/spec/{util → logstash/util}/unicode_trimmer_spec.rb +0 -0
  47. data/spec/{util → logstash/util}/worker_threads_default_printer_spec.rb +8 -8
  48. data/spec/logstash/util/wrapped_synchronous_queue_spec.rb +28 -0
  49. data/spec/{util_spec.rb → logstash/util_spec.rb} +0 -0
  50. metadata +74 -81
  51. data/lib/logstash/event.rb +0 -275
  52. data/lib/logstash/patches/bundler.rb +0 -36
  53. data/lib/logstash/sized_queue.rb +0 -8
  54. data/lib/logstash/string_interpolation.rb +0 -140
  55. data/lib/logstash/timestamp.rb +0 -97
  56. data/lib/logstash/util/accessors.rb +0 -123
  57. data/spec/core/event_spec.rb +0 -518
  58. data/spec/core/runner_spec.rb +0 -40
  59. data/spec/core/timestamp_spec.rb +0 -84
  60. data/spec/coverage_helper.rb +0 -24
  61. data/spec/lib/logstash/bundler_spec.rb +0 -121
  62. data/spec/license_spec.rb +0 -67
  63. data/spec/outputs/base_spec.rb +0 -26
  64. data/spec/plugin_manager/install_spec.rb +0 -28
  65. data/spec/plugin_manager/update_spec.rb +0 -39
  66. data/spec/plugin_manager/util_spec.rb +0 -71
  67. data/spec/spec_helper.rb +0 -11
  68. data/spec/util/accessors_spec.rb +0 -170
  69. data/spec/util/compress_spec.rb +0 -121
  70. data/spec/util/gemfile_spec.rb +0 -212
  71. data/spec/util/retryable_spec.rb +0 -139
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
- require_relative 'coverage_helper'
3
- # In order to archive an expected coverage analysis we need to eager load
4
- # all logstash code base, otherwise it will not get a good analysis.
5
- CoverageHelper.eager_load if ENV['COVERAGE']
6
-
7
- require "logstash/devutils/rspec/spec_helper"
8
-
9
- def installed_plugins
10
- Gem::Specification.find_all.select { |spec| spec.metadata["logstash_plugin"] }.map { |plugin| plugin.name }
11
- end
@@ -1,170 +0,0 @@
1
- # encoding: utf-8
2
- require "spec_helper"
3
- require "logstash/util/accessors"
4
-
5
- describe LogStash::Util::Accessors, :if => true do
6
-
7
- context "using simple field" do
8
-
9
- it "should get value of word key" do
10
- str = "hello"
11
- data = { "hello" => "world" }
12
- accessors = LogStash::Util::Accessors.new(data)
13
- expect(accessors.get(str)).to eq(data[str])
14
- end
15
-
16
- it "should get value of key with spaces" do
17
- str = "hel lo"
18
- data = { "hel lo" => "world" }
19
- accessors = LogStash::Util::Accessors.new(data)
20
- expect(accessors.get(str)).to eq(data[str])
21
- end
22
-
23
- it "should get value of numeric key string" do
24
- str = "1"
25
- data = { "1" => "world" }
26
- accessors = LogStash::Util::Accessors.new(data)
27
- expect(accessors.get(str)).to eq(data[str])
28
- end
29
-
30
- it "should handle delete" do
31
- str = "simple"
32
- data = { "simple" => "things" }
33
- accessors = LogStash::Util::Accessors.new(data)
34
- expect(accessors.del(str)).to eq("things")
35
- expect(data).to be_empty
36
- end
37
-
38
- it "should handle delete on non-existent field" do
39
- str = "[foo][bar]"
40
- data = { "hello" => "world" }
41
- accessors = LogStash::Util::Accessors.new(data)
42
- expect(accessors.del(str)).to be_nil
43
- expect(data).not_to be_empty
44
- # assert no side effects
45
- expect(accessors.get("foo")).to be_nil
46
- expect(accessors.get("hello")).to eq("world")
47
- end
48
-
49
- it "should set string value" do
50
- str = "simple"
51
- data = {}
52
- accessors = LogStash::Util::Accessors.new(data)
53
- expect(accessors.set(str, "things")).to eq("things")
54
- expect(data).to eq({ "simple" => "things" })
55
- end
56
-
57
- it "should set array value" do
58
- str = "simple"
59
- data = {}
60
- accessors = LogStash::Util::Accessors.new(data)
61
- expect(accessors.set(str, ["foo", "bar"])).to eq(["foo", "bar"])
62
- expect(data).to eq({ "simple" => ["foo", "bar"]})
63
- end
64
- end
65
-
66
- context "using field path" do
67
-
68
- it "should get shallow string value of word key" do
69
- str = "[hello]"
70
- data = { "hello" => "world" }
71
- accessors = LogStash::Util::Accessors.new(data)
72
- expect(accessors.get(str)).to eq("world")
73
- end
74
-
75
- it "should get shallow string value of key with spaces" do
76
- str = "[hel lo]"
77
- data = { "hel lo" => "world" }
78
- accessors = LogStash::Util::Accessors.new(data)
79
- expect(accessors.get(str)).to eq("world")
80
- end
81
-
82
- it "should get shallow string value of numeric key string" do
83
- str = "[1]"
84
- data = { "1" => "world" }
85
- accessors = LogStash::Util::Accessors.new(data)
86
- expect(accessors.get(str)).to eq("world")
87
- end
88
-
89
- it "should get deep string value" do
90
- str = "[hello][world]"
91
- data = { "hello" => { "world" => "foo", "bar" => "baz" } }
92
- accessors = LogStash::Util::Accessors.new(data)
93
- expect(accessors.get(str)).to eq(data["hello"]["world"])
94
- end
95
-
96
- it "should return nil when getting a non-existant field (with no side-effects on original data)" do
97
- str = "[hello][world]"
98
- data = {}
99
- accessors = LogStash::Util::Accessors.new(data)
100
- expect(accessors.get(str)).to be_nil
101
- expect(data).to be_empty
102
- expect(accessors.set(str, "foo")).to eq("foo")
103
- expect(data).to eq({ "hello" => {"world" => "foo"} })
104
- end
105
-
106
- it "should handle delete" do
107
- str = "[hello][world]"
108
- data = { "hello" => { "world" => "foo", "bar" => "baz" } }
109
- accessors = LogStash::Util::Accessors.new(data)
110
- expect(accessors.del(str)).to eq("foo")
111
-
112
- # Make sure the "world" key is removed.
113
- expect(data["hello"]).to eq({ "bar" => "baz" })
114
- end
115
-
116
- it "should set shallow string value" do
117
- str = "[hello]"
118
- data = {}
119
- accessors = LogStash::Util::Accessors.new(data)
120
- expect(accessors.set(str, "foo")).to eq("foo")
121
- expect(data).to eq({ "hello" => "foo" })
122
- end
123
-
124
- it "should set deep string value" do
125
- str = "[hello][world]"
126
- data = {}
127
- accessors = LogStash::Util::Accessors.new(data)
128
- expect(accessors.set(str, "foo")).to eq("foo")
129
- expect(data).to eq({ "hello" => { "world" => "foo" } })
130
- end
131
-
132
- it "should set deep array value" do
133
- str = "[hello][world]"
134
- data = {}
135
- accessors = LogStash::Util::Accessors.new(data)
136
- expect(accessors.set(str, ["foo", "bar"])).to eq(["foo", "bar"])
137
- expect(data).to eq({ "hello" => { "world" => ["foo", "bar"] } })
138
- end
139
-
140
- it "should set element within array value" do
141
- str = "[hello][0]"
142
- data = {"hello" => ["foo", "bar"]}
143
- accessors = LogStash::Util::Accessors.new(data)
144
- expect(accessors.set(str, "world") ).to eq("world")
145
- expect(data).to eq({"hello" => ["world", "bar"]})
146
- end
147
-
148
- it "should retrieve array item" do
149
- data = { "hello" => { "world" => ["a", "b"], "bar" => "baz" } }
150
- accessors = LogStash::Util::Accessors.new(data)
151
- expect(accessors.get("[hello][world][0]")).to eq(data["hello"]["world"][0])
152
- expect(accessors.get("[hello][world][1]")).to eq(data["hello"]["world"][1])
153
- end
154
-
155
- it "should retrieve array item containing hash" do
156
- data = { "hello" => { "world" => [ { "a" => 123 }, { "b" => 345 } ], "bar" => "baz" } }
157
- accessors = LogStash::Util::Accessors.new(data)
158
- expect(accessors.get("[hello][world][0][a]")).to eq(data["hello"]["world"][0]["a"])
159
- expect(accessors.get("[hello][world][1][b]")).to eq(data["hello"]["world"][1]["b"])
160
- end
161
-
162
- it "should handle delete of array element" do
163
- str = "[geocoords][0]"
164
- data = { "geocoords" => [4, 2] }
165
- accessors = LogStash::Util::Accessors.new(data)
166
- expect(accessors.del(str)).to eq(4)
167
- expect(data).to eq({ "geocoords" => [2] })
168
- end
169
- end
170
- end
@@ -1,121 +0,0 @@
1
- # encoding: utf-8
2
- require "spec_helper"
3
- require 'ostruct'
4
- require "bootstrap/util/compress"
5
-
6
- describe LogStash::Util::Zip do
7
-
8
- subject { Class.new { extend LogStash::Util::Zip } }
9
-
10
- context "#extraction" do
11
-
12
- let(:source) { File.join(File.expand_path("."), "source_file.zip") }
13
- let(:target) { File.expand_path("target_dir") }
14
-
15
- it "raise an exception if the target dir exist" do
16
- allow(File).to receive(:exist?).with(target).and_return(true)
17
- expect { subject.extract(source, target) }.to raise_error
18
- end
19
-
20
- let(:zip_file) do
21
- [ "foo", "bar", "zoo" ].inject([]) do |acc, name|
22
- acc << OpenStruct.new(:name => name)
23
- acc
24
- end
25
- end
26
-
27
- it "extract the list of entries from a zip file" do
28
- allow(Zip::File).to receive(:open).with(source).and_yield(zip_file)
29
- expect(FileUtils).to receive(:mkdir_p).exactly(3).times
30
- expect(zip_file).to receive(:extract).exactly(3).times
31
- subject.extract(source, target)
32
- end
33
- end
34
-
35
- context "#compression" do
36
-
37
- let(:target) { File.join(File.expand_path("."), "target_file.zip") }
38
- let(:source) { File.expand_path("source_dir") }
39
-
40
- it "raise an exception if the target file exist" do
41
- allow(File).to receive(:exist?).with(target).and_return(true)
42
- expect { subject.compress(source, target) }.to raise_error
43
- end
44
-
45
- let(:dir_files) do
46
- [ "foo", "bar", "zoo" ]
47
- end
48
-
49
- let(:zip_file) { Class.new }
50
-
51
- it "add a dir to a zip file" do
52
- allow(Zip::File).to receive(:open).with(target, ::Zip::File::CREATE).and_yield(zip_file)
53
- allow(Dir).to receive(:glob).and_return(dir_files)
54
- expect(zip_file).to receive(:add).exactly(3).times
55
- subject.compress(source, target)
56
- end
57
- end
58
- end
59
-
60
- describe LogStash::Util::Tar do
61
-
62
- subject { Class.new { extend LogStash::Util::Tar } }
63
-
64
- context "#extraction" do
65
-
66
- let(:source) { File.join(File.expand_path("."), "source_file.tar.gz") }
67
- let(:target) { File.expand_path("target_dir") }
68
-
69
- it "raise an exception if the target dir exist" do
70
- allow(File).to receive(:exist?).with(target).and_return(true)
71
- expect { subject.extract(source, target) }.to raise_error
72
- end
73
-
74
- let(:gzip_file) { Class.new }
75
-
76
- let(:tar_file) do
77
- [ "foo", "bar", "zoo" ].inject([]) do |acc, name|
78
- acc << OpenStruct.new(:full_name => name)
79
- acc
80
- end
81
- end
82
-
83
- it "extract the list of entries from a tar.gz file" do
84
- allow(Zlib::GzipReader).to receive(:open).with(source).and_yield(gzip_file)
85
- allow(Gem::Package::TarReader).to receive(:new).with(gzip_file).and_yield(tar_file)
86
-
87
- expect(FileUtils).to receive(:mkdir).with(target)
88
- expect(File).to receive(:open).exactly(3).times
89
- subject.extract(source, target)
90
- end
91
- end
92
-
93
- context "#compression" do
94
-
95
- let(:target) { File.join(File.expand_path("."), "target_file.tar.gz") }
96
- let(:source) { File.expand_path("source_dir") }
97
-
98
- it "raise an exception if the target file exist" do
99
- allow(File).to receive(:exist?).with(target).and_return(true)
100
- expect { subject.compress(source, target) }.to raise_error
101
- end
102
-
103
- let(:dir_files) do
104
- [ "foo", "bar", "zoo" ]
105
- end
106
-
107
- let(:tar_file) { Class.new }
108
- let(:tar) { Class.new }
109
-
110
- it "add a dir to a tgz file" do
111
- allow(Stud::Temporary).to receive(:file).and_yield(tar_file)
112
- allow(Gem::Package::TarWriter).to receive(:new).with(tar_file).and_yield(tar)
113
- allow(Dir).to receive(:glob).and_return(dir_files)
114
- expect(File).to receive(:stat).exactly(3).times.and_return(OpenStruct.new(:mode => "rw"))
115
- expect(tar).to receive(:add_file).exactly(3).times
116
- expect(tar_file).to receive(:rewind)
117
- expect(subject).to receive(:gzip).with(target, tar_file)
118
- subject.compress(source, target)
119
- end
120
- end
121
- end
@@ -1,212 +0,0 @@
1
- # encoding: utf-8
2
- require "spec_helper"
3
- require "pluginmanager/gemfile"
4
-
5
- describe "logstash Gemfile Manager" do
6
-
7
- context LogStash::Gemfile do
8
-
9
- context "load" do
10
-
11
- it "should load and return self" do
12
- file = <<-END
13
- source "https://rubygems.org"
14
- gemspec :a => "a"
15
- gem "test", "> 1.0", "< 2.0", :b => "b"
16
- END
17
-
18
- gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
19
- expect(gemfile).to be_an(LogStash::Gemfile)
20
- end
21
-
22
- it "should add sources" do
23
- file = <<-END
24
- source "a"
25
- source "b"
26
- END
27
-
28
- gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
29
- expect(gemfile.gemset.sources.size).to eq(2)
30
- expect(gemfile.gemset.sources).to eq(["a", "b"])
31
- end
32
-
33
- it "should add gemspec" do
34
- file = <<-END
35
- gemspec "foo"
36
- END
37
-
38
- gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
39
- expect(gemfile.gemset.gemspec).to eq("foo")
40
- end
41
-
42
- it "should raise on multiple gemspec" do
43
- file = <<-END
44
- gemspec "foo"
45
- gemspec "boom"
46
- END
47
-
48
- expect{LogStash::Gemfile.new(StringIO.new(file)).load}.to raise_error(LogStash::GemfileError)
49
- end
50
-
51
- it "should add gems" do
52
- file = <<-END
53
- gem "foo"
54
- gem "bar"
55
- END
56
-
57
- gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
58
- expect(gemfile.gemset.gems.size).to eq(2)
59
- expect(gemfile.gemset.gems[0].name).to eq("foo")
60
- expect(gemfile.gemset.gems[1].name).to eq("bar")
61
- end
62
-
63
- it "should raise on duplicate gem name" do
64
- file = <<-END
65
- gem "foo"
66
- gem "foo"
67
- END
68
-
69
- expect{LogStash::Gemfile.new(StringIO.new(file)).load}.to raise_error(LogStash::GemfileError)
70
- end
71
-
72
- it "should add gems with only name" do
73
- file = <<-END
74
- gem "foo"
75
- END
76
-
77
- gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
78
-
79
- expect(gemfile.gemset.gems[0].name).to eq("foo")
80
- expect(gemfile.gemset.gems[0].requirements.empty?).to eq(true)
81
- expect(gemfile.gemset.gems[0].options.empty?).to eq(true)
82
- end
83
-
84
- it "should add gems with name and requirements" do
85
- file = <<-END
86
- gem "foo", "a"
87
- gem "bar", "a", "b"
88
- END
89
-
90
- gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
91
-
92
- expect(gemfile.gemset.gems[0].name).to eq("foo")
93
- expect(gemfile.gemset.gems[0].requirements).to eq(["a"])
94
- expect(gemfile.gemset.gems[0].options.empty?).to eq(true)
95
-
96
- expect(gemfile.gemset.gems[1].name).to eq("bar")
97
- expect(gemfile.gemset.gems[1].requirements).to eq(["a", "b"])
98
- expect(gemfile.gemset.gems[1].options.empty?).to eq(true)
99
- end
100
-
101
- it "should add gems with name and options" do
102
- file = <<-END
103
- gem "foo", :a => "a"
104
- gem "bar", :a => "a", :b => "b"
105
- END
106
-
107
- gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
108
-
109
- expect(gemfile.gemset.gems[0].name).to eq("foo")
110
- expect(gemfile.gemset.gems[0].requirements.empty?).to eq(true)
111
- expect(gemfile.gemset.gems[0].options).to eq({:a => "a"})
112
-
113
- expect(gemfile.gemset.gems[1].name).to eq("bar")
114
- expect(gemfile.gemset.gems[1].requirements.empty?).to eq(true)
115
- expect(gemfile.gemset.gems[1].options).to eq({:a => "a", :b => "b"})
116
- end
117
-
118
- it "should add gems with name, requirements and options" do
119
- file = <<-END
120
- gem "foo", "> 1.0", :b => "b"
121
- gem "bar", "> 2.0", "< 3.0", :c => "c", :d => "d"
122
- END
123
-
124
- gemfile = LogStash::Gemfile.new(StringIO.new(file)).load
125
- expect(gemfile.gemset.gems.size).to eq(2)
126
-
127
- expect(gemfile.gemset.gems[0].name).to eq("foo")
128
- expect(gemfile.gemset.gems[0].requirements).to eq(["> 1.0"])
129
- expect(gemfile.gemset.gems[0].options).to eq({:b => "b"})
130
-
131
- expect(gemfile.gemset.gems[1].name).to eq("bar")
132
- expect(gemfile.gemset.gems[1].requirements).to eq(["> 2.0", "< 3.0"])
133
- expect(gemfile.gemset.gems[1].options).to eq({:c => "c", :d => "d"})
134
- end
135
- end
136
-
137
- describe "Locally installed gems" do
138
- subject { LogStash::Gemfile.new(StringIO.new(file)).load.locally_installed_gems }
139
-
140
- context "has gems defined with a path" do
141
- let(:file) {
142
- %Q[
143
- source "https://rubygems.org"
144
- gemspec :a => "a", "b" => 1
145
- gem "foo", "> 1.0", :path => "/tmp/foo"
146
- gem "bar", :path => "/tmp/bar"
147
- gem "no-fun"
148
- ]
149
- }
150
-
151
- it "returns the list of gems" do
152
- expect(subject.collect(&:name)).to eq(["foo", "bar"])
153
- end
154
- end
155
-
156
- context "no gems defined with a path" do
157
- let(:file) {
158
- %Q[
159
- source "https://rubygems.org"
160
- gemspec :a => "a", "b" => 1
161
- gem "no-fun"
162
- ]
163
- }
164
-
165
- it "return an empty list" do
166
- expect(subject.size).to eq(0)
167
- end
168
- end
169
-
170
- context "keep a backup of the original file" do
171
-
172
- end
173
- end
174
-
175
- context "save" do
176
- it "should save" do
177
- file = <<-END
178
- source "https://rubygems.org"
179
- gemspec :a => "a", "b" => 1
180
- gem "foo", "> 1.0", "< 2.0", :b => "b"
181
- gem "bar"
182
- END
183
-
184
- io = StringIO.new(file)
185
- gemfile = LogStash::Gemfile.new(io).load
186
- gemfile.save
187
- expect(file).to eq(
188
- LogStash::Gemfile::HEADER + \
189
- "source \"https://rubygems.org\"\n" + \
190
- "gemspec :a => \"a\", \"b\" => 1\n" + \
191
- "gem \"foo\", \"> 1.0\", \"< 2.0\", :b => \"b\"\n" + \
192
- "gem \"bar\"\n"
193
- )
194
- end
195
- end
196
- end
197
-
198
- context LogStash::DSL do
199
- context "parse" do
200
- it "should parse Gemfile content string" do
201
- gemfile = <<-END
202
- source "https://rubygems.org"
203
- gemspec
204
- gem "foo"
205
- END
206
-
207
- gemset = LogStash::DSL.parse(gemfile)
208
- expect(gemset).to be_an(LogStash::Gemset)
209
- end
210
- end
211
- end
212
- end